Source code for tests.sensitivity_calculator.test_subarray

"""
Unit tests for the sensitivity_calculator.subarray module.
"""
from pathlib import Path
import numpy as np
import pytest
from sensitivity_calculator.subarray import SubarrayStorage, SubarraySchema, Subarray
from sensitivity_calculator.utilities import SKA_NDISHES_MAX, MEERKAT_NDISHES_MAX


BASE_DIR = Path(__file__).resolve().parents[2]
DEFAULT_STORAGE_PATH = Path(
    BASE_DIR, "src", "sensitivity_calculator", "static", "subarrays"
)
TEST_STORAGE_PATH = Path(BASE_DIR, "tests", "sensitivity_calculator", "subarrays")
subarray_full_data = {
    "name": "full",
    "MeerKAT": np.arange(MEERKAT_NDISHES_MAX, dtype=int).tolist(),
    "SKA": np.arange(SKA_NDISHES_MAX, dtype=int).tolist(),
}
subarray_extended_data = {
    "name": "extended",
    "MeerKAT": [],
    "SKA": np.arange(SKA_NDISHES_MAX, dtype=int).tolist(),
}
subarray_core_data = {
    "name": "core",
    "MeerKAT": np.arange(MEERKAT_NDISHES_MAX, dtype=int).tolist(),
    "SKA": [],
}
subarray_full = Subarray(**subarray_full_data)
subarray_extended = Subarray(**subarray_extended_data)
subarray_core = Subarray(**subarray_core_data)


[docs]def test_local_storage_listing(): """Verify storage lists subarray files properly """ storage = SubarrayStorage(TEST_STORAGE_PATH) assert storage.list() == ["core", "extended", "full"]
[docs]def test_local_storage_load_data(): """Verify that the storage instance load subarray files and transforms them to Subarray objects properly """ storage = SubarrayStorage(TEST_STORAGE_PATH) assert storage.load("core") == subarray_core assert storage.load("extended") == subarray_extended assert storage.load("full") == subarray_full
[docs]def test_local_storage_load_non_existing_data(): """Verify that an exception is raised when the storage file is not found """ storage = SubarrayStorage(TEST_STORAGE_PATH) with pytest.raises(ValueError): storage.load("aaa")
[docs]def test_subarray_class_properties(): """Check that the two convenience properties return the correct number of antennas""" assert subarray_full.n_SKA == SKA_NDISHES_MAX assert subarray_full.n_MeerKAT == MEERKAT_NDISHES_MAX assert subarray_core.n_MeerKAT == MEERKAT_NDISHES_MAX assert subarray_extended.n_SKA == SKA_NDISHES_MAX
[docs]def test_subarray_marshmallow_deserialization(): """Test that the marshmallow schema works: deserialization""" subarray_schema = SubarraySchema() assert subarray_full == subarray_schema.load(subarray_full_data) assert subarray_core == subarray_schema.load(subarray_core_data) assert subarray_extended == subarray_schema.load(subarray_extended_data)
[docs]def test_subarray_marshmallow_serialization(): """Test that the marshmallow schema works: serialization""" subarray_schema = SubarraySchema() assert subarray_full_data == subarray_schema.dump(subarray_full) assert subarray_core_data == subarray_schema.dump(subarray_core) assert subarray_extended_data == subarray_schema.dump(subarray_extended)