<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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