Source code for aastex._formatting

import numpy as np
import astropy.units as u

__all__ = [
    "format_quantity",
]


[docs] def format_quantity( a: u.Quantity, scientific_notation: None | bool = None, digits_after_decimal: int = 3, ) -> str: estr = "${0.value:0." + str(digits_after_decimal) + "e}\,${0.unit:latex_inline}" fstr = "${0.value:0." + str(digits_after_decimal) + "f}\,${0.unit:latex_inline}" if scientific_notation is None: if np.any(np.abs(a.value) > 0.1): scientific_notation = False else: scientific_notation = True if a.ndim == 0: if not scientific_notation: return fstr.format(a) else: if a != 0: unit = a.unit exponent = np.floor(np.log10(np.abs(a.value))) mantissa = a / 10**exponent format_str = ( "${0:0." + str(digits_after_decimal) + "f} \\times 10^{{{1}}}\\,${2:latex_inline}" ) return format_str.format(mantissa.value, exponent.astype(int), unit) else: return fstr.format(a) else: base_str = "{:0." + str(digits_after_decimal) if not scientific_notation: formatter = base_str + "f}" else: formatter = base_str + "e}" return "{0} {1:latex_inline}".format( np.array2string( a=a.value, precision=digits_after_decimal, separator=", ", floatmode="fixed", max_line_width=200, formatter=dict(float_kind=formatter.format), ), a.unit, )