# coding: utf-8 import pymses.utils.constants as cst def parse_exp_unit(u): splitted = u.split("^") name_u = cst.Unit.from_name(splitted[0]).latex exp = "" if len(splitted) > 1: exp = "$^{" + str(splitted[1]) + "}$" return name_u + exp def convert_exp(number): splitted = "{:.4g}".format(number).split("e") if len(splitted) == 1: return "${}$".format(splitted[0]) else: coeff = float(splitted[0]) exp = int(splitted[1]) exp_str = "10^{" + str(exp) + "}" if coeff == 1.0: return "$" + exp_str + "$" else: return "$" + str(coeff) + "\\times" + exp_str + "$" def unit_str(unit, base=None, prefix=""): if unit == cst.none: return "" elif not base is None: coeff = unit.express(base) return unit_str(base, prefix=convert_exp(coeff) + " ") elif len(unit.latex) > 0: if ("." in unit.latex or "^" in unit.latex) and not "$" in unit.latex: base_str = ".".join(map(parse_exp_unit, unit.name.split("."))) return r" [{}{}]".format(prefix, base_str) else: return r" [{}{}]".format(prefix, unit.latex) elif len(unit.name) > 0: try: base_str = ".".join(map(parse_exp_unit, unit.name.split("."))) u_str = r" [{}{}]".format(prefix, base_str) except: u_str = r" [{}{}]".format(prefix, unit.name) return u_str else: base_str = ".".join( map(parse_exp_unit, unit._decompose_base_units().split(".")) ) return r" [{}{} {}]".format(prefix, unit.coeff, base_str) cst.coldens = cst.create_unit( "Msun.pc^-2", base_unit=cst.Msun / cst.pc ** 2, descr="Column density" ) cst.km_s = cst.create_unit("km.s^-1", base_unit=cst.km / cst.s, descr="Speed") cst.Msun_pc3 = cst.create_unit( "Msun.pc^-3", base_unit=cst.Msun / cst.pc ** 3, descr="Density" ) cst.kg_m3 = cst.create_unit("kg.m^-3", base_unit=cst.kg / cst.m ** 3, descr="Density") cst.ssfr = cst.create_unit( "Msun.yr^-1.pc^-2", base_unit=cst.Msun / cst.year / cst.pc ** 2, descr="Surfacic SFR", latex="M$_{\odot}$.yr$^{-1}$.p$c^{-2}$", )