def test_eclipses_since_finds_all_eclipses_in_a_few_orbits( sate_predictors, sate_dates_list): for sate_name, start, limit in sate_dates_list: predictor = sate_predictors[sate_name] eclipses = list(predictor.eclipses_since(start, limit)) total_duration_m = int((limit - start).total_seconds() / 60) for mins in range(total_duration_m): current_time = start + dt.timedelta(minutes=mins) pos = predictor.get_only_position(current_time) if get_shadow(pos, current_time) != 2: assert any(ecl_start <= current_time <= ecl_end for ecl_start, ecl_end in eclipses)
def test_eclipses_since_is_consistent_with_get_shadow(sate_predictors, sate_dates_list): for sate_name, start, limit in sate_dates_list: predictor = sate_predictors[sate_name] for ecl_start, ecl_end in predictor.eclipses_since(start, limit): one_second = dt.timedelta(seconds=1) pre_eclipse_start = ecl_start - one_second post_eclipse_start = ecl_start + one_second pre_eclipse_end = ecl_end - one_second post_eclipse_end = ecl_end + one_second for time_to_check, must_be_illuminated in [ (pre_eclipse_start, True), (post_eclipse_start, False), (pre_eclipse_end, False), (post_eclipse_end, True), ]: pos = predictor.get_only_position(time_to_check) assert (get_shadow(pos, time_to_check) == 2) == must_be_illuminated
def test_get_shadow_gives_penumbra(when_utc, r_ecef): shadow = get_shadow(r_ecef, when_utc) assert shadow == 1
def test_get_shadow_matches_expected_result(when_utc, r_ecef, expected_shadow): shadow = get_shadow(r_ecef, when_utc) assert shadow == expected_shadow
def test_satellite_minus_penumbra_consistent_with_discrete_witness_cases( when_utc, r_ecef): if get_shadow(r_ecef, when_utc) == 2: assert get_satellite_minus_penumbra_verticals(r_ecef, when_utc) > 0 else: assert get_satellite_minus_penumbra_verticals(r_ecef, when_utc) < 0
def get_shadow(self, when_utc=None): """Gives illumination at given time (2 for illuminated, 1 for penumbra, 0 for umbra).""" if when_utc is None: when_utc = dt.datetime.utcnow() return get_shadow(self.get_position(when_utc).position_ecef, when_utc)