in src/math_verify/parser.py [0:0]
def extract_expr(match: re.Match) -> tuple[str | sympy.Expr | None, str]:
# First combine the number
groups = match.groupdict()
# Expr group will always exist because every regex has it
expr = groups.get("expr", "")
integer = next(
(val for name, val in groups.items() if name.startswith("integer") and val), ""
)
decimal = next(
(val for name, val in groups.items() if name.startswith("decimal") and val), ""
)
is_percentage = True if groups.get("percent", None) else False
if integer or decimal:
# This makes sure we can convert numbers like 0001 to 1. Do note that this can convert 0 to '', so we assume an empty string was 0 and convert it back afterwards.
integer = integer.translate(str.maketrans("", "", ", ")).lstrip("0")
if len(integer) == 0:
integer = "0"
decimal = decimal.replace(",", ".")
number_str = f"{integer}{decimal}"
number = Number(number_str)
if is_percentage:
number = convert_to_pct(number)
return number, number_str
# Otherwise just return the expression
# Remove new lines and spaces
if expr:
try:
return (
parse_expr_cached(expr.replace("\n", " ").replace("^", "**")),
expr,
)
except Exception:
pass
return None, expr