コード例 #1
0
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]
コード例 #2
0
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
コード例 #3
0
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]
コード例 #4
0
ファイル: shortcuts.py プロジェクト: 4xxi/resonances
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]
コード例 #5
0
ファイル: shortcuts.py プロジェクト: 4xxi/resonances
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
コード例 #6
0
def _build_asteroid(long, peri):
    with mock.patch(get_class_path(Asteroid)) as asteroid_cls:
        return _build_body(asteroid_cls, long, peri)
コード例 #7
0
def _build_planet(long: int):
    with mock.patch(get_class_path(Planet)) as planet_cls:
        return _build_body(planet_cls, long)
コード例 #8
0
ファイル: classifiertest.py プロジェクト: 4xxi/resonances
        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 = [
コード例 #9
0
ファイル: librationtest.py プロジェクト: 4xxi/resonances
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)
コード例 #10
0
ファイル: librationtest.py プロジェクト: 4xxi/resonances
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
コード例 #11
0
ファイル: facades_test.py プロジェクト: 4xxi/resonances
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
コード例 #12
0
ファイル: resonance_test.py プロジェクト: 4xxi/resonances
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}
        ),
コード例 #13
0
ファイル: resonance_test.py プロジェクト: 4xxi/resonances
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}
        ),