docs: def populate_ast_nsarg_orthologs(ast, species):
      """Recursively collect NSArg orthologs for BEL AST
  
      This requires bo.collect_nsarg_norms() to be run first so NSArg.canonical is available
  
      Args:
          ast: AST at recursive point in belobj
          species: dictionary of species ids vs labels for or
      """
  
      ortholog_namespace = "EG"
  
      if isinstance(ast, NSArg):
          if re.match(ortholog_namespace, ast.canonical):
              orthologs = bel.terms.orthologs.get_orthologs(
                  ast.canonical, list(species.keys())
              )
              for species_id in species:
                  if species_id in orthologs:
                      orthologs[species_id]["species_label"] = species[species_id]
  
              ast.orthologs = copy.deepcopy(orthologs)
  
      # Recursively process every NSArg by processing BELAst and Functions
      if hasattr(ast, "args"):
          for arg in ast.args:
              populate_ast_nsarg_orthologs(arg, species)
  
      return ast