Spaces:
Runtime error
Runtime error
""" | |
Formatting numeric literals. | |
""" | |
from blib2to3.pytree import Leaf | |
def format_hex(text: str) -> str: | |
""" | |
Formats a hexadecimal string like "0x12B3" | |
""" | |
before, after = text[:2], text[2:] | |
return f"{before}{after.upper()}" | |
def format_scientific_notation(text: str) -> str: | |
"""Formats a numeric string utilizing scentific notation""" | |
before, after = text.split("e") | |
sign = "" | |
if after.startswith("-"): | |
after = after[1:] | |
sign = "-" | |
elif after.startswith("+"): | |
after = after[1:] | |
before = format_float_or_int_string(before) | |
return f"{before}e{sign}{after}" | |
def format_complex_number(text: str) -> str: | |
"""Formats a complex string like `10j`""" | |
number = text[:-1] | |
suffix = text[-1] | |
return f"{format_float_or_int_string(number)}{suffix}" | |
def format_float_or_int_string(text: str) -> str: | |
"""Formats a float string like "1.0".""" | |
if "." not in text: | |
return text | |
before, after = text.split(".") | |
return f"{before or 0}.{after or 0}" | |
def normalize_numeric_literal(leaf: Leaf) -> None: | |
"""Normalizes numeric (float, int, and complex) literals. | |
All letters used in the representation are normalized to lowercase.""" | |
text = leaf.value.lower() | |
if text.startswith(("0o", "0b")): | |
# Leave octal and binary literals alone. | |
pass | |
elif text.startswith("0x"): | |
text = format_hex(text) | |
elif "e" in text: | |
text = format_scientific_notation(text) | |
elif text.endswith("j"): | |
text = format_complex_number(text) | |
else: | |
text = format_float_or_int_string(text) | |
leaf.value = text | |