docs: def _process_disease2gene(self, row):
          """
          Here, we process the disease-to-gene associations.
          Note that we ONLY process direct associations
          (not inferred through chemicals).
          Furthermore, we also ONLY process "marker/mechanism" associations.
  
          We preferentially utilize OMIM identifiers over MESH identifiers
          for disease/phenotype.
          Therefore, if a single OMIM id is listed under the "omim_ids" list,
          we will choose this over any MeSH id that might be listed as
          the disease_id. If multiple OMIM ids are listed in the omim_ids column,
          we toss this for now.
          (Mostly, we are not sure what to do with this information.)
  
          We also pull in the MeSH labels here (but not OMIM) to ensure that
          we have them (as they may not be brought in separately).
          :param row:
          :return:
  
          """
  
          # if self.test_mode:
          # graph = self.testgraph
          # else:
          #     graph = self.graph
          # self._check_list_len(row, 9)
          # geno = Genotype(graph)
          # gu = GraphUtils(curie_map.get())
          model = Model(self.graph)
          (gene_symbol, gene_id, disease_name, disease_id, direct_evidence,
           inference_chemical_name, inference_score, omim_ids, pubmed_ids) = row
  
          # we only want the direct associations; skipping inferred for now
          if direct_evidence == '' or direct_evidence != 'marker/mechanism':
              return
  
          # scrub some of the associations...
          # it seems odd to link human genes to the following "diseases"
          diseases_to_scrub = [
              'MESH:D004283',  # dog diseases
              'MESH:D004195',  # disease models, animal
              'MESH:D030342',  # genetic diseases, inborn
              'MESH:D040181',  # genetic dieases, x-linked
              'MESH:D020022']   # genetic predisposition to a disease
  
          if disease_id in diseases_to_scrub:
              LOG.info(
                  "Skipping association between NCBIGene:%s and %s",
                  str(gene_id), disease_id)
              return
  
          intersect = list(
              set(['OMIM:' + str(i) for i in omim_ids.split('|')] +
                  [disease_id]) & set(self.test_diseaseids))
          if self.test_mode and (
                  int(gene_id) not in self.test_geneids or len(intersect) < 1):
              return
  
          # there are three kinds of direct evidence:
          # (marker/mechanism | marker/mechanism|therapeutic | therapeutic)
          # we are only using the "marker/mechanism" for now
          # TODO what does it mean for a gene to be therapeutic for disease?
          # a therapeutic target?
  
          gene_id = 'NCBIGene:' + gene_id
  
          preferred_disease_id = disease_id
          if omim_ids is not None and omim_ids != '':
              omim_id_list = re.split(r'\|', omim_ids)
              # If there is only one OMIM ID for the Disease ID
              # or in the omim_ids list,
              # use the OMIM ID preferentially over any MeSH ID.
              if re.match(r'OMIM:.*', disease_id):
                  if len(omim_id_list) > 1:
                      # the disease ID is an OMIM ID and
                      # there is more than one OMIM entry in omim_ids.
                      # Currently no entries satisfy this condition
                      pass
                  elif disease_id != ('OMIM:' + omim_ids):
                      # the disease ID is an OMIM ID and
                      # there is only one non-equiv OMIM entry in omim_ids
                      # we preferentially use the disease_id here
                      LOG.warning(
                          "There may be alternate identifier for %s: %s",
                          disease_id, omim_ids)
                      # TODO: What should be done with the alternate disease IDs?
              else:
                  if len(omim_id_list) == 1:
                      # the disease ID is not an OMIM ID
                      # and there is only one OMIM entry in omim_ids.
                      preferred_disease_id = 'OMIM:' + omim_ids
                  elif len(omim_id_list) > 1:
                      # This is when the disease ID is not an OMIM ID and
                      # there is more than one OMIM entry in omim_ids.
                      pass
  
          model.addClassToGraph(gene_id, None)
  
          # not sure if MESH is getting added separately.
          # adding labels here for good measure
          dlabel = None
          if re.match(r'MESH', preferred_disease_id):
              dlabel = disease_name
          model.addClassToGraph(preferred_disease_id, dlabel)
  
          # Add the disease to gene relationship.
          rel_id = self.resolve(direct_evidence)
          refs = self._process_pubmed_ids(pubmed_ids)
  
          self._make_association(gene_id, preferred_disease_id, rel_id, refs)
  
          return