Path 1: 5 calls (1.0)

2004 (3) 0 (2)

2 (4) 0 (1)

1 (4) 0 (1)

6 (5)

3 (5)

' 2004\n\n January February March\nMo Tu We Th Fr Sa Su Mo Tu We Th Fr ...

1def formatyear(self, theyear, w=2, l=1, c=6, m=3):
2        """
3        Returns a year's calendar as a multi-line string.
4        """
5        w = max(2, w)
6        l = max(1, l)
7        c = max(2, c)
8        colwidth = (w + 1) * 7 - 1
9        v = []
10        a = v.append
11        a(repr(theyear).center(colwidth*m+c*(m-1)).rstrip())
12        a('\n'*l)
13        header = self.formatweekheader(w)
14        for (i, row) in enumerate(self.yeardays2calendar(theyear, m)):
15            # months in this row
16            months = range(m*i+1, min(m*(i+1)+1, 13))
17            a('\n'*l)
18            names = (self.formatmonthname(theyear, k, colwidth, False)
19                     for k in months)
20            a(formatstring(names, colwidth, c).rstrip())
21            a('\n'*l)
22            headers = (header for k in months)
23            a(formatstring(headers, colwidth, c).rstrip())
24            a('\n'*l)
25            # max number of weeks for this row
26            height = max(len(cal) for cal in row)
27            for j in range(height):
28                weeks = []
29                for cal in row:
30                    if j >= len(cal):
31                        weeks.append('')
32                    else:
33                        weeks.append(self.formatweek(cal[j], w))
34                a(formatstring(weeks, colwidth, c).rstrip())
35                a('\n' * l)
36        return ''.join(v)