code: def map_to_subset(self, file, outfile=None, ontology=None, subset=None, class_map=None, relations=None):
          
          if subset is not None:
              logging.info("Creating mapping for subset: {}".format(subset))
              class_map = ontology.create_slim_mapping(subset=subset, relations=relations)
  
          if class_map is None:
              raise ValueError("Neither class_map not subset is set")
          col = self.ANNOTATION_CLASS_COLUMN
          file = self._ensure_file(file)
          tuples = []
          for line in file:
              if line.startswith("!"):
                  continue
              vals = line.split("\t")
              logging.info("LINE: {} VALS: {}".format(line, vals))
              if len(vals) < col:
                  raise ValueError("Line: {} has too few cols, expect class id in col {}".format(line, col))
              cid = vals[col]
              if cid not in class_map or len(class_map[cid]) == 0:
                  self.report.error(line, Report.UNMAPPED_ID, cid)
                  continue
              else:
                  for mcid in class_map[cid]:
                      vals[col] = mcid
                      line = "\t".join(vals)
                      if outfile is not None:
                          outfile.write(line)
                      else:
                          print(line)
docs: Map a file to a subset, writing out results
  
          You can pass either a subset name (e.g. goslim_generic) or a dictionary with ready-made mappings
  
          Arguments
          ---------
          file: file
              Name or file object for input assoc file
          outfile: file
              Name or file object for output (mapped) assoc file; writes to stdout if not set
          subset: str
              Optional name of subset to map to, e.g. goslim_generic
          class_map: dict
              Mapping between asserted class ids and ids to map to. Many to many
          ontology: `Ontology`
              Ontology to extract subset from