code: def get_term_agents(self):
          
          terms = self.tree.findall('TERM')
          agents = {}
          assoc_links = []
          for term in terms:
              term_id = term.attrib.get('id')
              if term_id:
                  agent = self._get_agent_by_id(term_id, None)
                  agents[term_id] = agent
                  # Handle assoc-with links
                  aw = term.find('assoc-with')
                  if aw is not None:
                      aw_id = aw.attrib.get('id')
                      if aw_id:
                          assoc_links.append((term_id, aw_id))
          # We only keep the target end of assoc with links if both
          # source and target are in the list
          for source, target in assoc_links:
              if target in agents and source in agents:
                  agents.pop(source)
          return agents
docs: Return dict of INDRA Agents keyed by corresponding TERMs in the EKB.
  
          This is meant to be used when entities e.g. "phosphorylated ERK",
          rather than events need to be extracted from processed natural
          language. These entities with their respective states are represented
          as INDRA Agents. Further, each key of the dictionary corresponds to
          the ID assigned by TRIPS to the given TERM that the Agent was
          extracted from.
  
          Returns
          -------
          agents : dict[str, indra.statements.Agent]
              Dict of INDRA Agents extracted from EKB.