Beispiel #1
0
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
Beispiel #2
0
    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)
Beispiel #3
0
 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),
     )