def test_coord_type_from_ctype(): wcs = WCS(naxis=2) wcs.wcs.ctype = ['GLON-TAN', 'GLAT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.deg, u.deg] assert coord_meta['wrap'] == [None, None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['HPLN-TAN', 'HPLT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.arcsec, u.arcsec] assert coord_meta['wrap'] == [180., None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['RA---TAN', 'DEC--TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.hourangle, u.deg] assert coord_meta['wrap'] == [None, None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['spam', 'spam'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['scalar', 'scalar'] assert coord_meta['format_unit'] == [u.one, u.one] assert coord_meta['wrap'] == [None, None]
def test_sliced_ND_input(sub_wcs, wcs_slice): slices_wcsaxes = [0, 'x', 'y'] with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) _, coord_meta = transform_coord_meta_from_wcs(sub_wcs, RectangularFrame, slices=slices_wcsaxes) assert all(len(x) == 3 for x in coord_meta.values()) coord_meta['name'] = [ 'time', 'custom:pos.helioprojective.lat', 'custom:pos.helioprojective.lon' ] coord_meta['type'] = ['scalar', 'latitude', 'longitude'] coord_meta['wrap'] = [None, None, 180.0] coord_meta['unit'] = [u.Unit("min"), u.Unit("deg"), u.Unit("deg")] coord_meta['visible'] = [False, True, True] coord_meta['format_unit'] = [ u.Unit("min"), u.Unit("arcsec"), u.Unit("arcsec") ] coord_meta['default_axislabel_position'] = ['', 'b', 't'] coord_meta['default_ticklabel_position'] = ['', 'b', 't'] coord_meta['default_ticks_position'] = ['', 'btlr', 'btlr'] with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) # Validate the axes initialize correctly ax = plt.subplot(projection=sub_wcs, slices=slices_wcsaxes)
def test_coord_meta_wcsapi(): wcs = LowLevelWCS5D() wcs.pixel_dim = 5 _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame, slices=[0, 0, 'x', 'y', 0]) assert coord_meta['name'] == [('em.freq', 'Frequency'), 'time', ('pos.eq.ra', 'RA'), ('pos.eq.dec', 'DEC'), 'phys.polarization.stokes'] assert coord_meta['type'] == [ 'scalar', 'scalar', 'longitude', 'latitude', 'scalar' ] assert coord_meta['wrap'] == [None, None, None, None, None] assert coord_meta['unit'] == [ u.Unit("Hz"), u.Unit("d"), u.Unit("deg"), u.Unit("deg"), u.one ] assert coord_meta['visible'] == [True, True, True, True, True] assert coord_meta['format_unit'] == [ u.Unit("Hz"), u.Unit("d"), u.Unit("hourangle"), u.Unit("deg"), u.one ] assert coord_meta['default_axislabel_position'] == ['b', 'l', 't', 'r', ''] assert coord_meta['default_ticklabel_position'] == ['b', 'l', 't', 'r', ''] assert coord_meta['default_ticks_position'] == ['b', 'l', 't', 'r', ''] assert coord_meta['default_axis_label'] == [ 'Frequency', 'time', 'RA', 'DEC', 'phys.polarization.stokes' ]
def test_sliced_ND_input(wcs_4d, sub_wcs, wcs_slice, plt_close): slices_wcsaxes = [0, 'x', 'y'] for sub_wcs in (sub_wcs, SlicedLowLevelWCS(wcs_4d, wcs_slice)): with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) _, coord_meta = transform_coord_meta_from_wcs(sub_wcs, RectangularFrame, slices=slices_wcsaxes) assert all(len(x) == 3 for x in coord_meta.values()) assert coord_meta['name'] == ['time', ('custom:pos.helioprojective.lat', 'hplt-tan', 'hplt'), ('custom:pos.helioprojective.lon', 'hpln-tan', 'hpln')] assert coord_meta['type'] == ['scalar', 'latitude', 'longitude'] assert coord_meta['wrap'] == [None, None, 180.0] assert coord_meta['unit'] == [u.Unit("min"), u.Unit("deg"), u.Unit("deg")] assert coord_meta['visible'] == [False, True, True] assert coord_meta['format_unit'] == [u.Unit("min"), u.Unit("arcsec"), u.Unit("arcsec")] assert coord_meta['default_axislabel_position'] == ['', 'b', 'l'] assert coord_meta['default_ticklabel_position'] == ['', 'b', 'l'] assert coord_meta['default_ticks_position'] == ['', 'bltr', 'bltr'] # Validate the axes initialize correctly plt.clf() plt.subplot(projection=sub_wcs, slices=slices_wcsaxes)
def test_coord_meta_4d(wcs_4d): _, coord_meta = transform_coord_meta_from_wcs(wcs_4d, RectangularFrame, slices=(0, 0, 'x', 'y')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] assert axislabel_position == ['', '', 'b', 'l'] assert ticklabel_position == ['', '', 'b', 'l'] assert ticks_position == ['', '', 'bltr', 'bltr']
def test_coord_meta_4d_line_plot(wcs_4d): _, coord_meta = transform_coord_meta_from_wcs(wcs_4d, RectangularFrame1D, slices=(0, 0, 0, 'x')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] # These axes are swapped due to the pixel derivatives assert axislabel_position == ['', '', 't', 'b'] assert ticklabel_position == ['', '', 't', 'b'] assert ticks_position == ['', '', 't', 'b']
def test_coord_type_1d_1d_wcs(): wcs = WCS(naxis=1) wcs.wcs.ctype = ['WAVE'] wcs.wcs.crpix = [256.0] wcs.wcs.cdelt = [-0.05] wcs.wcs.crval = [50.0] wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame1D) assert coord_meta['type'] == ['scalar'] assert coord_meta['format_unit'] == [u.m] assert coord_meta['wrap'] == [None]
def test_coord_meta_4d(wcs_4d): with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) _, coord_meta = transform_coord_meta_from_wcs(wcs_4d, RectangularFrame, slices=(0, 0, 'x', 'y')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] assert axislabel_position == ['', '', 'b', 'l'] assert ticklabel_position == ['', '', 'b', 'l'] assert ticks_position == ['', '', 'bltr', 'bltr']
def test_coord_type_1d_2d_wcs_correlated(): wcs = WCS(naxis=2) wcs.wcs.ctype = ['GLON-TAN', 'GLAT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame1D, slices=('x', 0)) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.deg, u.deg] assert coord_meta['wrap'] == [None, None] assert coord_meta['visible'] == [True, True]
def test_coord_meta_4d_line_plot(wcs_4d): with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) _, coord_meta = transform_coord_meta_from_wcs(wcs_4d, RectangularFrame1D, slices=(0, 0, 0, 'x')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] # These axes are swapped due to the pixel derivatives assert axislabel_position == ['', '', 't', 'b'] assert ticklabel_position == ['', '', 't', 'b'] assert ticks_position == ['', '', 't', 'b']
def test_coord_type_1d_2d_wcs_uncorrelated(): wcs = WCS(naxis=2) wcs.wcs.ctype = ['WAVE', 'UTC'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.cunit = ['nm', 's'] wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame1D, slices=('x', 0)) assert coord_meta['type'] == ['scalar', 'scalar'] assert coord_meta['format_unit'] == [u.m, u.s] assert coord_meta['wrap'] == [None, None] assert coord_meta['visible'] == [True, False]
def test_coord_type_1d_2d_wcs_uncorrelated(): wcs = WCS(naxis=2) wcs.wcs.ctype = ['WAVE', 'TIME'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.cunit = ['nm', 's'] wcs.wcs.set() with warnings.catch_warnings(): warnings.filterwarnings('ignore', category=FutureWarning) _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame1D, slices=('x', 0)) assert coord_meta['type'] == ['scalar', 'scalar'] assert coord_meta['format_unit'] == [u.m, u.s] assert coord_meta['wrap'] == [None, None] assert coord_meta['visible'] == [True, False]
def test_coord_type_from_ctype(cube_wcs): _, coord_meta = transform_coord_meta_from_wcs(cube_wcs, RectangularFrame, slices=(50, 'y', 'x')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] # These axes are swapped due to the pixel derivatives assert axislabel_position == ['l', 'r', 'b'] assert ticklabel_position == ['l', 'r', 'b'] assert ticks_position == ['l', 'r', 'b'] wcs = WCS(naxis=2) wcs.wcs.ctype = ['GLON-TAN', 'GLAT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.deg, u.deg] assert coord_meta['wrap'] == [None, None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['HPLN-TAN', 'HPLT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.arcsec, u.arcsec] assert coord_meta['wrap'] == [180., None] _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame, slices=('y', 'x')) axislabel_position = coord_meta['default_axislabel_position'] ticklabel_position = coord_meta['default_ticklabel_position'] ticks_position = coord_meta['default_ticks_position'] # These axes should be swapped because of slices assert axislabel_position == ['l', 'b'] assert ticklabel_position == ['l', 'b'] assert ticks_position == ['bltr', 'bltr'] wcs = WCS(naxis=2) wcs.wcs.ctype = ['HGLN-TAN', 'HGLT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.arcsec, u.arcsec] assert coord_meta['wrap'] == [180., None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['CRLN-TAN', 'CRLT-TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.arcsec, u.arcsec] assert coord_meta['wrap'] == [360., None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['RA---TAN', 'DEC--TAN'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['longitude', 'latitude'] assert coord_meta['format_unit'] == [u.hourangle, u.deg] assert coord_meta['wrap'] == [None, None] wcs = WCS(naxis=2) wcs.wcs.ctype = ['spam', 'spam'] wcs.wcs.crpix = [256.0] * 2 wcs.wcs.cdelt = [-0.05] * 2 wcs.wcs.crval = [50.0] * 2 wcs.wcs.set() _, coord_meta = transform_coord_meta_from_wcs(wcs, RectangularFrame) assert coord_meta['type'] == ['scalar', 'scalar'] assert coord_meta['format_unit'] == [u.one, u.one] assert coord_meta['wrap'] == [None, None]