From a02468b61a9a7fd297310adf8af80ae0899bf4a9 Mon Sep 17 00:00:00 2001 From: Steven Rieder Date: Tue, 3 Sep 2024 16:14:38 +0200 Subject: [PATCH 1/2] Allow named units to have a LaTeX representation (WIP) --- src/amuse/units/core.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/amuse/units/core.py b/src/amuse/units/core.py index 6707ab5aa1..6641cf1b94 100644 --- a/src/amuse/units/core.py +++ b/src/amuse/units/core.py @@ -64,6 +64,8 @@ class unit(object): Units can also be named, by creating a named unit. """ + + _latex_representation = None __array_priority__ = 100 def __mul__(self, other): @@ -142,6 +144,12 @@ def __ne__(self, other): def __hash__(self): return self._hash + def latex(self): + if self._latex_representation is not None: + return self._latex_representation + else: + return self.symbol + @late def _hash(self): return hash(id(self)) @@ -853,15 +861,16 @@ class named_unit(unit): >>> (20.0 | (60.0 * si.s)).as_quantity_in(minute) quantity<20.0 min> """ - def __init__(self, name, symbol, unit): + + def __init__(self, name, symbol, unit, latex=None): self.name = name self.symbol = symbol self.local_unit = unit + self._latex_representation = latex def __str__(self): return self.symbol - def reference_string(self): return self.to_simple_form().reference_string() From 046d4b324b411109085b2d233949e4be963d89be Mon Sep 17 00:00:00 2001 From: Steven Rieder Date: Wed, 4 Sep 2024 14:37:16 +0200 Subject: [PATCH 2/2] Add some LaTeX representations and a test for this --- src/amuse/test/suite/core_tests/test_console.py | 4 ++++ src/amuse/units/units.py | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/amuse/test/suite/core_tests/test_console.py b/src/amuse/test/suite/core_tests/test_console.py index 3e44781922..c29b4a6eeb 100644 --- a/src/amuse/test/suite/core_tests/test_console.py +++ b/src/amuse/test/suite/core_tests/test_console.py @@ -242,3 +242,7 @@ def test10(self): "], ["+tmp+", "+tmp+"]] au") self.assertEqual(str(pi), "3.14 none") set_printing_strategy("default") + + def test_latex(self): + self.assertEqual(str(units.MSun), "MSun") + self.assertEqual(str(units.MSun.latex()), r"M_{\odot}") diff --git a/src/amuse/units/units.py b/src/amuse/units/units.py index eeab5a068f..92f2fb8c3d 100644 --- a/src/amuse/units/units.py +++ b/src/amuse/units/units.py @@ -50,9 +50,9 @@ Mpc = named("mega parsec", "Mpc", 10**6 * parsec) Gpc = named("giga parsec", "Gpc", 10**9 * parsec) lightyear = named("light year", "ly", 9460730472580.8 * km) -LSun = named("solar luminosity", "LSun", 3.839e26 * W) -MSun = named("solar mass", "MSun", 1.98892e30 * kg) -RSun = named("solar radius", "RSun", 6.955e8 * m) +LSun = named("solar luminosity", "LSun", 3.839e26 * W, latex=r"L_{\odot}") +MSun = named("solar mass", "MSun", 1.98892e30 * kg, latex=r"M_{\odot}") +RSun = named("solar radius", "RSun", 6.955e8 * m, latex=r"R_{\odot}") MJupiter = named("jupiter mass", "MJupiter", 1.8987e27 * kg) RJupiter = named("jupiter radius", "RJupiter", 71492.0 * km) MEarth = named("earth mass", "MEarth", 5.9722e24 * kg)