Source code for pyfstat.utils.formatting

import numpy as np


[docs]def round_to_n(x, n): """Simple rounding function for getting a fixed number of digits. Parameters ---------- x: float The number to round. n: int The number of digits to round to (before plus after the decimal separator). Returns ---------- rounded: float The rounded number. """ if not x: return 0 power = -int(np.floor(np.log10(abs(x)))) + (n - 1) factor = 10**power return round(x * factor) / factor
[docs]def texify_float(x, d=2): """Format float numbers nicely for LaTeX output, including rounding. Numbers with absolute values between 0.01 and 100 will be returned in plain float format, while smaller or larger numbers will be returned in powers-of-ten notation. Parameters ---------- x: float The number to round and format. n: int The number of digits to round to (before plus after the decimal separator). Returns ---------- formatted: str The formatted string. """ if x == 0: return 0 if type(x) == str: return x x = round_to_n(x, d) if 0.01 < abs(x) < 100: return str(x) else: power = int(np.floor(np.log10(abs(x)))) stem = np.round(x / 10**power, d) if d == 1: stem = int(stem) return r"${}{{\times}}10^{{{}}}$".format(stem, power)
[docs]def get_doppler_params_output_format(keys): """Set a canonical output precision for frequency evolution parameters. This uses the same format (`%.16g`) as the `write_FstatCandidate_to_fp()` function of the `ComputeFstatistic_v2` executable. This assigns that format to each parameter name in `keys` which matches a hardcoded list of known standard 'Doppler' parameters, and ignores any others. Parameters ------- keys: dict The parameter keys for which to select formats. Returns ------- fmt: dict A dictionary assigning the default format to each parameter key from the hardcoded list of standard 'Doppler' parameters. """ CFSv2_fmt = "%.16g" doppler_keys = [ "F0", "F1", "F2", "Alpha", "Delta", "asini", "period", "ecc", "tp", "argp", ] fmt = {k: CFSv2_fmt for k in keys if k in doppler_keys} return fmt