code: def tag_evidence_subtype(evidence):
      
      source_api = evidence.source_api
      annotations = evidence.annotations
  
      if source_api == 'biopax':
          subtype = annotations.get('source_sub_id')
      elif source_api in ('reach', 'eidos'):
          if 'found_by' in annotations:
              from indra.sources.reach.processor import determine_reach_subtype
              if source_api == 'reach':
                  subtype = determine_reach_subtype(annotations['found_by'])
              elif source_api == 'eidos':
                  subtype = annotations['found_by']
              else:
                  subtype = None
          else:
              logger.debug('Could not find found_by attribute in reach '
                           'statement annoations')
              subtype = None
      elif source_api == 'geneways':
          subtype = annotations['actiontype']
      else:
          subtype = None
  
      return (source_api, subtype)
docs: Returns the type and subtype of an evidence object as a string,
      typically the extraction rule or database from which the statement
      was generated.
  
      For biopax, this is just the database name.
  
      Parameters
      ----------
      statement: indra.statements.Evidence
          The statement which we wish to subtype
  
      Returns
      -------
      types: tuple
          A tuple with (type, subtype), both strings
          Returns (type, None) if the type of statement is not yet handled in
          this function.