def get_eclipse_duration(self, when_utc=None, tolerance=1e-1): """Gets eclipse duration at given time, in minutes""" ecc = self.get_position(when_utc).osculating_elements[1] if ecc > tolerance: raise NotImplementedError("Non circular orbits are not supported") beta = self.get_beta(when_utc) return eclipse_duration(beta, self.period)
def test_get_eclipse_duration_changes_for_non_sun_synchronous_satellite( non_sun_synchronous): dt1 = dt.datetime(2020, 2, 1, 0, 0, 0) dt2 = dt.datetime(2020, 2, 15, 0, 0, 0) maximum_eclipse_duration = eclipse_duration(0, non_sun_synchronous.period) eclipse_duration1 = non_sun_synchronous.get_eclipse_duration(dt1) eclipse_duration2 = non_sun_synchronous.get_eclipse_duration(dt2) assert eclipse_duration1 <= maximum_eclipse_duration assert eclipse_duration2 <= maximum_eclipse_duration assert abs(eclipse_duration1 - eclipse_duration2) > 1 # minutes
def test_eclipse_duration_dwarf_planet_always_0(beta, period): expected_eclipse_duration = 0 eclipse_duration_value = eclipse_duration(beta, period, r_p=0) assert eclipse_duration_value == expected_eclipse_duration
def test_eclipse_duration_beta_90_is_0(beta, period): expected_eclipse_duration = 0 eclipse_duration_value = eclipse_duration(beta, period) assert eclipse_duration_value == expected_eclipse_duration
def test_eclipse_duration_is_maximum_at_beta_0(beta, period): ref_eclipse_duration = eclipse_duration(0, period) assert beta != 0 assert eclipse_duration(beta, period) < ref_eclipse_duration