From 37233b05bd02b3730933b7d50c17780f55aeb550 Mon Sep 17 00:00:00 2001 From: "Albert Y. Shih" Date: Fri, 8 Sep 2023 09:27:58 -0400 Subject: [PATCH] Use obstime from observer if obstime not otherwise provided --- changelog/7186.feature.rst | 1 + sunpy/coordinates/frames.py | 4 ++++ sunpy/coordinates/tests/test_frames.py | 11 +++++++++++ 3 files changed, 16 insertions(+) create mode 100644 changelog/7186.feature.rst diff --git a/changelog/7186.feature.rst b/changelog/7186.feature.rst new file mode 100644 index 00000000000..dfef101eaf3 --- /dev/null +++ b/changelog/7186.feature.rst @@ -0,0 +1 @@ +When creating a coordinate or coordinate frame without specifying ``obstime``, the ``obstime`` value from the ``observer`` frame attribute will be used if present. diff --git a/sunpy/coordinates/frames.py b/sunpy/coordinates/frames.py index 9a3acecf0b8..4606188946f 100644 --- a/sunpy/coordinates/frames.py +++ b/sunpy/coordinates/frames.py @@ -133,6 +133,10 @@ def __init__(self, *args, **kwargs): if not kwargs.pop('wrap_longitude', True): self._wrap_angle = None + # If obstime is not provided but observer has an obstime, use that as the obstime + if 'obstime' not in kwargs and 'observer' in kwargs and getattr(kwargs['observer'], 'obstime', None) is not None: + kwargs['obstime'] = kwargs['observer'].obstime + super().__init__(*args, **kwargs) # If obstime is specified, treat the default observer (None) as explicitly set diff --git a/sunpy/coordinates/tests/test_frames.py b/sunpy/coordinates/tests/test_frames.py index e65a96fa8b6..b8db7236356 100644 --- a/sunpy/coordinates/tests/test_frames.py +++ b/sunpy/coordinates/tests/test_frames.py @@ -231,6 +231,17 @@ def test_hpc_low_precision_float_warning(): hpc.make_3d() +def test_hpc_obstime_from_observer(): + # Test that observer.obstime is used for obstime if obstime is not provided + observer = HeliographicStonyhurst(obstime='2023-09-08') + hpc = Helioprojective(observer=observer) + assert hpc.obstime == observer.obstime + + # Test that obstime is None if observer does not have an obstime + hpc = Helioprojective(observer='earth') + assert hpc.obstime is None + + # ============================================================================== # ## Heliographic Tests # ==============================================================================