예제 #1
0
    def test_to_gregorian(self):
        self.assertEqual(gregorian.to_jd(2014, 11, 5), 2456966.5)

        assert gregorian.to_jd(2012, 3, 1) == 1 + gregorian.to_jd(2012, 2, 29)

        assert gregorian.from_jd(gregorian.to_jd(2012, 2, 29) + 1) == (2012, 3, 1)
        assert gregorian.from_jd(gregorian.to_jd(2011, 2, 28) + 1) == (2011, 3, 1)

        assert gregorian.from_jd(gregorian.to_jd(2012, 3, 2) - 2) == (2012, 2, 29)
        assert gregorian.from_jd(gregorian.to_jd(2011, 3, 2) - 2) == (2011, 2, 28)
예제 #2
0
    def test_gregorian_proleptic(self):
        self.assertEqual(gregorian.to_jd(72, 6, 27), 1747535.5)
        assert gregorian.to_jd2(72, 6, 27) == 1747535.5

        for y in range(int(gregorian.EPOCH), int(gregorian.EPOCH) - 10000, -250):
            assert gregorian.to_jd(*gregorian.from_jd(y)) == y - 0.5

        assert gregorian.from_jd(gregorian.to_jd(-1, 3, 1)) == (-1, 3, 1)
        assert gregorian.from_jd(gregorian.to_jd(-100, 7, 1)) == (-100, 7, 1)
        assert gregorian.from_jd(gregorian.to_jd(-500, 12, 31)) == (-500, 12, 31)
        assert gregorian.from_jd(gregorian.to_jd(-1000, 1, 1)) == (-1000, 1, 1)
예제 #3
0
    def create_month_images(timefrom, timeuntil):
        """
        https://stackoverflow.com/questions/4039879/best-way-to-find-the-months-between-two-dates
        """
        print("  preparing month images...")
        tmp = []
        if timefrom - timeuntil == 0:
            tmp.extend([int(gregorian.from_jd(timefrom)[1])])
        else:
            t1, t2, t3 = gregorian.from_jd(timeuntil)
            s1, s2, s3 = gregorian.from_jd(timefrom)
            strt_dt = date(s1, s2, s3)
            end_dt = date(t1, t2, t3)
            if (end_dt - strt_dt).days < 28:
                end_dt = date(t1, t2, s3)
            # print(strt_dt)
            # print(end_dt)

            dates = ([dt for dt in rrule(MONTHLY, dtstart=strt_dt, until=end_dt)])
            # print(dates)

            for i in dates:
                tmp.extend([i.strftime('%m')])

        for time in tmp:
            # print(time)
            p = pathlib.Path(Config().image_earth_month(time))
            if not p.exists():
                this = "convert " +\
                    Config().image_earth_original + " " +\
                    Config().image_night_original +\
                    " -alpha on -compose Blend  -define compose:args=11 -composite " +\
                    Config().image_earth_month(time) + ""
                # print(this)
                call(this, shell=True)
                this = "convert " +\
                    Config().image_earth_month(time) + " " +\
                    Config().image_topo(time) +\
                    " -alpha on -compose Blend  -define compose:args=50 -composite " +\
                    Config().image_earth_month(time) + ""
                call(this, shell=True)
                # print(this)
            p = pathlib.Path(Config().image_night_month(time))
            if not p.exists():
                this = "convert " +\
                    Config().image_night_original + " " +\
                    Config().image_topo(time) +\
                    " -alpha on -compose Blend  -define compose:args=33 -composite " +\
                    Config().image_night_month(time) + ""
                # print(this)
                call(this, shell=True)
예제 #4
0
 def image_temperature_original(cls, wave):
     """
     choose temperature map if available
     """
     date = gregorian.from_jd(wave.time.tt)
     this = cls.nullschool_dir +\
         "2014_" +\
         '{:02d}'.format(date[1]) +\
         "_" +\
         '{:02d}'.format(date[2]) +\
         "_0600Z_wind_surface_level_overlay-temp_equirectangular-full.png"
     tmp1 = pathlib.Path(this)
     this2 = cls.nullschool_dir +\
         "2015_" +\
         '{:02d}'.format(date[1]) +\
         "_" +\
         '{:02d}'.format(date[2]) +\
         "_0600Z_wind_surface_level_overlay-temp_equirectangular-full.png"
     tmp2 = pathlib.Path(this2)
     if tmp1.exists():
         return this
     elif tmp2.exists():
         return this2
     else:
         this = cls.nullschool_dir + "2015_12_21" + \
             "_0600Z_wind_surface_level_overlay-temp_equirectangular-full.png"
         # print(this)
         return this
예제 #5
0
    def test_year_zero(self):
        assert gregorian.to_jd(1, 1, 1) == 1.0 + gregorian.to_jd(0, 12, 31)
        assert julian.to_jd(1, 1, 1) == 1.0 + julian.to_jd(0, 12, 31)

        assert julian.from_jd(julian.to_jd(1, 1, 1) - 1) == (0, 12, 31)
        self.assertEqual(gregorian.from_jd(gregorian.to_jd(1, 1, 1) - 1),
                         (0, 12, 31))
예제 #6
0
 def image_waves_original(cls, wave):
     """
     choose waves map if available
     """
     date = gregorian.from_jd(wave.time.tt)
     this = cls.nullschool_dir +\
         "2014_" +\
         '{:02d}'.format(date[1]) +\
         "_" +\
         '{:02d}'.format(date[2]) +\
         "_0600Z_ocean_surface_currents_equirectangular-full.png"
     tmp1 = pathlib.Path(this)
     this2 = cls.nullschool_dir +\
         "2015_" +\
         '{:02d}'.format(date[1]) +\
         "_" +\
         '{:02d}'.format(date[2]) +\
         "_0600Z_ocean_surface_currents_equirectangular-full.png"
     tmp2 = pathlib.Path(this2)
     if tmp1.exists():
         return this
     elif tmp2.exists():
         return this2
     else:
         this = cls.nullschool_dir +\
             "2016_01" +\
             "_19_0748Z_ocean_surface_currents_equirectangular-full.png"
         # print(this)
         return this
    def test_french_republican_schematic_continuous(self):
        self.assertEqual(
            gregorian.from_jd(self.jd),
            fr.to_gregorian(*fr.from_jd(self.jd, method=4), method=4))
        self.assertEqual(self.x,
                         fr.to_jd(*fr.from_jd(self.x, method=4), method=4))

        assert self.j == fr.to_jd(*fr.from_jd(self.j, method='continuous'),
                                  method=4)
예제 #8
0
    def test_french_republican(self):
        assert self.jd == fr.to_jd(*fr.from_jd(self.jd))
        assert fr.from_gregorian(2014, 6, 14) == (222, 9, 26)
        assert (2014, 6, 14) == fr.to_gregorian(222, 9, 26)

        assert (3, 13, 6) == fr.from_gregorian(1795, 9, 22)

        for jd in range(2378822, 2488395, 2000):
            self.assertEqual(jd + 0.5, gregorian.to_jd(*gregorian.from_jd(jd + 0.5)))
예제 #9
0
    def test_french_republican(self):
        assert self.jd == fr.to_jd(*fr.from_jd(self.jd))
        assert fr.from_gregorian(2014, 6, 14) == (222, 9, 26)
        assert (2014, 6, 14) == fr.to_gregorian(222, 9, 26)

        assert (3, 13, 6) == fr.from_gregorian(1795, 9, 22)

        for jd in range(2378822, 2488395, 2000):
            self.assertEqual(jd + 0.5, gregorian.to_jd(*gregorian.from_jd(jd + 0.5)))
예제 #10
0
    def test_dublin_dc(self):
        self.assertEqual(dublin.from_gregorian(1900, 1, 1), 0.5)
        self.assertEqual(dublin.to_gregorian(1), (1900, 1, 1))
        self.assertEqual(dublin.to_jd(0), 2415020.0)

        self.assertEqual(
            dublin.to_jd(dublin.from_jd(self.c)),
            gregorian.to_jd(*dublin.to_gregorian(dublin.from_gregorian(*self.c_greg)))
        )

        self.assertEqual(dublin.to_gregorian(dublin.from_jd(1737936)), gregorian.from_jd(1737936))
        self.assertEqual(dublin.to_julian(dublin.from_jd(1737936)), julian.from_jd(1737936))
예제 #11
0
    def test_islamic(self):
        self.assertEqual(self.jd, islamic.to_jd(*islamic.from_jd(self.jd)))
        self.reflexive(islamic.from_jd, islamic.to_jd)

        new_years = [
            (2012, 11, 15),
            (2015, 10, 15),
            (2019, 9, 1),
            (2020, 8, 20),
            (2021, 8, 10),
            (2022, 7, 30),
        ]

        for date in new_years:
            jd = islamic.to_jd_gregorianyear(date[0], 1, 1)
            with self.subTest(date[0]):
                self.assertEqual(date, gregorian.from_jd(jd))
예제 #12
0
    def _populate(self, year):
        # Passover
        name = "Passover I"
        year, month, day = passover(year, eve=True)
        passover_start_dt = date(year, month, day)
        self[passover_start_dt] = name + " - Eve"
        self[passover_start_dt + rd(days=1)] = name

        name = "Passover"
        for offset in range(2, 6):
            self[passover_start_dt + rd(days=offset)] = name + " - Chol HaMoed"

        name = "Passover VII"
        self[passover_start_dt + rd(days=6)] = name + " - Eve"
        self[passover_start_dt + rd(days=7)] = name

        # Memorial Day
        name = "Memorial Day"
        year, month, day = gregorian.from_jd(
            hebrew.to_jd_gregorianyear(year, hebrew.IYYAR, 3))
        self[date(year, month, day) + rd(days=1)] = name

        observed_delta = 0
        if self.observed:
            day_in_week = date(year, month, day).weekday()
            if day_in_week in (2, 3):
                observed_delta = -(day_in_week - 1)
            elif 2004 <= year and day_in_week == 5:
                observed_delta = 1

            if observed_delta != 0:
                self[date(year, month, day) +
                     rd(days=observed_delta + 1)] = (name + " (Observed)")

        # Independence Day
        name = "Independence Day"
        self[date(year, month, day) + rd(days=2)] = name

        if self.observed and observed_delta != 0:
            self[date(year, month, day) +
                 rd(days=observed_delta + 2)] = (name + " (Observed)")

        # Lag Baomer
        name = "Lag B'Omer"
        year, month, day = lag_baomer(year, eve=False)
        self[date(year, month, day)] = name

        # Shavuot
        name = "Shavuot"
        year, month, day = shavuot(year, eve=True)
        self[date(year, month, day)] = name + " - Eve"
        self[date(year, month, day) + rd(days=1)] = name

        # Rosh Hashana
        name = "Rosh Hashanah"
        year, month, day = rosh_hashanah(year, eve=True)
        self[date(year, month, day)] = name + " - Eve"
        self[date(year, month, day) + rd(days=1)] = name
        self[date(year, month, day) + rd(days=2)] = name

        # Yom Kippur
        name = "Yom Kippur"
        year, month, day = yom_kippur(year, eve=True)
        self[date(year, month, day)] = name + " - Eve"
        self[date(year, month, day) + rd(days=1)] = name

        # Sukkot
        name = "Sukkot I"
        year, month, day = sukkot(year, eve=True)
        sukkot_start_dt = date(year, month, day)
        self[sukkot_start_dt] = name + " - Eve"
        self[sukkot_start_dt + rd(days=1)] = name

        name = "Sukkot"
        for offset in range(2, 7):
            self[sukkot_start_dt + rd(days=offset)] = name + " - Chol HaMoed"

        name = "Sukkot VII"
        self[sukkot_start_dt + rd(days=7)] = name + " - Eve"
        self[sukkot_start_dt + rd(days=8)] = name

        # Hanukkah
        name = "Hanukkah"
        year, month, day = hanukkah(year, eve=False)
        for offset in range(8):
            self[date(year, month, day) + rd(days=offset)] = name

        # Purim
        name = "Purim"
        year, month, day = purim(year, eve=True)
        self[date(year, month, day)] = name + " - Eve"
        self[date(year, month, day) + rd(days=1)] = name
        self[date(year, month, day) + rd(days=2)] = "Shushan Purim"
예제 #13
0
    def run_convert_images():
        wave = Settings().wave
        ensure_dir(Config().tmp_dir)
        ensure_dir(Config().output_dir)
        image_earth = Config().image_earth(wave)
        image_night = Config().image_night(wave)
        t1, t2, t3 = gregorian.from_jd(wave.time.tt)
        month = date(t1, t2, t3).strftime('%m')

        if Settings().draw_earth:
            copyfile(Config().image_earth_month(month), image_earth)
            if Settings().draw_waves:
                this = "convert " +\
                    image_earth + " " +\
                    Config().image_waves_original(wave) +\
                    " -alpha on -compose Blend  -define compose:args=20 -composite " +\
                    image_earth + " "
                call(this, shell=True)
            if Settings().draw_temperature:
                this = "convert " +\
                    image_earth + " " +\
                    Config().image_temperature_original(wave) +\
                    " -alpha on -compose Blend  -define compose:args=30 -composite " +\
                    image_earth + " "
                call(this, shell=True)
            if Settings().draw_constellations:
                this = "convert " +\
                    image_earth + " " +\
                    Config().image_constellations +\
                    " -alpha on -compose Blend  -define compose:args=40 -composite " +\
                    image_earth + " "
                call(this, shell=True)
            if Settings().draw_flightpaths:
                this = "convert " +\
                    image_earth + " " +\
                    Config().image_flightpaths +\
                    " -alpha on -compose Blend  -define compose:args=50 -composite " +\
                    image_earth + " "
                call(this, shell=True)

            this = ("convert -brightness-contrast 20x20 " +
                    image_earth + " " + image_earth + "")
            call(this, shell=True)

        if Settings().draw_night:
            copyfile(Config().image_night_month(month), image_night)
            if Settings().draw_waves:
                this = "convert " +\
                    image_night + " " +\
                    Config().image_waves_original(wave) +\
                    " -alpha on -compose Blend  -define compose:args=20 -composite " +\
                    image_night + " "
                call(this, shell=True)
            if Settings().draw_temperature:
                this = "convert " +\
                    image_night + " " +\
                    Config().image_temperature_original(wave) +\
                    " -alpha on -compose Blend  -define compose:args=5 -composite " +\
                    image_night + " "
                call(this, shell=True)
            if Settings().draw_constellations:
                this = "convert " +\
                    image_night + " " +\
                    Config().image_constellations +\
                    " -alpha on -compose Blend  -define compose:args=50 -composite " +\
                    image_night + " "
                call(this, shell=True)
            if Settings().draw_flightpaths:
                this = "convert " +\
                    image_night + " " +\
                    Config().image_flightpaths +\
                    " -alpha on -compose Blend  -define compose:args=50 -composite " +\
                    image_night + " "
                call(this, shell=True)

            this = ("convert -brightness-contrast 15x15 " +
                    image_night + " " + image_night + "")
            call(this, shell=True)

        if not (Settings().draw_night and Settings().draw_earth):
            if Settings().draw_constellations:
                copyfile(Config().image_constellations, image_night)
                copyfile(Config().image_constellations, image_earth)

        if Settings().draw_clouds:
            this = (
                "convert -brightness-contrast 5x0 " +
                Config().image_cloud_original(wave) +
                " " +
                Config().image_cloud(wave) +
                "")
            call(this, shell=True)
예제 #14
0
    def test_year_zero(self):
        assert gregorian.to_jd(1, 1, 1) == 1.0 + gregorian.to_jd(0, 12, 31)
        assert julian.to_jd(1, 1, 1) == 1.0 + julian.to_jd(0, 12, 31)

        assert julian.from_jd(julian.to_jd(1, 1, 1) - 1) == (0, 12, 31)
        self.assertEqual(gregorian.from_jd(gregorian.to_jd(1, 1, 1) - 1), (0, 12, 31))
예제 #15
0
 def test_from_gregorian_20thc(self):
     self.assertEqual(gregorian.from_jd(2418934.0), (1910, 9, 19))
     self.assertEqual(gregorian.from_jd(2433360.0), (1950, 3, 19))
     self.assertEqual(gregorian.from_jd(2437970.0), (1962, 11, 1))
     self.assertEqual(gregorian.from_jd(2447970.0), (1990, 3, 19))
     self.assertEqual(gregorian.from_jd(2456967.5), (2014, 11, 6))
예제 #16
0
 def formatted_month(time):
     """
     Return two digit months as number from JD time input
     """
     return '{num:02d}'.format(num=int(gregorian.from_jd(time)[1]))
예제 #17
0
    def test_french_republican_schematic_continuous(self):
        self.assertEqual(gregorian.from_jd(self.jd), fr.to_gregorian(*fr.from_jd(self.jd, method=4), method=4))
        self.assertEqual(self.x, fr.to_jd(*fr.from_jd(self.x, method=4), method=4))

        assert self.j == fr.to_jd(*fr.from_jd(self.j, method='continuous'), method=4)