Пример #1
0
 def setup_class(self):
     location = ((35, 58, 10), (-84, 19, 0))
     self.obs_datetime = (2013, 10, 18, 22, 0, 0)
     self.timezone = 'America/New_York'
     self.mi = MoonInfo(location[0], location[1])
     self.date_list = [(2013, 10, 5, 0, 0, 0), (2013, 10, 8, 6, 0, 0),
                       (2013, 10, 11, 22, 0, 0), (2013, 10, 12, 3, 30, 0),
                       (2013, 10, 19, 1, 30, 0), (2013, 10, 24, 15, 0, 0),
                       (2013, 10, 26, 23, 40, 0), (2013, 11, 2, 23, 0, 0)]
Пример #2
0
 def setup_class(self):
     location = ((35, 58, 10), (-84, 19, 0))
     self.obs_datetime = (2013, 10, 18, 22, 0, 0)
     self.timezone = 'America/New_York'
     self.mi = MoonInfo(location[0], location[1])
     self.date_list = [(2013, 10, 5, 0, 0, 0),
                       (2013, 10, 8, 6, 0, 0),
                       (2013, 10, 11, 22, 0, 0),
                       (2013, 10, 12, 3, 30, 0),
                       (2013, 10, 19, 1, 30, 0),
                       (2013, 10, 24, 15, 0, 0),
                       (2013, 10, 26, 23, 40, 0),
                       (2013, 11, 2, 23, 0, 0)]
    def test_visibility(self):
        location = ((35, 58, 10), (-84, 19, 0))
        mi = MoonInfo(location[0], location[1])
        mi.update((2013, 10, 12, 18, 0, 0))

        # Need to create new containers.
        lc_lfc = LunarFeatureContainer("Lunar")
        lc2_lfc = LunarFeatureContainer("LunarII")

        lc_lfc.load(mi, limit=10)
        assert len(lc_lfc) == 6
        assert len(lc_lfc.club_type) == 2
        assert len(lc_lfc.feature_type) == 4
        ilfc = iter(lc_lfc)
        feature = next(ilfc)
        assert feature.name == "Vallis Alpes"

        lc2_lfc.load(mi, limit=10)
        assert len(lc2_lfc) == 2
        assert len(lc2_lfc.club_type) == 2
        assert len(lc2_lfc.feature_type) == 2
        ilfc2 = iter(lc2_lfc)
        feature2 = next(ilfc2)
        assert feature2.name == "Vallis Alpes"
Пример #4
0
    def test_visibility(self):
        location = ((35, 58, 10), (-84, 19, 0))
        mi = MoonInfo(location[0], location[1])
        mi.update((2013, 10, 12, 18, 0, 0))

        # Need to create new containers.
        lc_lfc = LunarFeatureContainer("Lunar")
        lc2_lfc = LunarFeatureContainer("LunarII")

        lc_lfc.load(mi, limit=10)
        assert len(lc_lfc) == 6
        assert len(lc_lfc.club_type) == 2
        assert len(lc_lfc.feature_type) == 4
        ilfc = iter(lc_lfc)
        feature = next(ilfc)
        assert feature.name == "Vallis Alpes"

        lc2_lfc.load(mi, limit=10)
        assert len(lc2_lfc) == 2
        assert len(lc2_lfc.club_type) == 2
        assert len(lc2_lfc.feature_type) == 2
        ilfc2 = iter(lc2_lfc)
        feature2 = next(ilfc2)
        assert feature2.name == "Vallis Alpes"
Пример #5
0
    def _getLunarTime(self, asOf: datetime, doFinalCorrections: bool) -> Dict:
        utcAsOf = utc.normalize(asOf)
        utcAsOfTuple = (utcAsOf.year, utcAsOf.month, utcAsOf.day, utcAsOf.hour,
                        utcAsOf.minute, utcAsOf.second)

        moon_info = MoonInfo(self._latitude_dms, self._longitude_dms)
        moon_info.update(utcAsOfTuple)
        moon_times = moon_info.rise_set_times(self._timezone_str)
        return self._getLunarTimeFromMoonTimes(moon_times, asOf,
                                               moon_info.fractional_phase(),
                                               doFinalCorrections)
Пример #6
0
class TestMoonInfo(object):
    def setup_class(self):
        location = ((35, 58, 10), (-84, 19, 0))
        self.obs_datetime = (2013, 10, 18, 22, 0, 0)
        self.timezone = 'America/New_York'
        self.mi = MoonInfo(location[0], location[1])
        self.date_list = [(2013, 10, 5, 0, 0, 0), (2013, 10, 8, 6, 0, 0),
                          (2013, 10, 11, 22, 0, 0), (2013, 10, 12, 3, 30, 0),
                          (2013, 10, 19, 1, 30, 0), (2013, 10, 24, 15, 0, 0),
                          (2013, 10, 26, 23, 40, 0), (2013, 11, 2, 23, 0, 0)]

    def test_basic_information_after_creation(self):
        assert self.mi.observer is not None
        assert self.mi.moon is not None

    def test_information_after_update(self):
        self.mi.update(self.obs_datetime)
        assert self.mi.observer.date == 41564.416666666664

    def test_moon_information(self):
        self.mi.update(self.obs_datetime)

        assert self.mi.age() == 13.892695861570246
        assert self.mi.fractional_age() == 0.47076766395227637
        assert self.mi.colong() == 83.97189956624061
        assert self.mi.fractional_phase() == 0.9998519924481626
        assert self.mi.phase_name() == "FULL_MOON"
        assert self.mi.libration_lon() == 5.23107551788429
        assert self.mi.libration_lat() == -1.4788210646482465
        assert self.mi.libration_phase_angle() == 105.7855572234932
        assert self.mi.altitude() == -9.8149186580585
        assert self.mi.azimuth() == 69.75156520051686
        assert self.mi.time_from_new_moon() == 333.4247006776859
        assert self.mi.time_to_new_moon() == 374.8327396878158
        assert self.mi.time_to_full_moon() == 0.06781995449273381
        assert self.mi.ra() == 23.331888825304354
        assert self.mi.dec() == 10.129795148334347
        assert self.mi.earth_distance() == 386484.25078267464
        assert self.mi.angular_size() == 0.5159071519639757
        assert self.mi.magnitude() == -12.63
        assert self.mi.subsolar_lat() == -0.3366501792590513
        assert self.mi.elongation() == 178.56298828125

        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["transit", "set", "rise"]
        assert rise_set_times[0][1] == (2013, 10, 18, 0, 43, 21)

        next_four_phases = self.mi.next_four_phases()
        phase_names = [x[0] for x in next_four_phases]
        assert phase_names == [
            "full_moon", "last_quarter", "new_moon", "first_quarter"
        ]
        assert next_four_phases[0][1] == (2013, 10, 18, 23, 37,
                                          39.644067962653935)

    def test_different_elongations(self):
        self.mi.update((2013, 10, 6, 22, 0, 0))
        assert self.mi.elongation() == 23.90241813659668
        self.mi.update((2013, 10, 24, 22, 0, 0))
        assert self.mi.elongation() == 247.54827117919922
        self.mi.update((2013, 10, 31, 22, 0, 0))
        assert self.mi.elongation() == 326.54500579833984

    def test_different_rise_set_times(self):
        self.mi.update((2013, 10, 17, 22, 0, 0))
        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["transit", "set", "rise"]
        assert rise_set_times[0][1] == "Does not transit"
        self.mi.update((2013, 9, 26, 22, 0, 0))
        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["rise", "transit", "set"]
        assert rise_set_times[0][1] == "Does not rise"

    def test_state_reset_after_rise_test_call(self):
        self.mi.update(self.obs_datetime)
        self.mi.rise_set_times(self.timezone)
        assert self.mi.colong() == 83.97189956624061

    def test_different_phase_names(self):
        self.mi.update((2013, 10, 18, 18, 0, 0))
        assert self.mi.phase_name() == "WAXING_GIBBOUS"
        self.mi.update((2013, 10, 5, 0, 0, 0))
        assert self.mi.phase_name() == "NEW_MOON"
        self.mi.update((2013, 10, 8, 6, 0, 0))
        assert self.mi.phase_name() == "WAXING_CRESCENT"
        self.mi.update((2013, 10, 11, 22, 0, 0))
        assert self.mi.phase_name() == "FIRST_QUARTER"
        self.mi.update((2013, 10, 12, 3, 30, 0))
        assert self.mi.phase_name() == "WAXING_GIBBOUS"
        self.mi.update((2013, 10, 19, 1, 30, 0))
        assert self.mi.phase_name() == "FULL_MOON"
        self.mi.update((2013, 10, 24, 15, 0, 0))
        assert self.mi.phase_name() == "WANING_GIBBOUS"
        self.mi.update((2013, 10, 26, 23, 40, 0))
        assert self.mi.phase_name() == "LAST_QUARTER"
        self.mi.update((2013, 11, 2, 23, 0, 0))
        assert self.mi.phase_name() == "WANING_CRESCENT"

    def test_colong_to_long(self):
        self.mi.update(self.date_list[0])
        assert self.mi.colong_to_long() == 85.63604081994191
        self.mi.update(self.date_list[1])
        assert self.mi.colong_to_long() == 46.01878527028475
        self.mi.update(self.date_list[2])
        assert self.mi.colong_to_long() == 1.2909929717534965
        self.mi.update(self.date_list[3])
        assert self.mi.colong_to_long() == -1.5152263359641438
        self.mi.update(self.date_list[4])
        assert self.mi.colong_to_long() == -85.74623915427537
        self.mi.update(self.date_list[5])
        assert self.mi.colong_to_long() == 26.4615811331646
        self.mi.update(self.date_list[6])
        assert self.mi.colong_to_long() == -2.1812638653489103
        self.mi.update(self.date_list[7])
        assert self.mi.colong_to_long() == -87.15293941124628

    def test_time_of_day(self):
        self.mi.update(self.date_list[0])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[1])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[2])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[3])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[4])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[5])
        assert self.mi.time_of_day() == "EVENING"
        self.mi.update(self.date_list[6])
        assert self.mi.time_of_day() == "EVENING"
        self.mi.update(self.date_list[7])
        assert self.mi.time_of_day() == "EVENING"

    def test_is_visible(self):
        feature1 = LunarFeature("A", 0.1, 0.0, 46.0, 0.01, 0.01, "Crater",
                                "Taruntius", "LAC-61", "Lunar", "Telescope")
        feature2 = LunarFeature("B", 1.0, 50.0, 46.0, 0.5, 0.5, "Crater",
                                "Endymion", "LAC-14", "Lunar", "Binocular")
        feature3 = LunarFeature("C", 100.0, -30.0, 46.0, 5.0, 10.0, "Mare",
                                "Fracastorius", "LAC-97", "Lunar", "Naked Eye")
        self.mi.update(self.date_list[0])
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 6, 15, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 7, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 16, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 9, 12, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 10, 5, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 21, 2, 30, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 21, 19, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 22, 15, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 23, 0, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 23, 1, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False

    def test_is_libration_ok(self):
        feature1 = LunarFeature("A", 374.0, -2.0, 87.0, 12.0, 12.0, "Mare",
                                "Ansgarius", "LAC-81", "LunarII", None)
        feature2 = LunarFeature("B", 358.0, 13.0, 86.5, 9.0, 12.0, "Mare",
                                "Neper", "LAC-63", "LunarII", None)
        feature3 = LunarFeature("C", 682.0, -19.5, -95.0, 22.5, 23.0, "Mons",
                                "Mare Orientale", "LAC-108", "LunarII", None)
        self.mi.update((2017, 5, 27, 12, 21, 0))
        assert self.mi.is_libration_ok(feature1) is True
        assert self.mi.is_libration_ok(feature2) is True
        assert self.mi.is_libration_ok(feature3) is False
        assert self.mi.is_visible(feature1) is True
        self.mi.update((2017, 11, 24, 22, 0, 0))
        assert self.mi.is_libration_ok(feature1) is False
        assert self.mi.is_libration_ok(feature2) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_libration_ok(feature3) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2017, 7, 17, 6, 0, 0))
        assert self.mi.is_libration_ok(feature1) is False
        assert self.mi.is_libration_ok(feature2) is False
        assert self.mi.is_libration_ok(feature3) is True
Пример #7
0
# This file is part of pylunar.
#
# Developed by Michael Reuter.
#
# See the LICENSE file at the top-level directory of this distribution
# for details of code ownership.
#
# Use of this source code is governed by a 3-clause BSD-style
# license that can be found in the LICENSE file.

from pylunar import MoonInfo
location = ((35, 58, 10), (-84, 19, 0))
obs_datetime = (2013, 10, 18, 22, 0, 0)
mi = MoonInfo(location[0], location[1])
mi.update(obs_datetime)
Пример #8
0
class TestMoonInfo(object):

    def setup_class(self):
        location = ((35, 58, 10), (-84, 19, 0))
        self.obs_datetime = (2013, 10, 18, 22, 0, 0)
        self.timezone = 'America/New_York'
        self.mi = MoonInfo(location[0], location[1])
        self.date_list = [(2013, 10, 5, 0, 0, 0),
                          (2013, 10, 8, 6, 0, 0),
                          (2013, 10, 11, 22, 0, 0),
                          (2013, 10, 12, 3, 30, 0),
                          (2013, 10, 19, 1, 30, 0),
                          (2013, 10, 24, 15, 0, 0),
                          (2013, 10, 26, 23, 40, 0),
                          (2013, 11, 2, 23, 0, 0)]

    def test_basic_information_after_creation(self):
        assert self.mi.observer is not None
        assert self.mi.moon is not None

    def test_information_after_update(self):
        self.mi.update(self.obs_datetime)
        assert self.mi.observer.date == 41564.416666666664

    def test_moon_information(self):
        self.mi.update(self.obs_datetime)

        assert self.mi.age() == 13.892695861570246
        assert self.mi.colong() == 83.97189956624061
        assert self.mi.fractional_phase() == 0.9998519924481626
        assert self.mi.phase_name() == "FULL_MOON"
        assert self.mi.libration_lon() == 5.23107551788429
        assert self.mi.libration_lat() == -1.4788210646482465
        assert self.mi.libration_phase_angle() == 105.7855572234932
        assert self.mi.altitude() == -9.8149186580585
        assert self.mi.azimuth() == 69.75156520051686
        assert self.mi.time_from_new_moon() == 333.4247006776859
        assert self.mi.time_to_new_moon() == 374.8327396878158
        assert self.mi.time_to_full_moon() == 0.06781995449273381
        assert self.mi.ra() == 23.331888825304354
        assert self.mi.dec() == 10.129795148334347
        assert self.mi.earth_distance() == 386484.25078267464
        assert self.mi.angular_size() == 0.5159071519639757
        assert self.mi.magnitude() == -12.63
        assert self.mi.subsolar_lat() == -0.3366501792590513
        assert self.mi.elongation() == 178.56298828125

        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["transit", "set", "rise"]
        assert rise_set_times[0][1] == (2013, 10, 18, 0, 43, 21)

        next_four_phases = self.mi.next_four_phases()
        phase_names = [x[0] for x in next_four_phases]
        assert phase_names == ["full_moon", "last_quarter", "new_moon", "first_quarter"]
        assert next_four_phases[0][1] == (2013, 10, 18, 23, 37, 39.644067962653935)

    def test_different_elongations(self):
        self.mi.update((2013, 10, 6, 22, 0, 0))
        assert self.mi.elongation() == 23.90241813659668
        self.mi.update((2013, 10, 24, 22, 0, 0))
        assert self.mi.elongation() == 247.54827117919922
        self.mi.update((2013, 10, 31, 22, 0, 0))
        assert self.mi.elongation() == 326.54500579833984

    def test_different_rise_set_times(self):
        self.mi.update((2013, 10, 17, 22, 0, 0))
        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["transit", "set", "rise"]
        assert rise_set_times[0][1] == "Does not transit"
        self.mi.update((2013, 9, 26, 22, 0, 0))
        rise_set_times = self.mi.rise_set_times(self.timezone)
        position_names = [x[0] for x in rise_set_times]
        assert position_names == ["rise", "transit", "set"]
        assert rise_set_times[0][1] == "Does not rise"

    def test_state_reset_after_rise_test_call(self):
        self.mi.update(self.obs_datetime)
        self.mi.rise_set_times(self.timezone)
        assert self.mi.colong() == 83.97189956624061

    def test_different_phase_names(self):
        self.mi.update((2013, 10, 18, 18, 0, 0))
        assert self.mi.phase_name() == "WAXING_GIBBOUS"
        self.mi.update((2013, 10, 5, 0, 0, 0))
        assert self.mi.phase_name() == "NEW_MOON"
        self.mi.update((2013, 10, 8, 6, 0, 0))
        assert self.mi.phase_name() == "WAXING_CRESCENT"
        self.mi.update((2013, 10, 11, 22, 0, 0))
        assert self.mi.phase_name() == "FIRST_QUARTER"
        self.mi.update((2013, 10, 12, 3, 30, 0))
        assert self.mi.phase_name() == "WAXING_GIBBOUS"
        self.mi.update((2013, 10, 19, 1, 30, 0))
        assert self.mi.phase_name() == "FULL_MOON"
        self.mi.update((2013, 10, 24, 15, 0, 0))
        assert self.mi.phase_name() == "WANING_GIBBOUS"
        self.mi.update((2013, 10, 26, 23, 40, 0))
        assert self.mi.phase_name() == "LAST_QUARTER"
        self.mi.update((2013, 11, 2, 23, 0, 0))
        assert self.mi.phase_name() == "WANING_CRESCENT"

    def test_colong_to_long(self):
        self.mi.update(self.date_list[0])
        assert self.mi.colong_to_long() == 85.63604081994191
        self.mi.update(self.date_list[1])
        assert self.mi.colong_to_long() == 46.01878527028475
        self.mi.update(self.date_list[2])
        assert self.mi.colong_to_long() == 1.2909929717534965
        self.mi.update(self.date_list[3])
        assert self.mi.colong_to_long() == -1.5152263359641438
        self.mi.update(self.date_list[4])
        assert self.mi.colong_to_long() == -85.74623915427537
        self.mi.update(self.date_list[5])
        assert self.mi.colong_to_long() == 26.4615811331646
        self.mi.update(self.date_list[6])
        assert self.mi.colong_to_long() == -2.1812638653489103
        self.mi.update(self.date_list[7])
        assert self.mi.colong_to_long() == -87.15293941124628

    def test_time_of_day(self):
        self.mi.update(self.date_list[0])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[1])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[2])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[3])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[4])
        assert self.mi.time_of_day() == "MORNING"
        self.mi.update(self.date_list[5])
        assert self.mi.time_of_day() == "EVENING"
        self.mi.update(self.date_list[6])
        assert self.mi.time_of_day() == "EVENING"
        self.mi.update(self.date_list[7])
        assert self.mi.time_of_day() == "EVENING"

    def test_is_visible(self):
        feature1 = LunarFeature("A", 0.1, 0.0, 46.0, 0.01, 0.01, "Crater",
                                "Taruntius", "LAC-61", "Lunar", "Telescope")
        feature2 = LunarFeature("B", 1.0, 50.0, 46.0, 0.5, 0.5, "Crater",
                                "Endymion", "LAC-14", "Lunar", "Binocular")
        feature3 = LunarFeature("C", 100.0, -30.0, 46.0, 5.0, 10.0, "Mare",
                                "Fracastorius", "LAC-97", "Lunar", "Naked Eye")
        self.mi.update(self.date_list[0])
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 6, 15, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 7, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 8, 16, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 9, 12, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 10, 5, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 21, 2, 30, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 21, 19, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is True
        self.mi.update((2013, 10, 22, 15, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 23, 0, 0, 0))
        assert self.mi.is_visible(feature1) is True
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2013, 10, 23, 1, 0, 0))
        assert self.mi.is_visible(feature1) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_visible(feature3) is False

    def test_is_libration_ok(self):
        feature1 = LunarFeature("A", 374.0, -2.0, 87.0, 12.0, 12.0, "Mare",
                                "Ansgarius", "LAC-81", "LunarII", None)
        feature2 = LunarFeature("B", 358.0, 13.0, 86.5, 9.0, 12.0, "Mare",
                                "Neper", "LAC-63", "LunarII", None)
        feature3 = LunarFeature("C", 682.0, -19.5, -95.0, 22.5, 23.0, "Mons",
                                "Mare Orientale", "LAC-108", "LunarII", None)
        self.mi.update((2017, 5, 27, 12, 21, 0))
        assert self.mi.is_libration_ok(feature1) is True
        assert self.mi.is_libration_ok(feature2) is True
        assert self.mi.is_libration_ok(feature3) is False
        assert self.mi.is_visible(feature1) is True
        self.mi.update((2017, 11, 24, 22, 0, 0))
        assert self.mi.is_libration_ok(feature1) is False
        assert self.mi.is_libration_ok(feature2) is False
        assert self.mi.is_visible(feature2) is False
        assert self.mi.is_libration_ok(feature3) is True
        assert self.mi.is_visible(feature3) is False
        self.mi.update((2017, 7, 17, 6, 0, 0))
        assert self.mi.is_libration_ok(feature1) is False
        assert self.mi.is_libration_ok(feature2) is False
        assert self.mi.is_libration_ok(feature3) is True
Пример #9
0
from pylunar import MoonInfo
location = ((35, 58, 10), (-84, 19, 0))
obs_datetime = (2013, 10, 18, 22, 0, 0)
mi = MoonInfo(location[0], location[1])
mi.update(obs_datetime)
Пример #10
0
from datetime import datetime
from pylunar import MoonInfo
from kavalkilu import DateTools, LogWithInflux
from servertools import SlackComm

logg = LogWithInflux('moon_phase', log_dir='weather')
# lat/long in degrees, mins & secs
loc = ((30, 16, 2), (-97, 44, 35))
mi = MoonInfo(*loc)
dt = DateTools()
scom = SlackComm()

now_local = datetime.now()
now_utc = dt.local_time_to_utc(now_local, as_str=False).replace(tzinfo=None)
mi.update(now_utc)
# Get next four phases
full_dt = None
for phase, dt_tuple in mi.next_four_phases():
    if phase == 'full_moon':
        # Correct the seconds
        full_list = list(dt_tuple)
        full_list[-1] = int(round(full_list[-1], 0))
        full_dt = dt.utc_to_local_time(
            datetime(*full_list)).replace(tzinfo=None)
        break

if full_dt is not None:
    if (full_dt - now_local).days < 2:
        # Announce it in the channel
        scom.st.send_message(
            scom.ilma_kanal,