<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def canonicalize(self, namespace_targets: Mapping[str, List[str]] = None) -> "BEL": """ Takes an AST and returns a canonicalized BEL statement string. Args: namespace_targets (Mapping[str, List[str]]):
 override default canonicalization settings of BEL.bio API api_url - see {api_url}/status to get default canonicalization settings Returns: BEL: returns self """


        # TODO Need to order position independent args

        if not self.ast:
            return self

        # Collect canonical/decanonical NSArg values
        if not self.ast.collected_nsarg_norms:
            self = self.collect_nsarg_norms()

        # TODO Need to pass namespace target overrides for canonicalization
        self.ast.canonicalize()

        # self.ast = bel_utils.convert_namespaces_ast(self.ast, canonicalize=True, api_url=self.api_url, namespace_targets=namespace_targets)

        return self