docs: def _process_voc_annot_view(self, limit):
          """
          This MGI table represents associations between things.
  
          We add the internal annotation id to the idhashmap.
          It is expected that the genotypes have already been added to the idhash
  
          :param limit:
          :return:
  
          """
  
          # TODO also get Strain/Attributes (annottypekey = 1000)
          # TODO what is Phenotype (Derived) vs
          # non-derived?  (annottypekey = 1015)
          # TODO is evidence in this table?  what is the evidence vocab key?
          if self.test_mode:
              graph = self.testgraph
          else:
              graph = self.graph
          model = Model(graph)
          line_counter = 0
          LOG.info("getting G2P associations")
          raw = '/'.join((self.rawdir, 'voc_annot_view'))
          col = [
              'annot_key', 'annot_type', 'object_key', 'term_key', 'qualifier_key',
              'qualifier', 'term', 'accid']
          with open(raw, 'r') as f:
              header = f.readline()  # read the header row; skip
              if header != col:
                  LOG.error("\nExpected header: %s\nReceived header: %s", col, header)
  
              for line in f:
                  row = line.rstrip('\n').split('\t')
  
                  annot_key = row[col.index('annot_key')]
                  annot_type = row[col.index('annot_type')]
                  object_key = row[col.index('object_key')]
                  term_key = row[col.index('term_key')]
                  qualifier_key = row[col.index('qualifier_key')]
                  # qualifier,
                  # term,
                  accid = row[col.index('accid')]
  
                  if self.test_mode is True:
                      if int(annot_key) not in self.test_keys.get('annot'):
                          continue
  
                  # iassoc_id = self._makeInternalIdentifier('annot', annot_key)
                  # assoc_id = self.make_id(iassoc_id)
  
                  assoc_id = None
                  # Mammalian Phenotype/Genotype are curated G2P assoc
                  if annot_type == 'Mammalian Phenotype/Genotype':
                      line_counter += 1
  
                      # We expect the label for the phenotype
                      # to be taken care of elsewhere
                      model.addClassToGraph(accid, None)
  
                      genotype_id = self.idhash['genotype'].get(object_key)
                      if genotype_id is None:
                          LOG.error(
                              "can't find genotype id for %s", object_key)
                      else:
                          # add the association
                          assoc = G2PAssoc(graph, self.name, genotype_id, accid)
                          assoc.add_association_to_graph()
                          assoc_id = assoc.get_association_id()
                  # OMIM/Genotype are disease-models
                  elif annot_type == 'DO/Genotype':
                      # skip NOT annotations for now FIXME
                      if qualifier_key == '1614157':
                          continue
                      genotype_id = self.idhash['genotype'].get(object_key)
                      if genotype_id is None:
                          LOG.error("can't find genotype id for %s", object_key)
                      else:
                          # add the association
                          assoc = Assoc(graph, self.name)
                          # TODO PYLINT
                          # Redefinition of assoc type from
                          # dipper.models.assoc.G2PAssoc.G2PAssoc to
                          # dipper.models.assoc.Association.Assoc
                          assoc.set_subject(genotype_id)
                          assoc.set_object(accid)
                          assoc.set_relationship(self.globaltt['is model of'])
                          assoc.add_association_to_graph()
                          assoc_id = assoc.get_association_id()
                  elif annot_type == 'MCV/Marker':
                      # marker category == type
                      marker_id = self.idhash['marker'].get(object_key)
                      if str(term_key).strip() in self.localtt:
                          term_id = self.resolve(str(term_key).strip())
                      else:
                          term_id = None
                          logging.warning('No type mapping for: %s', term_key)
                      # note that the accid here is an internal mouse cv term,
                      # and we don't use it.
                      if term_id is not None and marker_id is not None:
                          # do something special for transgenics -
                          # make sure these are transgenic insertions
                          model.addType(marker_id, term_id)
                  elif annot_type == 'DO/Allele':  # allele/Disease
                      allele_id = self.idhash['allele'].get(object_key)
                      if allele_id is None:
                          LOG.error("can't find genotype id for %s", object_key)
                      else:
                          # add the association
                          assoc = Assoc(graph, self.name)
                          assoc.set_subject(allele_id)
                          assoc.set_object(accid)
                          assoc.set_relationship(self.globaltt['is model of'])
                          assoc.add_association_to_graph()
                          assoc_id = assoc.get_association_id()
  
                  if assoc_id is not None:
                      # add the assoc to the hashmap (using the monarch id)
                      self.idhash['annot'][annot_key] = assoc_id
                      model.addComment(assoc_id, "annot_key:" + annot_key)
  
                  if not self.test_mode and limit is not None and line_counter > limit:
                      break
  
          return