
    ;e
                     8   d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlZd dl	Z	d dl
Z
d dlZdZdZdZdZ edd	d
          ZdZg dg dg dg dg dgg dg dg dg dg dgg dg dg dg dg dggg dg dg dg dg dgg dg dg dg d g d!g d"gg d#g d$g d%g d&g d'ggg dg dg dg dg dgg dg dg dg dg dg d(gg d)g d*g d+g d,g d-ggg d.g d/g d0g d1g d2gg dg dg dg dg d3gg d)g d*g d+g d,g d4gggZg d5g d6g d7gg d8g d9g d:gg d;g d<g d=gg d>g d?g d@ggZ G dA dBej                  Z G dC dDej                  Z G dE dFej                  Z G dG dHe          Z G dI dJe          Z G dK dLej                  Z G dM dNej                  Z G dO dPej                  ZdQ Z G dR dSej                  Z G dT dUej                  Z  G dV dWej                  Z!e"dXk    r ej#                     dS dS )Y    N)support)assert_python_okassert_python_failurez     February 0
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29
a                                     0

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6             1  2  3  4  5
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       6  7  8  9 10 11 12
10 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 19
17 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 26
24 25 26 27 28 29 30      28 29                     27 28 29 30 31
31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2       1  2  3  4  5  6  7                1  2  3  4
 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6                   1  2  3
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                   1  2  3
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
30 31
z    January 2004
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
a!                                    2004

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1       1  2  3  4  5  6  7
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       8  9 10 11 12 13 14
12 13 14 15 16 17 18       9 10 11 12 13 14 15      15 16 17 18 19 20 21
19 20 21 22 23 24 25      16 17 18 19 20 21 22      22 23 24 25 26 27 28
26 27 28 29 30 31         23 24 25 26 27 28 29      29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                      1  2          1  2  3  4  5  6
 5  6  7  8  9 10 11       3  4  5  6  7  8  9       7  8  9 10 11 12 13
12 13 14 15 16 17 18      10 11 12 13 14 15 16      14 15 16 17 18 19 20
19 20 21 22 23 24 25      17 18 19 20 21 22 23      21 22 23 24 25 26 27
26 27 28 29 30            24 25 26 27 28 29 30      28 29 30
                          31

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1             1  2  3  4  5
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       6  7  8  9 10 11 12
12 13 14 15 16 17 18       9 10 11 12 13 14 15      13 14 15 16 17 18 19
19 20 21 22 23 24 25      16 17 18 19 20 21 22      20 21 22 23 24 25 26
26 27 28 29 30 31         23 24 25 26 27 28 29      27 28 29 30
                          30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
             1  2  3       1  2  3  4  5  6  7             1  2  3  4  5
 4  5  6  7  8  9 10       8  9 10 11 12 13 14       6  7  8  9 10 11 12
11 12 13 14 15 16 17      15 16 17 18 19 20 21      13 14 15 16 17 18 19
18 19 20 21 22 23 24      22 23 24 25 26 27 28      20 21 22 23 24 25 26
25 26 27 28 29 30 31      29 30                     27 28 29 30 31
yearmonthascii)r   r   encodingax;  <?xml version="1.0" encoding="{encoding}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset={encoding}" />
<link rel="stylesheet" type="text/css" href="calendar.css" />
<title>Calendar for 2004</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" class="{year}">
<tr><th colspan="3" class="{year}">2004</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">January</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">February</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">March</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
<tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr>
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">April</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">May</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sat">1</td><td class="sun">2</td></tr>
<tr><td class="mon">3</td><td class="tue">4</td><td class="wed">5</td><td class="thu">6</td><td class="fri">7</td><td class="sat">8</td><td class="sun">9</td></tr>
<tr><td class="mon">10</td><td class="tue">11</td><td class="wed">12</td><td class="thu">13</td><td class="fri">14</td><td class="sat">15</td><td class="sun">16</td></tr>
<tr><td class="mon">17</td><td class="tue">18</td><td class="wed">19</td><td class="thu">20</td><td class="fri">21</td><td class="sat">22</td><td class="sun">23</td></tr>
<tr><td class="mon">24</td><td class="tue">25</td><td class="wed">26</td><td class="thu">27</td><td class="fri">28</td><td class="sat">29</td><td class="sun">30</td></tr>
<tr><td class="mon">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">June</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr>
<tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr>
<tr><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td><td class="sun">20</td></tr>
<tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr>
<tr><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">July</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">August</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">September</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
<tr><td class="mon">13</td><td class="tue">14</td><td class="wed">15</td><td class="thu">16</td><td class="fri">17</td><td class="sat">18</td><td class="sun">19</td></tr>
<tr><td class="mon">20</td><td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td><td class="sat">25</td><td class="sun">26</td></tr>
<tr><td class="mon">27</td><td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">October</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="fri">1</td><td class="sat">2</td><td class="sun">3</td></tr>
<tr><td class="mon">4</td><td class="tue">5</td><td class="wed">6</td><td class="thu">7</td><td class="fri">8</td><td class="sat">9</td><td class="sun">10</td></tr>
<tr><td class="mon">11</td><td class="tue">12</td><td class="wed">13</td><td class="thu">14</td><td class="fri">15</td><td class="sat">16</td><td class="sun">17</td></tr>
<tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr>
<tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">November</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
<tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr>
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">December</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
<tr><td class="mon">13</td><td class="tue">14</td><td class="wed">15</td><td class="thu">16</td><td class="fri">17</td><td class="sat">18</td><td class="sun">19</td></tr>
<tr><td class="mon">20</td><td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td><td class="sat">25</td><td class="sun">26</td></tr>
<tr><td class="mon">27</td><td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="fri">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr></table></body>
</html>
)r   r   r               )            	   
      )                     )                     )                  r   )r   r   r   r   r   r   r
   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r%   r&   )r
   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r    r!   r"   r#   r$   r%   )r&   r'   r(   r   r   r   r   )r#   r$   r%   r&   r'   r   r   )r   r   r   r   r   r
   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r    )r!   r"   r#   r$   r%   r&   r'   )r(   r   r   r   r   r   r   )r   r
   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r    r!   r"   r#   r$   )r%   r&   r'   r   r   r   r   )r'   r(   r   r   r   r   r   )r   r   r
   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r    r!   r"   r#   )r$   r%   r&   r'   r   r   r   )r   r   r   r   r
   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r    r!   )r"   r#   r$   r%   r&   r'   r(   )r&   r'   r   r   r   r   r   )r$   r%   r&   r'   r(   r   r   )z>12/29/03 12/30/03 12/31/03 01/01/04 01/02/04 01/03/04 01/04/04z>01/05/04 01/06/04 01/07/04 01/08/04 01/09/04 01/10/04 01/11/04z>01/12/04 01/13/04 01/14/04 01/15/04 01/16/04 01/17/04 01/18/04z>01/19/04 01/20/04 01/21/04 01/22/04 01/23/04 01/24/04 01/25/04>01/26/04 01/27/04 01/28/04 01/29/04 01/30/04 01/31/04 02/01/04)r)   z>02/02/04 02/03/04 02/04/04 02/05/04 02/06/04 02/07/04 02/08/04z>02/09/04 02/10/04 02/11/04 02/12/04 02/13/04 02/14/04 02/15/04z>02/16/04 02/17/04 02/18/04 02/19/04 02/20/04 02/21/04 02/22/04z>02/23/04 02/24/04 02/25/04 02/26/04 02/27/04 02/28/04 02/29/04)z>03/01/04 03/02/04 03/03/04 03/04/04 03/05/04 03/06/04 03/07/04z>03/08/04 03/09/04 03/10/04 03/11/04 03/12/04 03/13/04 03/14/04z>03/15/04 03/16/04 03/17/04 03/18/04 03/19/04 03/20/04 03/21/04z>03/22/04 03/23/04 03/24/04 03/25/04 03/26/04 03/27/04 03/28/04>03/29/04 03/30/04 03/31/04 04/01/04 04/02/04 04/03/04 04/04/04)r*   z>04/05/04 04/06/04 04/07/04 04/08/04 04/09/04 04/10/04 04/11/04z>04/12/04 04/13/04 04/14/04 04/15/04 04/16/04 04/17/04 04/18/04z>04/19/04 04/20/04 04/21/04 04/22/04 04/23/04 04/24/04 04/25/04>04/26/04 04/27/04 04/28/04 04/29/04 04/30/04 05/01/04 05/02/04)r+   z>05/03/04 05/04/04 05/05/04 05/06/04 05/07/04 05/08/04 05/09/04z>05/10/04 05/11/04 05/12/04 05/13/04 05/14/04 05/15/04 05/16/04z>05/17/04 05/18/04 05/19/04 05/20/04 05/21/04 05/22/04 05/23/04z>05/24/04 05/25/04 05/26/04 05/27/04 05/28/04 05/29/04 05/30/04>05/31/04 06/01/04 06/02/04 06/03/04 06/04/04 06/05/04 06/06/04)r,   z>06/07/04 06/08/04 06/09/04 06/10/04 06/11/04 06/12/04 06/13/04z>06/14/04 06/15/04 06/16/04 06/17/04 06/18/04 06/19/04 06/20/04z>06/21/04 06/22/04 06/23/04 06/24/04 06/25/04 06/26/04 06/27/04>06/28/04 06/29/04 06/30/04 07/01/04 07/02/04 07/03/04 07/04/04)r-   z>07/05/04 07/06/04 07/07/04 07/08/04 07/09/04 07/10/04 07/11/04z>07/12/04 07/13/04 07/14/04 07/15/04 07/16/04 07/17/04 07/18/04z>07/19/04 07/20/04 07/21/04 07/22/04 07/23/04 07/24/04 07/25/04>07/26/04 07/27/04 07/28/04 07/29/04 07/30/04 07/31/04 08/01/04)r.   z>08/02/04 08/03/04 08/04/04 08/05/04 08/06/04 08/07/04 08/08/04z>08/09/04 08/10/04 08/11/04 08/12/04 08/13/04 08/14/04 08/15/04z>08/16/04 08/17/04 08/18/04 08/19/04 08/20/04 08/21/04 08/22/04z>08/23/04 08/24/04 08/25/04 08/26/04 08/27/04 08/28/04 08/29/04>08/30/04 08/31/04 09/01/04 09/02/04 09/03/04 09/04/04 09/05/04)r/   z>09/06/04 09/07/04 09/08/04 09/09/04 09/10/04 09/11/04 09/12/04z>09/13/04 09/14/04 09/15/04 09/16/04 09/17/04 09/18/04 09/19/04z>09/20/04 09/21/04 09/22/04 09/23/04 09/24/04 09/25/04 09/26/04>09/27/04 09/28/04 09/29/04 09/30/04 10/01/04 10/02/04 10/03/04)r0   z>10/04/04 10/05/04 10/06/04 10/07/04 10/08/04 10/09/04 10/10/04z>10/11/04 10/12/04 10/13/04 10/14/04 10/15/04 10/16/04 10/17/04z>10/18/04 10/19/04 10/20/04 10/21/04 10/22/04 10/23/04 10/24/04z>10/25/04 10/26/04 10/27/04 10/28/04 10/29/04 10/30/04 10/31/04)z>11/01/04 11/02/04 11/03/04 11/04/04 11/05/04 11/06/04 11/07/04z>11/08/04 11/09/04 11/10/04 11/11/04 11/12/04 11/13/04 11/14/04z>11/15/04 11/16/04 11/17/04 11/18/04 11/19/04 11/20/04 11/21/04z>11/22/04 11/23/04 11/24/04 11/25/04 11/26/04 11/27/04 11/28/04>11/29/04 11/30/04 12/01/04 12/02/04 12/03/04 12/04/04 12/05/04)r1   z>12/06/04 12/07/04 12/08/04 12/09/04 12/10/04 12/11/04 12/12/04z>12/13/04 12/14/04 12/15/04 12/16/04 12/17/04 12/18/04 12/19/04z>12/20/04 12/21/04 12/22/04 12/23/04 12/24/04 12/25/04 12/26/04z>12/27/04 12/28/04 12/29/04 12/30/04 12/31/04 01/01/05 01/02/05c                   z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )OutputTestCasec                     d }g }|                     d          D ])}|r%t          ||          s|                    |           *|S )Nc                 V    |                                   o|                                  S N)isspaceisdigit)cs    )/usr/lib/python3.11/test/test_calendar.pyneitherspacenordigitz?OutputTestCase.normalize_calendar.<locals>.neitherspacenordigits  s!    yy{{?6199;;6    F)keepends)
splitlinesfilterappend)selfsr;   lineslines        r:   normalize_calendarz!OutputTestCase.normalize_calendarq  sg    	7 	7 	7 LL%L00 	# 	#D #F#7>> #T"""r<   c                 
   t          j                    }t                                          }|pd|d<   |                    d|          }|                     |t          j        di |                    |                     d S )Nutf-8r	     )r	    )	calendarHTMLCalendardefault_formatcopyformatyearpageassertEqualresult_2004_htmlformatencode)rA   reqrescalformat_outputs         r:   check_htmlcalendar_encodingz*OutputTestCase.check_htmlcalendar_encoding}  s    #%% %%''!nW
##D3#77#..g..55c::	
 	
 	
 	
 	
r<   c                 R   |                      |                     t          j        d                    |                     t                               |                      |                     t          j        d                    |                     t                               d S NrH   r   )rO   rE   rJ   result_2004_textresult_0_textrA   s    r:   test_outputzOutputTestCase.test_output  s    ##H$5d$;$;<<##$455	
 	
 	
 	##H$5a$8$899##M22	
 	
 	
 	
 	
r<   c                    |                      t          j                                        d          t                     |                      t          j                                        d          t
                     d S rZ   )rO   rJ   TextCalendar
formatyearr[   r\   r]   s    r:   test_output_textcalendarz'OutputTestCase.test_output_textcalendar  sx    !##..t44	
 	
 	
 	!##..q11	
 	
 	
 	
 	
r<   c                 2    |                      dd           d S )Nr   rX   r]   s    r:   'test_output_htmlcalendar_encoding_asciiz6OutputTestCase.test_output_htmlcalendar_encoding_ascii      ((':::::r<   c                 2    |                      dd           d S )NrG   rd   r]   s    r:   &test_output_htmlcalendar_encoding_utf8z5OutputTestCase.test_output_htmlcalendar_encoding_utf8  rf   r<   c                 T    |                      d t          j                               d S r6   )rX   sysgetdefaultencodingr]   s    r:   )test_output_htmlcalendar_encoding_defaultz8OutputTestCase.test_output_htmlcalendar_encoding_default  s'    ((s/E/G/GHHHHHr<   c                     d }|                       |t          j                                        d                    t                     d S )Nc                     d | D             S )Nc                 &    g | ]}d  |D             S )c                 &    g | ]}d  |D             S )c                 L    g | ]!}d                      d |D                       "S ) c              3      K   | ]?}d                      |j        |j        t          |j                  dd                   V  @dS )z{:02d}/{:02d}/{}N)rQ   r   daystrr   .0ds     r:   	<genexpr>ziOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>.<genexpr>  sl       N NFG  288 !AFBCC0@ B  B N N N N N Nr<   )join)rx   zs     r:   
<listcomp>z_OutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>  sY     ( ( ( ! hh N NKLN N N N N ( ( (r<   rI   )rx   ys     r:   r}   zTOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>  s?     4 4 4,-( (%&( ( ( 4 4 4r<   rI   )rx   xs     r:   r}   zIOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>  sE     B B B894 4124 4 4 B B Br<   rI   )rU   s    r:   shrinkz5OutputTestCase.test_yeardatescalendar.<locals>.shrink  s)    B B=@B B B Br<   rH   )rO   rJ   Calendaryeardatescalendarresult_2004_dates)rA   r   s     r:   test_yeardatescalendarz%OutputTestCase.test_yeardatescalendar  s_    	B 	B 	B 	F8$&&88>>??	
 	
 	
 	
 	
r<   c                     |                      t          j                                        d          t                     d S NrH   )rO   rJ   r   yeardayscalendarresult_2004_daysr]   s    r:   test_yeardayscalendarz$OutputTestCase.test_yeardayscalendar  sA    0066	
 	
 	
 	
 	
r<   c                 z    |                      t          j                                        d          d           d S )Nr   zMo Tu We Th Fr Sa SurO   rJ   r`   formatweekheaderr]   s    r:   test_formatweekheader_shortz*OutputTestCase.test_formatweekheader_short  sA    !##44Q77"	
 	
 	
 	
 	
r<   c                 z    |                      t          j                                        d          d           d S )Nr   zE  Monday   Tuesday  Wednesday  Thursday   Friday   Saturday   Sunday r   r]   s    r:   test_formatweekheader_longz)OutputTestCase.test_formatweekheader_long  sC    !##44Q77,	
 	
 	
 	
 	
r<   c                    |                      t          j                                        dd          t                     |                      t          j                                        dd          t
                     d S )NrH   r
   r   r   )rO   rJ   r`   formatmonthresult_2004_01_textresult_0_02_textr]   s    r:   test_formatmonthzOutputTestCase.test_formatmonth  s|    !##//a88	
 	
 	
 	!##//155	
 	
 	
 	
 	
r<   c                     |                      t          j                                        ddd          d           d S )NrH   r
   Twithyearz8<tr><th colspan="7" class="month">January 2004</th></tr>rO   rJ   rK   formatmonthnamer]   s    r:   test_formatmonthname_with_yearz-OutputTestCase.test_formatmonthname_with_year  sH    !##33D!d3KKF	
 	
 	
 	
 	
r<   c                     |                      t          j                                        ddd          d           d S )NrH   r
   Fr   z3<tr><th colspan="7" class="month">January</th></tr>r   r]   s    r:   !test_formatmonthname_without_yearz0OutputTestCase.test_formatmonthname_without_year  sH    !##33D!e3LLA	
 	
 	
 	
 	
r<   c                    t          j                    5 }g d}t          j                                        |d           |                     |                                d           d d d            d S # 1 swxY w Y   d S )N))r
   r   )r   r
   )r   r   )r   r   )r   r   )r   r   )r   r   r
   z 1  2  3  4  5  6  7)r   captured_stdoutrJ   r`   prweekrO   getvalue)rA   outweeks      r:   test_prweekzOutputTestCase.test_prweek  s    $&& 	E#DDDD!##**4333S\\^^-CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E   AA55A9<A9c                    t          j                    5 }t          j                                        dd           |                     |                                t                     d d d            d S # 1 swxY w Y   d S )NrH   r
   )r   r   rJ   r`   prmonthrO   r   r   rA   r   s     r:   test_prmonthzOutputTestCase.test_prmonth  s    $&& 	B#!##++D!444S\\^^-@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AA66A:=A:c                    t          j                    5 }t          j                                        d           |                     |                                t                     d d d            d S # 1 swxY w Y   d S r   )r   r   rJ   r`   pryearrO   r   r[   r   s     r:   test_pryearzOutputTestCase.test_pryear  s    $&& 	?#!##**4000S\\^^-=>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?r   c                    t          j                    5 }t          j        g ddd           |                     |                                                                d           d d d            d S # 1 swxY w Y   d S )N)123r   r
   )colwidthspacingz	1   2   3)r   r   rJ   rQ   rO   r   stripr   s     r:   test_formatzOutputTestCase.test_format  s    $&& 	B#OOOOaCCCCS\\^^1133[AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Br   N)__name__
__module____qualname__rE   rX   r^   rb   re   rh   rl   r   r   r   r   r   r   r   r   r   r   r   rI   r<   r:   r3   r3   p  s0       
 
 

 
 

 
 

 
 
; ; ;; ; ;I I I
 
 

 
 

 
 

 
 

 
 

 
 

 
 
E E EB B B
? ? ?
B B B B Br<   r3   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )CalendarTestCasec                 F   |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           d S )Ni  r
     r   i  i  )rO   rJ   isleapr]   s    r:   test_isleapzCalendarTestCase.test_isleap  s    
 	..222..222..222..22222r<   c                 t   |                      t          t          j        d           |                      t          t          j        d           |                      t          t          j        d           t          j                    }t          j        t          j                   |                     t          j                    t          j                   t          j        t          j                   |                     t          j                    t          j                   t          j        |           d S )Nflabber   )	assertRaises	TypeErrorrJ   setfirstweekday
ValueErrorfirstweekdaySUNDAYrO   MONDAY)rA   origs     r:   test_setfirstweekdayz%CalendarTestCase.test_setfirstweekday  s    )X%=yIII*h&>CCC*h&>DDD$&& 111.00(/BBB 111.00(/BBB &&&&&r<   c                     |                      t          j        d          5  t          j        d           d d d            d S # 1 swxY w Y   d S )N123{   )assertRaisesRegexrJ   IllegalWeekdayErrorr   r]   s    r:   test_illegal_weekday_reportedz.CalendarTestCase.test_illegal_weekday_reported  s    ##H$@%HH 	* 	*$S)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AA
Ac                     |                      t          t          j        j        d           |                      t          t          j        j        d           |                     t          d t          j        D                       d           d S )Nir   c                     g | ]}|S rI   rI   rw   s     r:   r}   z<CalendarTestCase.test_enumerate_weekdays.<locals>.<listcomp>	  s    ;;;Aa;;;r<   r   )r   
IndexErrorrJ   day_abbr__getitem__day_namerO   lenr]   s    r:   test_enumerate_weekdaysz(CalendarTestCase.test_enumerate_weekdays  st    *h&7&CSIII*h&7&CRHHH;;):;;;<<a@@@@@r<   c           	         dD ]}t          t          |          }|                     t          |          d           |                     t          |d d                    d           |                     t          t	          |                    d           |                     |d d d         t          t          |                               d S )N)r   r   r   r   getattrrJ   rO   r   setlistreversedrA   attrvalues      r:   	test_dayszCalendarTestCase.test_days  s    * 	A 	ADHd++ESZZ+++Sqqq]]A...SU__a000U44R4[$x*?*?@@@@	A 	Ar<   c           	         dD ]}t          t          |          }|                     t          |          d           |                     t          |d d                    d           |                     |d         d           |                     t          t	          |                    d           |                     |d d d         t          t          |                               d S )N)
month_name
month_abbrr   r    r   r   r   s      r:   test_monthszCalendarTestCase.test_months  s    . 	A 	ADHd++ESZZ,,,Sqqq]]B///U1Xr***SU__b111U44R4[$x*?*?@@@@	A 	Ar<   c                    t          j                                        ddd          }	 t          j        d          }|                    dd          }|                    ddd          }n'# t
          j        $ r t          j        d          w xY w| 	                    |t                     | 	                    |t                     |                     t          |          d           |                     t          |          d           t          j        d          }|                    d          }|                    dd          }| 	                    |t                     | 	                    |t                     t          j                                        ddd          }|                     ||           d S )N  r   r   localer
   $cannot set the system default locale)rJ   r`   r   LocaleTextCalendarformatweekdayr   ErrorunittestSkipTestassertIsInstancerv   rO   r   assertGreaterEqualLocaleHTMLCalendar)rA   old_octoberrU   local_weekdaylocal_monthnew_octobers         r:   test_locale_calendarsz&CalendarTestCase.test_locale_calendars   s    +--==dBKK	L-R888C--a44M--dB;;KK| 	L 	L 	L#$JKKK	L 	mS111k3///]++R000K 0 0"555)444))!,,))$33mS111k3///+--==dBKKk22222s   AA- -$Bc                    	 t          j        d          }|                     |                    dd          d           |                     |                    dd          d           |                     |                    dd          d	           |                     |                    dd
          d           |                     |                    dd          d           |                     |                    dd          d           |                     |                    dd          d           d S # t          j        $ r t          j        d          w xY w)Nen_USr   r   r
   Mr   Mor   Monr   z Mon r   z  Mon   r   z	  Monday r   z
  Monday  zcannot set the en_US locale)rJ   r   rO   r   r   r   r   r   )rA   rU   s     r:   "test_locale_calendar_formatweekdayz3CalendarTestCase.test_locale_calendar_formatweekday7  s^   	C-W===CS..q!44c:::S..q!44d;;;S..q!44e<<<S..q!44g>>>S..q!44jAAAS..q!44kBBBS..q"55|DDDDD| 	C 	C 	C#$ABBB	Cs   D;D? ?$E#c                 D   	 t          j        d          }|                    ddd          }n'# t          j        $ r t          j        d          w xY w|                     d|           d|_        |                    ddd          }|                     d|           d S )	Nr   r   r   r   r   zclass="month"text-center monthclass="text-center month")	rJ   r   r   r   r   r   r   assertIncssclass_month_head)rA   rU   r   s      r:   5test_locale_html_calendar_custom_css_class_month_namezFCalendarTestCase.test_locale_html_calendar_custom_css_class_month_nameH  s    	L-R888C--dB;;KK| 	L 	L 	L#$JKKK	L 	o{333"5))$B771;?????s	   ,/ $Ac                 @   	 t          j        d          }|                    d          }n'# t          j        $ r t          j        d          w xY w|                     d|           g d|_        |                    d          }|                     d|           d S )Nr   r   r   r   zclass="sun")mon2tue2wed2thu2fri2sat2sun2zclass="sun2")	rJ   r   r   r   r   r   r   r  cssclasses_weekday_head)rA   rU   r   s      r:   2test_locale_html_calendar_custom_css_class_weekdayzCCalendarTestCase.test_locale_html_calendar_custom_css_class_weekdayT  s    	L-R888C--a00MM| 	L 	L 	L#$JKKK	L 	m]333&^&^&^#))!,,nm44444s	   *- $Ac                     t          t          j                                        t          j        d                     d S )Nr   )r   rJ   r   itermonthdays3datetimeMAXYEARr]   s    r:   test_itermonthdays3z$CalendarTestCase.test_itermonthdays3`  s2    X  //0@"EEFFFFFr<   c                     t          j        d          }t          |                    dd                    }|                     |d         d           |                     |d         d           d S )	Nr   r   r   r   r   )r   r   r
   r   r   )r   r   r%   r   )rJ   r   r   itermonthdays4rO   )rA   rU   dayss      r:   test_itermonthdays4z$CalendarTestCase.test_itermonthdays4d  sm    Q///C&&tQ//00a/222b#344444r<   c           	         t          d          D ]d}t          j        |          }dD ]K\  }}t          |                    ||                    }|                     t          |          d           Let          j        d          }t          |                    dd                    }|                     |t          t          dd	                               d S )
Nr   )r
   r
   )i'  r   )#   *   r   r  r   r   r
   r&   )rangerJ   r   r   itermonthdaysr  r   rO   rA   r   rU   r~   mr  s         r:   test_itermonthdaysz#CalendarTestCase.test_itermonthdaysj  s    !!HH 	3 	3L#L11C, 3 31C--a3344c$ii22223 Q///C%%dA..//tE!RLL1122222r<   c                 <   t          d          D ]}t          j        |          }dD ]r\  }}t          |                    ||                    }|                     |d         d         |           |                     |d         d         |dz
  dz             sd S )Nr   r  r   r
   r   )r  rJ   r   r   itermonthdays2rO   r  s         r:   test_itermonthdays2z$CalendarTestCase.test_itermonthdays2v  s    !!HH 	F 	FL#L11C, F F1C..q!4455  a\:::  b!|a/?1.DEEEEF	F 	Fr<   c                 "   t          t          d                    }t          d          D ]b}t          j        |          }t          |                                          }||d          |d |         z   }|                     ||           cd S )Nr   )r   r  rJ   r   iterweekdaysrO   )rA   week0r   rU   r   expecteds         r:   test_iterweekdaysz"CalendarTestCase.test_iterweekdays  s    U1XX!!HH 	- 	-L#L11C((**++D\]]+eM\M.BBHT8,,,,		- 	-r<   N)r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!  r$  r)  rI   r<   r:   r   r     s
       3 3 3	' 	' 	'* * *A A A
A A A	A 	A 	A3 3 3.C C C"
@ 
@ 
@
5 
5 
5G G G5 5 5
3 
3 
3F F F- - - - -r<   r   c                        e Zd Zd Zd Zd ZdS )MonthCalendarTestCasec                 h    t          j                    | _        t          j        | j                   d S r6   )rJ   r   oldfirstweekdayr   r]   s    r:   setUpzMonthCalendarTestCase.setUp  s-    '466 !233333r<   c                 8    t          j        | j                   d S r6   )rJ   r   r-  r]   s    r:   tearDownzMonthCalendarTestCase.tearDown  s     !566666r<   c           	      @   t          j        ||          }|                     t          |          t          |                     t	          t          |                    D ];}|                     ||         t          d ||         D                                  <d S )Nc              3   "   K   | ]
}|d k    V  dS )r   NrI   )rx   ru   s     r:   rz   z4MonthCalendarTestCase.check_weeks.<locals>.<genexpr>  s&      *F*F3!8*F*F*F*F*F*Fr<   )rJ   monthcalendarrO   r   r  sum)rA   r   r   weeksrU   is         r:   check_weeksz!MonthCalendarTestCase.check_weeks  s    $T511S3u::...s5zz"" 	H 	HAU1Xs*F*Fs1v*F*F*F'F'FGGGG	H 	Hr<   N)r   r   r   r.  r0  r7  rI   r<   r:   r+  r+    sF        4 4 47 7 7H H H H Hr<   r+  c                   .    e Zd Zej        Zd Zd Zd ZdS )MondayTestCasec                    |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           |                      ddd           d S )N  r   r   r   r   r   i  r   r   r   r   r
     r
   r   r   r   r     r   r   r   r   r
   i  r   r   r   r   r   rH   r
   r   r   r   r   r7  r]   s    r:   test_februaryzMondayTestCase.test_february      q,/// 	q/222 	q/222 	q/222 	q/222 	q/22222r<   c                     |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           d S )Ni  r   r   r   r   r   r   i  r   r   r   r   r   i  r
   r   r   r   r   r
     r   r   r   r   r   i  r   r   r   r   r   rD  r]   s    r:   
test_aprilzMondayTestCase.test_april      q/222 	q/222 	q"4555 	q/222 	q/22222r<   c                    |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           |                      ddd           d S )Ni  r   r   r   r   r   r   r>  r   r   r   r   r   i  r
   r   r   r   r   r   r@  r   r   r   r   r     r   r   r   r   r   i  r   r   r   r   r   r
   rD  r]   s    r:   test_decemberzMondayTestCase.test_december      r?333 	r?333 	r#5666 	r?333 	r?333 	r#566666r<   N)	r   r   r   rJ   r   r   rE  rN  rX  rI   r<   r:   r9  r9    H        ?L3 3 3&3 3 3 7 7 7 7 7r<   r9  c                   .    e Zd Zej        Zd Zd Zd ZdS )SundayTestCasec                    |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           |                      ddd           d S )Ni  r   r<  r;  r=    r?  rH   rA    rB  i  rC  rD  r]   s    r:   rE  zSundayTestCase.test_february  rF  r<   c                     |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           d S )N  r   rH  i~  rI  i  rJ  r_  rL  iu  rM  rD  r]   s    r:   rN  zSundayTestCase.test_april  rO  r<   c                    |                      ddd           |                      ddd           |                      ddd           |                      ddd	           |                      d
dd           |                      ddd           d S )Ni   r   rQ  i  rR  ra  rS  i  rT  i  rV  rK  rW  rD  r]   s    r:   rX  zSundayTestCase.test_december  rY  r<   N)	r   r   r   rJ   r   r   rE  rN  rX  rI   r<   r:   r\  r\    rZ  r<   r\  c                       e Zd Zg dZd ZdS )TimegmTestCase)
r   r   d   i  i'  i i@B iIi ;=Ki
Lc                     | j         D ]>}t          j        |          }|                     |t	          j        |                     ?d S r6   )
TIMESTAMPStimegmtimerO   rJ   timegm)rA   secstuples      r:   test_timegmzTimegmTestCase.test_timegm  sO    O 	; 	;DK%%ET8?5#9#9::::	; 	;r<   N)r   r   r   rg  rm  rI   r<   r:   rd  rd  
  s4        7 7 7J; ; ; ; ;r<   rd  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	MonthRangeTestCasec                 X    |                      t          j        dd          d           d S )NrH   r
   )r   r(   rO   rJ   
monthranger]   s    r:   test_januaryzMonthRangeTestCase.test_january  +    ,T!44f=====r<   c                 X    |                      t          j        dd          d           d S )NrH   r   )r   r&   rq  r]   s    r:   test_february_leapz%MonthRangeTestCase.test_february_leap  rt  r<   c                 X    |                      t          j        dd          d           d S )Nr   r   )r   r%   rq  r]   s    r:   test_february_nonleapz(MonthRangeTestCase.test_february_nonleap  rt  r<   c                 X    |                      t          j        dd          d           d S )NrH   r   )r   r(   rq  r]   s    r:   rX  z MonthRangeTestCase.test_december  s+    ,T"55v>>>>>r<   c                     |                      t          j                  5  t          j        dd           d d d            d S # 1 swxY w Y   d S rZ   r   rJ   IllegalMonthErrorrr  r]   s    r:   test_zeroth_monthz$MonthRangeTestCase.test_zeroth_month#  s    x9:: 	) 	)a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   AA
Ac                     |                      t          j                  5  t          j        dd           d d d            d S # 1 swxY w Y   d S )NrH   r   r{  r]   s    r:   test_thirteenth_monthz(MonthRangeTestCase.test_thirteenth_month(  s    x9:: 	* 	*b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*r~  c                     |                      t          j        d          5  t          j        dd           d d d            d S # 1 swxY w Y   d S )N65rH   A   )r   rJ   r|  rr  r]   s    r:   test_illegal_month_reportedz.MonthRangeTestCase.test_illegal_month_reported-  s    ##H$>EE 	* 	*b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AAAN)
r   r   r   rs  rv  rx  rX  r}  r  r  rI   r<   r:   ro  ro    s}        > > >> > >> > >? ? ?) ) )
* * *
* * * * *r<   ro  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )LeapdaysTestCasec                 X    |                      t          j        dd          d           d S )Nr   r   rO   rJ   leapdaysr]   s    r:   test_no_rangezLeapdaysTestCase.test_no_range2  +    *455q99999r<   c                 X    |                      t          j        dd          d           d S )Nr   i  r   r  r]   s    r:   test_no_leapdaysz!LeapdaysTestCase.test_no_leapdays6  r  r<   c                 X    |                      t          j        dd          d           d S )Nr     r   r  r]   s    r:   test_no_leapdays_upper_boundaryz0LeapdaysTestCase.test_no_leapdays_upper_boundary:  r  r<   c                 X    |                      t          j        dd          d           d S )Nr  i  r
   r  r]   s    r:   test_one_leapday_lower_boundaryz0LeapdaysTestCase.test_one_leapday_lower_boundary>  r  r<   c                 X    |                      t          j        dd          d           d S )Nr^  i  r   r  r]   s    r:   test_several_leapyears_in_rangez0LeapdaysTestCase.test_several_leapyears_in_rangeB  s+    *455q99999r<   N)r   r   r   r  r  r  r  r  rI   r<   r:   r  r  1  s_        : : :: : :: : :: : :: : : : :r<   r  c                 f    |                      dt          j                                                  S )N
)replaceoslineseprR   )rB   s    r:   convr  F  s$    99T2:&&--///r<   c                   t    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )CommandLineTestCasec                 *    t          ddg|R  d         S )N-mrJ   r
   )r   )rA   argss     r:   run_okzCommandLineTestCase.run_okJ  s    j84888;;r<   c                     t          ddg|R  \  }}}|                     d|           |                     |d           d S )Nr  rJ      usage:r   )r   r  rO   )rA   r  rcstdoutstderrs        r:   assertFailurez!CommandLineTestCase.assertFailureM  sP    24KdKKKFFi(((Qr<   c                     |                      d          }|                     d|           |                     d|           |                     d|           d S )Nz-hr  s   calendar.pys   --help)r  r  rA   r  s     r:   	test_helpzCommandLineTestCase.test_helpR  sU    T""i(((nf---i(((((r<   c                     |                      d           |                      d           |                      dd           |                      dddd           d S )Nz-zspam2004-thtmlr   )r  r]   s    r:   test_illegal_argumentsz*CommandLineTestCase.test_illegal_argumentsX  s`    4   6"""66***455555r<   c                 "   |                                  }t          j                                        j        }|                     d|z                                  |           |                     d|           |                     d|           d S )Nz %ss   Januarys   Mo Tu We Th Fr Sa Sur  r  nowr   r  rR   rA   r  r   s      r:   test_output_current_yearz,CommandLineTestCase.test_output_current_year^  sy     $$&&+ut|++--v666j&)))-v66666r<   c                     |                      d          }|                     |t          t                               d S )Nr  )r  rO   r  r[   r  s     r:   test_output_yearz$CommandLineTestCase.test_output_yeare  s8    V$$&6!7!788888r<   c                     |                      dd          }|                     |t          t                               d S )Nr  r   )r  rO   r  r   r  s     r:   test_output_monthz%CommandLineTestCase.test_output_monthi  s:    VS))&9!:!:;;;;;r<   c                     |                      d           |                      d           |                     ddd          }|                     |t                              d                     d S )Nz-e
--encodingz	utf-16-ler  )r  r  rO   r[   rR   r  s     r:   test_option_encodingz(CommandLineTestCase.test_option_encodingm  sj    4   <(((\;??!1!8!8!E!EFFFFFr<   c                    |                      d           |                      d           |                      dd           t          j                    \  }}|pd}|pd}	 t          j        t          j                  }	 t          j        t          j        ||f           t          j        t          j        |           n$# t          j        t          j        |           w xY wn1# t          j        t          f$ r |                     d           Y nw xY w|                     d|d|d          }| 	                    d
                    |          |           d S )	Nz-Lz--localeenCzUTF-8r   r  r  )r  r   	getlocaleLC_TIME	setlocaler   r   skipTestr  r  rR   )rA   langenc	oldlocaler  s        r:   test_option_localez&CommandLineTestCase.test_option_locales  sN   4   :&&&4&&&$&&	c{snW	B(88I< $=== ;;;; ;;;;;j) 	B 	B 	BMM@AAAAA	BZ|S&IIfmmC((&11111s*    C% ?!C    C%  !C!!C% %+DDc                     |                      d           |                      d           |                      dd           |                     ddd          }|                     d|           d S )Nz-wz--widthr  r   r  s   Mon Tue Wed Thu Fri Sat Sunr  r  r  r  s     r:   test_option_widthz%CommandLineTestCase.test_option_width  sp    4   9%%%4(((YV444f=====r<   c                     |                      d           |                      d           |                      dd           |                     ddd          }|                     t          d          |           d S )Nz-lz--linesr  r   r  zDecember

Mo Tu Wer  r  r  r  r  s     r:   test_option_linesz%CommandLineTestCase.test_option_lines  sx    4   9%%%4(((YV44d122F;;;;;r<   c                     |                      d           |                      d           |                      dd           |                     ddd          }|                     d|           d S )Nz-sz	--spacingr  8r  s   Su        Mor  r  s     r:   test_option_spacingz'CommandLineTestCase.test_option_spacing  so    4   ;'''4((([#v66ov.....r<   c                     |                      d           |                      d           |                      dd           |                     ddd          }|                     t          d          |           d S )Nr  z--monthr  z--monthsr   r  z
Mo Tu We Th Fr Sa Su
r  r  s     r:   test_option_monthsz&CommandLineTestCase.test_option_months  sx    4   9%%%4(((Zf55d566?????r<   c                    |                      d           |                      d           |                      dd           |                     ddd          }|                     |t          t                               |                     ddd          }|                     |d d         d           |                     d	|           d S )
Nr  --typer  textr  r  r   s   <?xml s    <title>Calendar for 2004</title>)r  r  rO   r  r[   r  r  s     r:   test_option_typez$CommandLineTestCase.test_option_type  s    4   8$$$4(((Xvv66&6!7!7888Xvv66Y///96BBBBBr<   c                     |                      dd          }t          j                                        j        }|                     d|z                                  |           |                     d|           d S )Nr  r  z<title>Calendar for %s</title>s3   <tr><th colspan="7" class="month">January</th></tr>r  r  s      r:   test_html_output_current_yearz1CommandLineTestCase.test_html_output_current_year  s    Xv.. $$&&+7$>FFHH	 	 	L	 	 	 	 	r<   c                     |                      ddddd          }|                     |t          j        di t                              d                     d S )Nr  r  r  r   r  rI   )r  rO   rP   rQ   rL   rR   r  s     r:   test_html_output_year_encodingz2CommandLineTestCase.test_html_output_year_encoding  sf    T6<&II)0BB>BBII'RR	T 	T 	T 	T 	Tr<   c                     |                      ddd           |                      ddd           |                     ddddd          }|                     d|           d S )Nr  r  z-cz--cssz
custom.cssr  s;   <link rel="stylesheet" type="text/css" href="custom.css" />r  r  s     r:   test_html_output_year_cssz-CommandLineTestCase.test_html_output_year_css  ss    4...4111T67L&II ./5	7 	7 	7 	7 	7r<   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rI   r<   r:   r  r  I  s       < < <     
) ) )6 6 67 7 79 9 9< < <G G G2 2 2&> > >< < </ / /@ @ @C C C  T T T
7 7 7 7 7r<   r  c                       e Zd Zd ZdS )MiscTestCasec                 F    h d}t          j        | t          |           d S )N>   r9   mainr   EPOCHmdaysrQ   r   JanuaryFebruarymonthlen	nextmonth	prevmonthformatstringdifferent_locale)not_exported)r   check__all__rJ   )rA   r  s     r:   test__all__zMiscTestCase.test__all__  s6    J J J 	T8,GGGGGGr<   N)r   r   r   r  rI   r<   r:   r  r    s(        H H H H Hr<   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSubClassingCasec                 T     G d dt           j                  } |            | _        d S )Nc                   R    e Zd Zd ej        j        D             Zg dZdZdZdZ	dZ
dS )0TestSubClassingCase.setUp.<locals>.CustomHTMLCalc                     g | ]}|d z   S )z text-nowraprI   )rx   styles     r:   r}   z;TestSubClassingCase.setUp.<locals>.CustomHTMLCal.<listcomp>  s)     < < <U%.0 < < <r<   )redbluegreenlilacyelloworangepinkztext-center month-headr   ztext-italic zlead N)r   r   r   rJ   rK   
cssclassesr  r  cssclass_monthcssclass_yearcssclass_year_headrI   r<   r:   CustomHTMLCalr    s_        < <"/:< < <J'C 'C 'C#":0N*M!(r<   r  )rJ   rK   rU   )rA   r  s     r:   r.  zTestSubClassingCase.setUp  sB    	) 	) 	) 	) 	)H1 	) 	) 	) !=??r<   c                 d    |                      d| j                            dd                     d S )Nzclass="text-center month-head"rU  r   )r  rU   r   r]   s    r:   test_formatmonthnamez(TestSubClassingCase.test_formatmonthname  s:    6h..tQ77	9 	9 	9 	9 	9r<   c                 d    |                      d| j                            dd                     d S )Nr  rU  r   )r  rU   r   r]   s    r:   r   z$TestSubClassingCase.test_formatmonth  s:    1h**433	5 	5 	5 	5 	5r<   c                     | j                             dd          }|                     d| j                             |d                              d S )NrU  r   zclass="wed text-nowrap"r   )rU   monthdays2calendarr  
formatweek)rA   r5  s     r:   test_formatweekz#TestSubClassingCase.test_formatweek  sH    ++D!44/1D1DU1X1N1NOOOOOr<   c                     | j                                         }| j         j        D ]}|                     d|z  |           d S )Nz<th class="%s">)rU   r   r  r  )rA   headercolors      r:   test_formatweek_headz(TestSubClassingCase.test_formatweek_head  sP    **,,X5 	= 	=EMM+e3V<<<<	= 	=r<   c                 |    |                      d| j        j        z  | j                            d                     d S )Nz=<table border="0" cellpadding="0" cellspacing="0" class="%s">rU  )r  rU   r  ra   r]   s    r:   test_format_yearz$TestSubClassingCase.test_format_year  sJ    LX#$&*h&9&9$&?&?	A 	A 	A 	A 	Ar<   c                     |                      dd| j        j        dfz  | j                            d                     d S )Nz,<tr><th colspan="%d" class="%s">%s</th></tr>r   rU  )r  rU   r  ra   r]   s    r:   test_format_year_headz)TestSubClassingCase.test_format_year_head  sT    Dtx*DH2 23783F3Ft3L3L	N 	N 	N 	N 	Nr<   N)
r   r   r   r.  r   r   r  r	  r  r  rI   r<   r:   r  r    s        # # #9 9 95 5 5P P P= = =
A A A
N N N N Nr<   r  __main__)$rJ   r   testr   test.support.script_helperr   r   rh  r   rj   r  r  r   r\   r   r[   dictrL   rP   r   r   TestCaser3   r   r+  r9  r\  rd  ro  r  r  r  r  r  r   r  rI   r<   r:   <module>r     s           N N N N N N N N   



  				 %N $ N 67CCC{ | """"""!!!	#
 !!!""""""	$
    """"""	 ! """"""   	"
 """"""""" """"""	 !  """"""!!!	#
 !!!"""""" """"""	!"  """""""""	$
    """"""	
 """"""   	"#a? DI I I
I I I
I I IJI I I
I I II I IJ I I I
I I II I IJ I I I
I I I
I I IJ_=K BzB zB zB zB zBX& zB zB zBxY- Y- Y- Y- Y-x( Y- Y- Y-xH H H H HH- H H H77 77 77 77 77* 77 77 77t77 77 77 77 77* 77 77 77r; ; ; ; ;X& ; ; ;* * * * ** * * *>: : : : :x( : : :*0 0 0u7 u7 u7 u7 u7(+ u7 u7 u7pH H H H H8$ H H H(N (N (N (N (N(+ (N (N (NT zHMOOOOO r<   