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)
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)
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)
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
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))
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)
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)))
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))
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))
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"
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)
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))
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]))
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)