def _shorten_capacities_to_start_from_remaining_time_entry(capacities_series, first_remaining_time): shortened_capacities = _shorten_series_to_start_from_day(capacities_series, first_remaining_time.when) # synthesize first ideal burndown entry at the time of the first remaining_time before, after = _entries_from_timeseries_nearest_to(capacities_series, first_remaining_time.when) if before is not None and after is not None: interpolated_start_capacity = Line.from_two_tupples(before, after).y_from_x(first_remaining_time.when) shortened_capacities = [(first_remaining_time.when, interpolated_start_capacity)] + shortened_capacities[1:] return shortened_capacities
def test_can_create_line_with_no_slope_from_points(self): line = Line.from_two_tupples((0, 0), (0, 10)) self.assert_equals(0, line.slope) # TODO: make sure points can be instructed with times and floats
def test_can_initialize_line_from_two_tupples(self): line = Line.from_two_tupples((0, 0), (1, 1)) self.assert_equals(Point(0, 0), line.point) self.assert_equals(1, line.slope)
def _calculate_ideal_burndown_at_datetime(self, ideal_data, a_datetime): before, after = _entries_from_timeseries_nearest_to(ideal_data, a_datetime) if before is None or after is None: return 0 return Line.from_two_tupples(before, after).y_from_x(a_datetime)
def test_can_create_line_with_no_slope_from_points(self): line = Line.from_two_tupples((0, 0), (0, 10)) self.assert_equals(0, line.slope)
def test_can_initialize_line_from_two_tupples(self): line = Line.from_two_tupples((0, 0), (1, 1)) self.assert_equals(Point(0, 0), line.point) self.assert_equals(1, line.slope)