Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

### Changed
- Require lunarsky>1.0 to drop spiceypy requirement

### Added
- Added more options for controlling labels on beam plots.
- Support for MWA Average Embedded Element beams in UVBeam.
Expand All @@ -13,6 +16,9 @@ were added or concatenated. The fix for was a major refactoring that should prev
similar bugs in the future by using UVParameter forms to detect which attributes
to update on UVData objects.

### Removed
- Spiceypy error catching in tests

## [3.2.6] - 2025-03-13

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ Optional:
* astropy-healpix >= 1.0.2 (for working with beams in HEALPix formats)
* astroquery >= 0.4.4 (for enabling phasing to ephemeris objects using JPL-Horizons)
* hdf5plugin >= 3.3.1 (for enabling bitshuffle and other hdf5 compression filters in uvh5 files)
* lunarsky >=0.2.5 (for working with simulated datasets for lunar telescopes)
* lunarsky >=1.0 (for working with simulated datasets for lunar telescopes)
* matplotlib>=3.7 (for making plots)
* novas and novas_de405 (for using the NOVAS library for astrometry)
* pooch >= 1.8 (for downloading test data for tutorials)
Expand Down
2 changes: 1 addition & 1 deletion environment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ dependencies:
- sphinx
- sybil>=8.0
- pip:
- lunarsky>=0.2.5
- lunarsky>=1.0
- novas
- novas_de405
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ astroquery = ["astroquery>=0.4.4"]
casa = ["python-casacore>=3.5.2"]
hdf5_compression = ["hdf5plugin>=3.3.1"]
healpix = ["astropy_healpix>=1.0.2"]
lunar = ["lunarsky>=0.2.5"]
lunar = ["lunarsky>=1.0"]
novas = ["novas", "novas_de405"]
plotting = ["matplotlib>=3.7"]
all = ["pyuvdata[astroquery,casa,hdf5_compression,healpix,lunar,novas,plotting]"]
Expand Down
236 changes: 95 additions & 141 deletions tests/utils/test_phasing.py
Original file line number Diff line number Diff line change
Expand Up @@ -1065,19 +1065,14 @@ def test_roundtrip_icrs(astrometry_args, telescope_frame, selenoid, in_lib, out_
return

if telescope_frame == "mcmf":
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

try:
check_ra, check_dec = phs_utils.transform_app_to_icrs(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
astrometry_library=out_lib,
**kwargs,
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.transform_app_to_icrs(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
astrometry_library=out_lib,
**kwargs,
)
else:
check_ra, check_dec = phs_utils.transform_app_to_icrs(
time_array=astrometry_args["time_array"],
Expand Down Expand Up @@ -1336,32 +1331,27 @@ def test_calc_app_sidereal(astrometry_args, frame, telescope_frame, selenoid):
if telescope_frame == "itrs":
telescope_loc = astrometry_args["telescope_loc"]
else:
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

telescope_loc = astrometry_args["moon_telescope_loc"]

try:
check_ra, check_dec = phs_utils.calc_app_coords(
lon_coord=(
astrometry_args["fk5_ra"]
if (frame == "fk5")
else astrometry_args["icrs_ra"]
),
lat_coord=(
astrometry_args["fk5_dec"]
if (frame == "fk5")
else astrometry_args["icrs_dec"]
),
coord_type="sidereal",
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
time_array=astrometry_args["time_array"],
coord_frame=frame,
coord_epoch=astrometry_args["epoch"],
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.calc_app_coords(
lon_coord=(
astrometry_args["fk5_ra"]
if (frame == "fk5")
else astrometry_args["icrs_ra"]
),
lat_coord=(
astrometry_args["fk5_dec"]
if (frame == "fk5")
else astrometry_args["icrs_dec"]
),
coord_type="sidereal",
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
time_array=astrometry_args["time_array"],
coord_frame=frame,
coord_epoch=astrometry_args["epoch"],
)

check_coord = SkyCoord(check_ra, check_dec, unit="rad")

Expand All @@ -1385,12 +1375,8 @@ def test_calc_app_ephem(astrometry_args, frame, telescope_frame, selenoid):
# paths through the ephem.
if telescope_frame == "itrs":
telescope_loc = astrometry_args["telescope_loc"]
err_type = None
else:
telescope_loc = astrometry_args["moon_telescope_loc"]
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

err_type = SpiceUNKNOWNFRAME

if frame == "fk5":
ephem_ra = astrometry_args["fk5_ra"]
Expand All @@ -1401,21 +1387,18 @@ def test_calc_app_ephem(astrometry_args, frame, telescope_frame, selenoid):

ephem_times = np.array([astrometry_args["time_array"][0]])

try:
check_ra, check_dec = phs_utils.calc_app_coords(
lon_coord=ephem_ra,
lat_coord=ephem_dec,
coord_times=ephem_times,
coord_type="ephem",
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
time_array=astrometry_args["time_array"],
coord_epoch=astrometry_args["epoch"],
coord_frame=frame,
)
except err_type as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.calc_app_coords(
lon_coord=ephem_ra,
lat_coord=ephem_dec,
coord_times=ephem_times,
coord_type="ephem",
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
time_array=astrometry_args["time_array"],
coord_epoch=astrometry_args["epoch"],
coord_frame=frame,
)

check_coord = SkyCoord(check_ra, check_dec, unit="rad")

Expand Down Expand Up @@ -1513,21 +1496,16 @@ def test_calc_app_fk5_roundtrip(astrometry_args, telescope_frame, selenoid):
)

if telescope_frame == "mcmf":
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

try:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk5",
telescope_frame=telescope_frame,
ellipsoid=selenoid,
coord_epoch=2000.0,
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk5",
telescope_frame=telescope_frame,
ellipsoid=selenoid,
coord_epoch=2000.0,
)
else:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
Expand Down Expand Up @@ -1558,20 +1536,15 @@ def test_calc_app_fk5_roundtrip(astrometry_args, telescope_frame, selenoid):
)

if telescope_frame == "mcmf":
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

try:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk5",
telescope_frame=telescope_frame,
coord_epoch=2000.0,
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk5",
telescope_frame=telescope_frame,
coord_epoch=2000.0,
)
else:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
Expand Down Expand Up @@ -1607,21 +1580,16 @@ def test_calc_app_fk4_roundtrip(astrometry_args, telescope_frame, selenoid):
)

if telescope_frame == "mcmf":
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

try:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk4",
telescope_frame=telescope_frame,
ellipsoid=selenoid,
coord_epoch=1950.0,
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.calc_sidereal_coords(
time_array=astrometry_args["time_array"],
app_ra=app_ra,
app_dec=app_dec,
telescope_loc=telescope_loc,
coord_frame="fk4",
telescope_frame=telescope_frame,
ellipsoid=selenoid,
coord_epoch=1950.0,
)

else:
check_ra, check_dec = phs_utils.calc_sidereal_coords(
Expand Down Expand Up @@ -1785,25 +1753,18 @@ def test_transform_icrs_to_app_time_obj(astrometry_args, telescope_frame, seleno
"""
if telescope_frame == "itrs":
telescope_loc = astrometry_args["telescope_loc"]
err_type = None
else:
telescope_loc = astrometry_args["moon_telescope_loc"]
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

err_type = SpiceUNKNOWNFRAME

try:
check_ra, check_dec = phs_utils.transform_icrs_to_app(
time_array=Time(astrometry_args["time_array"], format="jd"),
ra=astrometry_args["icrs_ra"],
dec=astrometry_args["icrs_dec"],
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
epoch=Time(astrometry_args["epoch"], format="jyear"),
)
except err_type as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))
check_ra, check_dec = phs_utils.transform_icrs_to_app(
time_array=Time(astrometry_args["time_array"], format="jd"),
ra=astrometry_args["icrs_ra"],
dec=astrometry_args["icrs_dec"],
telescope_loc=telescope_loc,
telescope_frame=telescope_frame,
ellipsoid=selenoid,
epoch=Time(astrometry_args["epoch"], format="jyear"),
)

if telescope_frame == "itrs":
app_ra = astrometry_args["app_ra"]
Expand Down Expand Up @@ -2068,9 +2029,25 @@ def test_uvw_track_generator(flip_u, use_uvw, use_earthloc):
def test_uvw_track_generator_moon(selenoid):
pytest.importorskip("lunarsky")
# Note this isn't a particularly deep test, but it at least exercises the code.
from spiceypy.utils.exceptions import SpiceUNKNOWNFRAME

try:
gen_results = utils.uvw_track_generator(
lon_coord=0.0,
lat_coord=0.0,
coord_frame="icrs",
telescope_loc=(0, 0, 0),
time_array=2456789.0,
antenna_positions=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
telescope_frame="mcmf",
ellipsoid=selenoid,
)

# Check that the total lengths all match 1
np.testing.assert_allclose(
(gen_results["uvw"] ** 2.0).sum(1), 2.0, rtol=0, atol=1e-3
)

if selenoid == "SPHERE":
# check defaults
gen_results = utils.uvw_track_generator(
lon_coord=0.0,
lat_coord=0.0,
Expand All @@ -2079,30 +2056,7 @@ def test_uvw_track_generator_moon(selenoid):
time_array=2456789.0,
antenna_positions=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
telescope_frame="mcmf",
ellipsoid=selenoid,
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))

# Check that the total lengths all match 1
np.testing.assert_allclose(
(gen_results["uvw"] ** 2.0).sum(1), 2.0, rtol=0, atol=1e-3
)

if selenoid == "SPHERE":
# check defaults
try:
gen_results = utils.uvw_track_generator(
lon_coord=0.0,
lat_coord=0.0,
coord_frame="icrs",
telescope_loc=(0, 0, 0),
time_array=2456789.0,
antenna_positions=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]),
telescope_frame="mcmf",
)
except SpiceUNKNOWNFRAME as err:
pytest.skip("SpiceUNKNOWNFRAME error: " + str(err))

# Check that the total lengths all match 1
np.testing.assert_allclose(
Expand Down
Loading
Loading