docs: def interpolate_instance_ufos(
          self,
          designspace,
          include=None,
          round_instances=False,
          expand_features_to_instances=False,
      ):
          """Interpolate master UFOs with MutatorMath and return instance UFOs.
  
          Args:
              designspace: a DesignSpaceDocument object containing sources and
                  instances.
              include (str): optional regular expression pattern to match the
                  DS instance 'name' attribute and only interpolate the matching
                  instances.
              round_instances (bool): round instances' coordinates to integer.
              expand_features_to_instances: parses the master feature file, expands all
                  include()s and writes the resulting full feature file to all instance
                  UFOs. Use this if you share feature files among masters in external
                  files. Otherwise, the relative include paths can break as instances
                  may end up elsewhere. Only done on interpolation.
          Returns:
              list of defcon.Font objects corresponding to the UFO instances.
          Raises:
              FontmakeError: if any of the sources defines a custom 'layer', for
                  this is not supported by MutatorMath.
              ValueError: "expand_features_to_instances" is True but no source in the
                  designspace document is designated with '<features copy="1"/>'.
          """
          from glyphsLib.interpolation import apply_instance_data
          from mutatorMath.ufo.document import DesignSpaceDocumentReader
  
          if any(source.layerName is not None for source in designspace.sources):
              raise FontmakeError(
                  "MutatorMath doesn't support DesignSpace sources with 'layer' "
                  "attribute"
              )
  
          # TODO: replace mutatorMath with ufoProcessor?
          builder = DesignSpaceDocumentReader(
              designspace.path, ufoVersion=3, roundGeometry=round_instances, verbose=True
          )
          logger.info("Interpolating master UFOs from designspace")
          if include is not None:
              instances = self._search_instances(designspace, pattern=include)
              for instance_name in instances:
                  builder.readInstance(("name", instance_name))
              filenames = set(instances.values())
          else:
              builder.readInstances()
              filenames = None  # will include all instances
          logger.info("Applying instance data from designspace")
          instance_ufos = apply_instance_data(designspace, include_filenames=filenames)
  
          if expand_features_to_instances:
              logger.debug("Expanding features to instance UFOs")
              master_source = next(
                  (s for s in designspace.sources if s.copyFeatures), None
              )
              if not master_source:
                  raise ValueError("No source is designated as the master for features.")
              else:
                  master_source_font = builder.sources[master_source.name][0]
                  master_source_features = parseLayoutFeatures(master_source_font).asFea()
                  for instance_ufo in instance_ufos:
                      instance_ufo.features.text = master_source_features
                      instance_ufo.save()
  
          return instance_ufos