def build_orbital_collection_set(property_mock_values: List) \ -> List[OrbitalElementSetCollection]: """ :param property_mock_values: :return: objects of mock of the class OrbitalElementSetCollection. """ def _first_get_item(i: int): return property_mock_values[0][i] def _second_get_item(i: int): return property_mock_values[1][i] class_path = get_class_path(OrbitalElementSetCollection) with mock.patch(class_path) as mock1_OrbitalElementSetCollection: with mock.patch(class_path) as mock2_OrbitalElementSetCollection: orbital_elements1 = mock.PropertyMock( return_value=property_mock_values[0]) orbital_elements2 = mock.PropertyMock( return_value=property_mock_values[1]) first_elems = mock1_OrbitalElementSetCollection() second_elems = mock2_OrbitalElementSetCollection() type(first_elems).orbital_elements = orbital_elements1 type(first_elems).__len__ = mock.MagicMock( return_value=len(property_mock_values[0])) type(first_elems).__getitem__ = mock.MagicMock( side_effect=_first_get_item) type(second_elems).orbital_elements = orbital_elements2 type(second_elems).__len__ = mock.MagicMock( return_value=len(property_mock_values[1])) type(second_elems).__getitem__ = mock.MagicMock( side_effect=_second_get_item) return [first_elems, second_elems]
def _build_resonance(phase: float = None): with mock.patch( get_class_path(ThreeBodyResonance)) as mock_ThreeBodyResonance: obj = mock_ThreeBodyResonance() if phase is not None: obj.compute_resonant_phase.return_value = phase type(obj).get_big_bodies = mock.MagicMock( return_value=[_build_planet(4), _build_planet(-2)]) type(obj).small_body = mock.PropertyMock( return_value=_build_asteroid(-1, 2)) return obj
def build_orbital_collection(property_mock_values: List) \ -> List[OrbitalElementSetCollection]: """ :param property_mock_values: :return: objects of mock of the class OrbitalElementSetCollection. """ class_path = get_class_path(OrbitalElementSetCollection) with mock.patch(class_path) as mock1_OrbitalElementSetCollection: with mock.patch(class_path) as mock2_OrbitalElementSetCollection: orbital_elements1 = mock.PropertyMock( return_value=property_mock_values[0]) orbital_elements2 = mock.PropertyMock( return_value=property_mock_values[1]) first_elems = mock1_OrbitalElementSetCollection() second_elems = mock2_OrbitalElementSetCollection() type(first_elems).orbital_elements = orbital_elements1 type(first_elems).__len__ = mock.MagicMock( return_value=len(property_mock_values[0])) if type(property_mock_values[0]) == pd.DataFrame: type(first_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[0].loc[0]) else: type(first_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[0][0]) type(second_elems).orbital_elements = orbital_elements2 type(second_elems).__len__ = mock.MagicMock( return_value=len(property_mock_values[1])) if type(property_mock_values[1]) == pd.DataFrame: type(first_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[1].loc[0]) else: type(second_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[1][0]) return [first_elems, second_elems]
def build_orbital_collection(property_mock_values: List) \ -> List[OrbitalElementSetCollection]: """ :param property_mock_values: :return: objects of mock of the class OrbitalElementSetCollection. """ class_path = get_class_path(OrbitalElementSetCollection) with mock.patch(class_path) as mock1_OrbitalElementSetCollection: with mock.patch(class_path) as mock2_OrbitalElementSetCollection: orbital_elements1 = mock.PropertyMock(return_value=property_mock_values[0]) orbital_elements2 = mock.PropertyMock(return_value=property_mock_values[1]) first_elems = mock1_OrbitalElementSetCollection() second_elems = mock2_OrbitalElementSetCollection() type(first_elems).orbital_elements = orbital_elements1 type(first_elems).__len__ = mock.MagicMock(return_value=len(property_mock_values[0])) type(first_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[0][0]) type(second_elems).orbital_elements = orbital_elements2 type(second_elems).__len__ = mock.MagicMock(return_value=len(property_mock_values[1])) type(second_elems).__getitem__ = mock.MagicMock( return_value=property_mock_values[1][0]) return [first_elems, second_elems]
def build_elem_set(serialize_value): class_path = get_class_path(OrbitalElementSet) with mock.patch(class_path) as mock_OrbitalElementSet: obj = mock_OrbitalElementSet() obj.serialize_as_planet.return_value = serialize_value return obj
def _build_asteroid(long, peri): with mock.patch(get_class_path(Asteroid)) as asteroid_cls: return _build_body(asteroid_cls, long, peri)
def _build_planet(long: int): with mock.patch(get_class_path(Planet)) as planet_cls: return _build_body(planet_cls, long)
conn.execute(TwoBodyResonance.__table__.delete()) conn.execute(ThreeBodyResonance.__table__.delete()) conn.execute(Planet.__table__.delete()) conn.execute(Asteroid.__table__.delete()) request.addfinalizer(tear_down) return resonance, body_count @pytest.mark.parametrize('circulation_breaks, is_apocentric', [ ([], False), (PERCENTAGE_BREAKS, False), ([], True), (PERCENTAGE_BREAKS, True), ([3., 6., 9.], True) ]) @mock.patch(get_class_path(ResonanceOrbitalElementSetFacade)) @pytest.mark.usefixtures('libration_resonance_fixture') def test_classify_from_db(ResonanceOrbitalElementSetFacadeMock, libration_resonance_fixture: Tuple[ResonanceMixin, BodyNumberEnum], circulation_breaks, is_apocentric): orbital_element_set = ResonanceOrbitalElementSetFacadeMock() resonance, body_count = libration_resonance_fixture libration_cls = Libration if body_count == BodyNumberEnum.three else TwoBodyLibration libration = libration_cls(resonance, circulation_breaks, X_STOP, is_apocentric) resonance.libration = libration session.commit() classifier = LibrationClassifier(True, body_count) classifier.set_resonance(resonance) resonant_phases = [
LIBRATION_MIN = CONFIG['resonance']['libration']['min'] X_STOP = CONFIG['gnuplot']['x_stop'] NOT_APOCENTIC_BREAKS = [9.0, 21.0, 30.0, 39.0, 48.0, 60.0, 69.0, 78.0, 90.0, 99.0, 108.0, 117.0, 129.0] PERCENTAGE_BREAKS = [9.0, 21.0, 30.0, 39.0, 48.0, 60.0, 69.0, 78.0, 90.0, 99.0, 108.0, 117.0, 129.0 + float(LIBRATION_MIN)] ASTEROID_NUMBER = 1 BODY_COUNT = 100 @pytest.mark.parametrize('breaks', [None, NOT_APOCENTIC_BREAKS, [10000]]) @mock.patch(get_class_path(ThreeBodyResonance)) def test_circulations(ThreeBodyResonanceMock, breaks: List[float]): resonance = ThreeBodyResonanceMock() libration = Libration(resonance, breaks, BODY_COUNT, False) assert libration.circulation_breaks == breaks @pytest.mark.parametrize('breaks, average_delta', [ ([], None), (NOT_APOCENTIC_BREAKS, None), (PERCENTAGE_BREAKS, 1548.3846153846155) ]) @mock.patch(get_class_path(ThreeBodyResonance)) def test_average_delta(ThreeBodyResonanceMock, breaks: List[float], average_delta: float): resonance = ThreeBodyResonanceMock() libration = Libration(resonance, breaks, BODY_COUNT, False)
NOT_APOCENTIC_BREAKS = [ 9.0, 21.0, 30.0, 39.0, 48.0, 60.0, 69.0, 78.0, 90.0, 99.0, 108.0, 117.0, 129.0 ] PERCENTAGE_BREAKS = [ 9.0, 21.0, 30.0, 39.0, 48.0, 60.0, 69.0, 78.0, 90.0, 99.0, 108.0, 117.0, 129.0 + float(LIBRATION_MIN) ] ASTEROID_NUMBER = 1 BODY_COUNT = 100 @pytest.mark.parametrize('breaks', [None, NOT_APOCENTIC_BREAKS, [10000]]) @mock.patch(get_class_path(ThreeBodyResonance)) def test_circulations(ThreeBodyResonanceMock, breaks: List[float]): resonance = ThreeBodyResonanceMock() libration = Libration(resonance, breaks, BODY_COUNT, False) assert libration.circulation_breaks == breaks @pytest.mark.parametrize('breaks, average_delta', [([], None), (NOT_APOCENTIC_BREAKS, None), (PERCENTAGE_BREAKS, 1548.3846153846155)]) @mock.patch(get_class_path(ThreeBodyResonance)) def test_average_delta(ThreeBodyResonanceMock, breaks: List[float], average_delta: float): resonance = ThreeBodyResonanceMock() libration = Libration(resonance, breaks, BODY_COUNT, False) assert libration.average_delta == average_delta
def _build_resonance(phase: float = None): with mock.patch(get_class_path(ThreeBodyResonance)) as mock_ThreeBodyResonance: obj = mock_ThreeBodyResonance() if phase is not None: obj.compute_resonant_phase.return_value = phase return obj
from entities.body import LONG_COEFF from entities.body import PERI_COEFF from entities.body import Planet from tests.shortcuts import TARGET_TABLES, clear_resonance_finalizer from entities.dbutills import session, engine from shortcuts import cutoff_angle from sqlalchemy.orm import Query from sqlalchemy import and_, Table from sqlalchemy.orm import joinedload, aliased from tests.shortcuts import resonancesfixture, get_class_path from sqlalchemy.exc import IntegrityError BODY_FOREIGNS = ['first_body', 'second_body'] @mock.patch(get_class_path(Planet)) @mock.patch(get_class_path(Planet)) @mock.patch(get_class_path(Asteroid)) @pytest.mark.parametrize( ['jupiter', 'saturn', 'asteroid', 'cutoffed_resonant_phase', 'jupiter_coeffs', 'saturn_coeffs', 'asteroid_coeffs'], [ ( {LONG: 2.856034797, PERI: math.radians(70.12327)}, {LONG: 3.339293952, PERI: math.radians(124.8056)}, {LONG: 6.551616946, PERI: math.radians(103.9978)}, -3.137910531830559, {LONG: 3, PERI: 0}, {LONG: -1, PERI: 0}, {LONG: -1, PERI: -1} ),
from resonances.entities.body import Asteroid from resonances.entities.body import LONG from resonances.entities.body import LONG_COEFF from resonances.entities.body import PERI from resonances.entities.body import PERI_COEFF from resonances.entities.body import Planet from resonances.shortcuts import cutoff_angle from tests.shortcuts import TARGET_TABLES, clear_resonance_finalizer from tests.shortcuts import get_class_path BODY_FOREIGNS = ['first_body', 'second_body'] @mock.patch(get_class_path(Planet)) @mock.patch(get_class_path(Planet)) @mock.patch(get_class_path(Asteroid)) @pytest.mark.parametrize( ['jupiter', 'saturn', 'asteroid', 'cutoffed_resonant_phase', 'jupiter_coeffs', 'saturn_coeffs', 'asteroid_coeffs'], [ ( {LONG: 2.856034797, PERI: math.radians(70.12327)}, {LONG: 3.339293952, PERI: math.radians(124.8056)}, {LONG: 6.551616946, PERI: math.radians(103.9978)}, -3.137910531830559, {LONG: 3, PERI: 0}, {LONG: -1, PERI: 0}, {LONG: -1, PERI: -1} ),