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 | |