def compute_bounds_xy(lines: typing.List[typing.List[XY]]) -> typing.Tuple[ValueRange, ValueRange]: range_x = ValueRange() range_y = ValueRange() for line in lines: for xy in line: range_x.extend(xy.x) range_y.extend(xy.y) return range_x, range_y
def set_tracks(self, tracks): """Associate the set of tracks with this poster. In addition to setting self.tracks, also compute the necessary attributes for the Poster based on this set of tracks. """ self.tracks = tracks self.tracks_by_date = {} self.length_range = ValueRange() self.length_range_by_date = ValueRange() self.__compute_years(tracks) for track in tracks: if not self.years.contains(track.start_time): continue text_date = track.start_time.strftime("%Y-%m-%d") if text_date in self.tracks_by_date: self.tracks_by_date[text_date].append(track) else: self.tracks_by_date[text_date] = [track] self.length_range.extend(track.length) for tracks in self.tracks_by_date.values(): length = sum([t.length for t in tracks]) self.length_range_by_date.extend(length)
def __compute_track_statistics(self): length_range = ValueRange() total_length = 0 weeks = {} for t in self.tracks: total_length += t.length length_range.extend(t.length) # time.isocalendar()[1] -> week number weeks[(t.start_time.year, t.start_time.isocalendar()[1])] = 1 return ( total_length, total_length / len(self.tracks), length_range.lower(), length_range.upper(), len(weeks), )