code: def get_agent_rule_str(agent):
      rule_str_list = [_n(agent.name)]
      if isinstance(agent, ist.Agent):
          for mod in agent.mods:
              mstr = abbrevs[mod.mod_type]
              if mod.residue is not None:
                  mstr += mod.residue
              if mod.position is not None:
                  mstr += mod.position
              rule_str_list.append('%s' % mstr)
          for mut in agent.mutations:
              res_from = mut.residue_from if mut.residue_from else 'mut'
              res_to = mut.residue_to if mut.residue_to else 'X'
              if mut.position is None:
                  mut_site_name = res_from
              else:
                  mut_site_name = res_from + mut.position
              mstr = mut_site_name + res_to
              rule_str_list.append(mstr)
          if agent.bound_conditions:
              for b in agent.bound_conditions:
                  if b.is_bound:
                      rule_str_list.append(_n(b.agent.name))
                  else:
                      rule_str_list.append('n' + _n(b.agent.name))
          if agent.location is not None:
              rule_str_list.append(_n(agent.location))
          if agent.activity is not None:
              if agent.activity.is_active:
                  rule_str_list.append(agent.activity.activity_type[:3])
              else:
                  rule_str_list.append(agent.activity.activity_type[:3] + '_inact')
      rule_str = '_'.join(rule_str_list)
      return rule_str