import re from typing import Tuple, List # Matches "foo" in "foo, bar" but not "foobar". Used to search for the # occurrence of a parameter in the derivative formula IDENT_REGEX = r'(^|\W){}($|\W)' # TODO: Use a real parser here; this will get bamboozled def split_name_params(schema: str) -> Tuple[str, List[str]]: m = re.match(r'(\w+)(\.\w+)?\((.*)\)', schema) if m is None: raise RuntimeError(f'Unsupported function schema: {schema}') name, _, params = m.groups() return name, params.split(', ')