code: def create_introns(self, exon_featuretype='exon',
                         grandparent_featuretype='gene', parent_featuretype=None,
                         new_featuretype='intron', merge_attributes=True):
          if (grandparent_featuretype and parent_featuretype) or (
              grandparent_featuretype is None and parent_featuretype is None
          ):
              raise ValueError("exactly one of `grandparent_featuretype` or "
                               "`parent_featuretype` should be provided")
          if grandparent_featuretype:
              def child_gen():
                  for gene in self.features_of_type(grandparent_featuretype):
                      for child in self.children(gene, level=1):
                          yield child
          elif parent_featuretype:
              def child_gen():
                  for child in self.features_of_type(parent_featuretype):
                      yield child
          for child in child_gen():
              exons = self.children(child, level=1, featuretype=exon_featuretype,
                                    order_by='start')
              for intron in self.interfeatures(
                  exons, new_featuretype=new_featuretype,
                  merge_attributes=merge_attributes, dialect=self.dialect
              ):
                  yield intron