def METHOD_NAME(self, node):
    args = node.args
    if len(args) == 1 and isinstance(args[0], ast.Name):
        name = node.args[0].id
        pair = ExchangePair(name)
        if pair.left == "X":
            pair.left = self.left
        if pair.right == "X":
            pair.right = self.right
        args = [str(pair)]
    else:
        args = [self.visit(arg) for arg in args]
    if node.func.id in self.functions:
        return self.functions[node.func.id](*args)
    else:
        self.exchanges.add(node.func.id)
        if len(args) == 1:
            pair = ExchangePair(args[0])
            if pair.left == pair.right:
                return Decimal(1)
        return self.rates[node.func.id].get(*args, NO_RATE)