    def __call__(self, s:str, **kwargs):
        """Parse a string to condition. Allows logical operators.

        Reserved keywords:
            "&" : and operator
            "|" : or operator
            "~" : not operator
            "(" : opening closure
            ")" : closing closure

        These characters cannot be found in
        individual condition parsing (ie.
        in the names of tasks).
        """
        p = ClosureParser()
        v = Visitor(visit_types=(list,))

        # 1. Split closures
        l = p.to_list(s)

        # 2. Split operations
        v.assign_elements(l, self._split_operations)

        # 2a. Remove extra tuples
        v.apply(l, _flatten_tuples)

        v.assign_elements(l, partial(self._parse, **kwargs))

        e = v.reduce(l, self._assemble)
        return e
Parse a string to condition. Allows logical operators.

Reserved keywords:
"&" : and operator
"|" : or operator
"~" : not operator
"(" : opening closure
")" : closing closure

These characters cannot be found in
individual condition parsing (ie.
in the names of tasks).
rocketry/parse/utils/string_parser.py