Source code for piel.visual.table.symbol

from typing import Union
import logging

logger = logging.getLogger(__name__)


[docs] def convert_to_pi_fraction( value: Union[float, int, str], max_denominator: int = 100 ) -> str: """ Converts a number to the closest fraction of π in LaTeX format if possible. Args: value (Union[float, int, str]): The input number or string representing a number. max_denominator (int): The maximum denominator for the fraction (default is 100). Returns: str: A LaTeX string representation of the number as a fraction of π if possible. Examples: >>> closest_pi_fraction(3.14159) '\\pi' >>> closest_pi_fraction(1.0472) '\\frac{\\pi}{3}' >>> closest_pi_fraction(0.523599) '\\frac{\\pi}{6}' >>> closest_pi_fraction(1) '1' """ from sympy import pi, nsimplify, latex try: # Convert to float if input is a string if isinstance(value, str): value = float(value) # Find the ratio of the value to π and simplify it multiple_of_pi = value / pi.evalf() rational_approx = nsimplify( multiple_of_pi, rational=True, tolerance=1e-10, ) logger.debug(rational_approx) # If the approximation is zero, return '0' if rational_approx == 0: return "0" elif rational_approx == 1: return "\\pi" elif rational_approx == -1: return "-\\pi" elif rational_approx.q == 1: # If it simplifies to an integer multiple of π return f"{rational_approx.p}\\pi" else: # Fractional multiple of π return f"\\frac{{{rational_approx.p}\\pi}}{{{rational_approx.q}}}" except Exception: # Fallback to returning the number in LaTeX format if it cannot be simplified with π return latex(value)
[docs] def convert_tuple_to_pi_fractions( values: tuple[Union[int, float, str], ...], ) -> tuple[str, ...]: """ Converts each element in a tuple of numbers to a fraction of π in LaTeX format if possible. Args: values (Tuple[Union[int, float, str], ...]): A tuple of numbers or strings representing numbers. Returns: Tuple[str, ...]: A tuple of LaTeX string representations for each number as a fraction of π if possible. Examples: >>> convert_tuple_to_pi_fractions((3.14159, 1.5708, 1)) ('\\pi', '\\frac{\\pi}{2}', '1') >>> convert_tuple_to_pi_fractions((0.785398, 0.523599, 0)) ('\\frac{\\pi}{4}', '\\frac{\\pi}{6}', '0') """ phase_tuple = tuple(convert_to_pi_fraction(value) for value in values) separator = "," out = "[" + separator.join(phase_tuple) + "]" return out