
    daf                     P   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 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jH                          yy)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                   x    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y)OutputTestCasec                     d }g }|j                  d      D ]#  }|st        ||      r|j                  |       % |S )Nc                 J    | j                          xr | j                          S N)isspaceisdigit)cs    -/root/Python-3.12.4/Lib/test/test_calendar.pyneitherspacenordigitz?OutputTestCase.normalize_calendar.<locals>.neitherspacenordigitt  s    yy{?6199;6    F)keepends)
splitlinesfilterappend)selfsr;   lineslines        r:   normalize_calendarz!OutputTestCase.normalize_calendarr  sH    	7 LL%L0 	#DF#7>T"	# r<   c                     t        j                         }t        j                         }|xs d|d<   |j	                  d|      }| j                  |t        j                  di |j                  |             y )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~  sn    ##% %%'!nW
##D3#7##.g.55c:	
r<   c                     | j                  | j                  t        j                  d            | j                  t                     | j                  | j                  t        j                  d            | j                  t                     y NrH   r   )rO   rE   rJ   result_2004_textresult_0_textrA   s    r:   test_outputzOutputTestCase.test_output  so    ##H$5$5d$;<##$45	
 	##H$5$5a$89##M2	
r<   c                     | j                  t        j                         j                  d      t               | j                  t        j                         j                  d      t
               y rZ   )rO   rJ   TextCalendar
formatyearr[   r\   r]   s    r:   test_output_textcalendarz'OutputTestCase.test_output_textcalendar  sT    !!#..t4	
 	!!#..q1	
r<   c                 (    | j                  dd       y )Nr   rX   r]   s    r:   'test_output_htmlcalendar_encoding_asciiz6OutputTestCase.test_output_htmlcalendar_encoding_ascii      ((':r<   c                 (    | j                  dd       y )NrG   rd   r]   s    r:   &test_output_htmlcalendar_encoding_utf8z5OutputTestCase.test_output_htmlcalendar_encoding_utf8  rf   r<   c                 L    | j                  d t        j                                y r6   )rX   sysgetdefaultencodingr]   s    r:   )test_output_htmlcalendar_encoding_defaultz8OutputTestCase.test_output_htmlcalendar_encoding_default  s    ((s/E/E/GHr<   c                     d }| j                   |t        j                         j                  d            t               y )Nc                     | D cg c]8  }|D cg c](  }|D cg c]  }dj                  d |D               c}* c}}: c}}}S c c}w c c}}w c c}}}w )N c              3      K   | ]A  }d j                  |j                  |j                  t        |j                        dd        C yw)z{:02d}/{:02d}/{}N)rQ   r   daystrr   ).0ds     r:   	<genexpr>zHOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<genexpr>  sD      NFG  288 !AFFBC0@ B Ns   AA	)join)rU   xyzs       r:   shrinkz5OutputTestCase.test_yeardatescalendar.<locals>.shrink  sr     >AB B894,-Q( ! hh NKLN N ( 4 B B ( 4 Bs%   
A	AA	AA	AArH   )rO   rJ   Calendaryeardatescalendarresult_2004_dates)rA   r{   s     r:   test_yeardatescalendarz%OutputTestCase.test_yeardatescalendar  s7    	B 	8$$&88>?	
r<   c                 r    | j                  t        j                         j                  d      t               y NrH   )rO   rJ   r|   yeardayscalendarresult_2004_daysr]   s    r:   test_yeardayscalendarz$OutputTestCase.test_yeardayscalendar  s*    006	
r<   c                 j    | j                  t        j                         j                  d      d       y )Nr   zMo Tu We Th Fr Sa SurO   rJ   r`   formatweekheaderr]   s    r:   test_formatweekheader_shortz*OutputTestCase.test_formatweekheader_short  s*    !!#44Q7"	
r<   c                 j    | j                  t        j                         j                  d      d       y )Nr   zE  Monday   Tuesday  Wednesday  Thursday   Friday   Saturday   Sunday r   r]   s    r:   test_formatweekheader_longz)OutputTestCase.test_formatweekheader_long  s,    !!#44Q7,	
r<   c                     | j                  t        j                         j                  dd      t               | j                  t        j                         j                  dd      t
               y )NrH   r
   r   r   )rO   rJ   r`   formatmonthresult_2004_01_textresult_0_02_textr]   s    r:   test_formatmonthzOutputTestCase.test_formatmonth  sX    !!#//a8	
 	!!#//15	
r<   c                 p    | j                  t        j                         j                  ddd      d       y )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  s1    !!#33D!d3KF	
r<   c                 p    | j                  t        j                         j                  ddd      d       y )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  s1    !!#33D!e3LA	
r<   c                     t        j                         5 }g d}t        j                         j	                  |d       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)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#DD!!#**43S\\^-CD	E 	E 	E   A	A''A0c                     t        j                         5 }t        j                         j	                  dd       | j                  |j                         t               d d d        y # 1 sw Y   y xY w)NrH   r
   )r   r   rJ   r`   prmonthrO   r   r   rA   r   s     r:   test_prmonthzOutputTestCase.test_prmonth  sY    $$& 	B#!!#++D!4S\\^-@A	B 	B 	Br   c                     t        j                         5 }t        j                         j	                  d       | j                  |j                         t               d d d        y # 1 sw Y   y xY wr   )r   r   rJ   r`   pryearrO   r   r[   r   s     r:   test_pryearzOutputTestCase.test_pryear  sS    $$& 	?#!!#**40S\\^-=>	? 	? 	?s   AA&&A/c                     t        j                         5 }t        j                  g ddd       | j	                  |j                         j                         d       d d d        y # 1 sw Y   y xY w)N)123r   r
   )colwidthspacingz	1   2   3)r   r   rJ   rQ   rO   r   stripr   s     r:   test_formatzOutputTestCase.test_format  sX    $$& 	B#OOOaCS\\^113[A	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   q  s`    



;;I






EB
?
Br<   r3   c                   l    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y)CalendarTestCasec                 z    | j                  t        d      5  t        j                   d d d        y # 1 sw Y   y xY w)Nz<The 'January' attribute is deprecated, use 'JANUARY' instead)assertWarnsRegexDeprecationWarningrJ   Januaryr]   s    r:   test_deprecation_warningz)CalendarTestCase.test_deprecation_warning  s6    ""J
 	 		 	 	s   1:c                 ,   | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       | j                  t        j                  d      d       y )Ni  r
     r   i  i  )rO   rJ   isleapr]   s    r:   test_isleapzCalendarTestCase.test_isleap  sh    
 	.2.2.2.2r<   c                    | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  d       t        j
                         }t        j                  t        j                         | j                  t        j
                         t        j                         t        j                  t        j                         | j                  t        j
                         t        j                         t        j                  |       y )Nflabber   )	assertRaises	TypeErrorrJ   setfirstweekday
ValueErrorfirstweekdaySUNDAYrO   MONDAY)rA   origs     r:   test_setfirstweekdayz%CalendarTestCase.test_setfirstweekday   s    )X%=%=yI*h&>&>C*h&>&>D$$&  1..0(//B  1..0(//B  &r<   c                     | j                  t        j                  d      5  t        j                  d       d d d        y # 1 sw Y   y xY w)N123{   )assertRaisesRegexrJ   IllegalWeekdayErrorr   r]   s    r:   test_illegal_weekday_reportedz.CalendarTestCase.test_illegal_weekday_reported  s;    ##H$@$@%H 	*$$S)	* 	* 	*s   A  A	c                 8   | j                  t        t        j                  j                  d       | j                  t        t        j
                  j                  d       | j                  t        t        j                  D cg c]  }| c}      d       y c c}w )Nir   r   )r   
IndexErrorrJ   day_abbr__getitem__day_namerO   len)rA   ru   s     r:   test_enumerate_weekdaysz(CalendarTestCase.test_enumerate_weekdays  sg    *h&7&7&C&CSI*h&7&7&C&CRH):):;Aa;<a@;s   	Bc           	      @   dD ]  }t        t        |      }| j                  t        |      d       | j                  t        |d d        d       | j                  t        t	        |            d       | j                  |d d d   t        t        |                    y )N)r   r   r   r   getattrrJ   rO   r   setlistreversedrA   attrvalues      r:   	test_dayszCalendarTestCase.test_days  s    * 	ADHd+ESZ+Sq]A.SU_a0U4R4[$x*?@	Ar<   c           	      j   dD ]  }t        t        |      }| j                  t        |      d       | j                  t        |d d        d       | j                  |d   d       | j                  t        t	        |            d       | j                  |d d d   t        t        |                    y )N)
month_name
month_abbrr   r    r   r   r   s      r:   test_monthszCalendarTestCase.test_months  s    . 	ADHd+ESZ,Sq]B/U1Xr*SU_b1U4R4[$x*?@	Ar<   c                    t        j                         j                  ddd      }	 t        j                  d      }|j	                  dd      }|j                  ddd      }| j                  |t               | j                  |t               | j                  t        |      d       | j                  t        |      d       t        j                  d      }|j	                  d      }|j                  dd      }| j                  |t               | j                  |t               t        j                         j                  ddd      }| j                  ||       y # t
        j                  $ r t        j                  d      w xY w)N  r   r   localer
   $cannot set the system default locale)rJ   r`   r   LocaleTextCalendarformatweekdayr   ErrorunittestSkipTestassertIsInstancers   rO   r   assertGreaterEqualLocaleHTMLCalendar)rA   old_octoberrU   local_weekdaylocal_monthnew_octobers         r:   test_locale_calendarsz&CalendarTestCase.test_locale_calendars)  sQ    ++-==dBK	L--R8C--a4M--dB;K 	mS1k3/]+R0K 0"5))4))!,))$3mS1k3/++-==dBKk2 || 	L##$JKK	Ls   ;E! !)F
c                 f   	 t        j                  d      }| j                  |j                  dd      d       | j                  |j                  dd      d       | j                  |j                  dd      d	       | j                  |j                  dd
      d       | j                  |j                  dd      d       | j                  |j                  dd      d       | j                  |j                  dd      d       y # 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_formatweekday@  s
   	C--W=CS..q!4c:S..q!4d;S..q!4e<S..q!4g>S..q!4jAS..q!4kBS..q"5|D|| 	C##$ABB	Cs   DD )D0c                 ,   	 t        j                  d      }|j                  ddd      }| j                  d|       d|_        |j                  ddd      }| j                  d|       y # t        j                  $ r t        j                  d      w xY w)	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_nameQ  s    	L--R8C--dB;K 	o{3"5))$B71;? || 	L##$JKK	Ls   )A* *)Bc                 (   	 t        j                  d      }|j                  d      }| j                  d|       g d|_        |j                  d      }| j                  d|       y # t        j                  $ r t        j                  d      w xY w)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_weekday]  s    	L--R8C--a0M 	m]3&^#))!,nm4 || 	L##$JKK	Ls   'A( ()Bc                 z    t        t        j                         j                  t        j
                  d             y )Nr   )r   rJ   r|   itermonthdays3datetimeMAXYEARr]   s    r:   test_itermonthdays3z$CalendarTestCase.test_itermonthdays3i  s&    X //0@0@"EFr<   c                     t        j                  d      }t        |j                  dd            }| j	                  |d   d       | j	                  |d   d       y )	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_itermonthdays4m  sR    Q/C&&tQ/0a/2b#34r<   c           	      z   t        d      D ]W  }t        j                  |      }dD ];  \  }}t        |j	                  ||            }| j                  t        |      d       = Y t        j                  d      }t        |j	                  dd            }| j                  |t        t        dd	                   y )
Nr   )r
   r
   )i'  r   )#   *   r   r  r   r   r
   r&   )rangerJ   r|   r   itermonthdaysr  r   rO   rA   r   rU   ry   mr  s         r:   test_itermonthdaysz#CalendarTestCase.test_itermonthdayss  s    !!H 	3L##L1C, 31C--a34c$i23	3 Q/C%%dA./tE!RL12r<   c                    t        d      D ]r  }t        j                  |      }dD ]V  \  }}t        |j	                  ||            }| j                  |d   d   |       | j                  |d   d   |dz
  dz         X t y )Nr   r  r   r
   r   )r  rJ   r|   r   itermonthdays2rO   r  s         r:   test_itermonthdays2z$CalendarTestCase.test_itermonthdays2  s    !!H 	FL##L1C, F1C..q!45  a\:  b!|a/?1.DEF	Fr<   c                     t        t        d            }t        d      D ]M  }t        j                  |      }t        |j	                               }||d  |d | z   }| j                  ||       O y )Nr   )r   r  rJ   r|   iterweekdaysrO   )rA   week0r   rU   r   expecteds         r:   test_iterweekdaysz"CalendarTestCase.test_iterweekdays  sm    U1X!!H 	-L##L1C((*+D\]+eM\.BBHT8,		-r<   N)r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r#  r(  rI   r<   r:   r   r     sY    3	'*A
A	A3.C"
@
5G5
3F-r<   r   c                       e Zd Zd Zd Zd Zy)MonthCalendarTestCasec                 t    t        j                         | _        t        j                  | j                         y r6   )rJ   r   oldfirstweekdayr   r]   s    r:   setUpzMonthCalendarTestCase.setUp  s'    '446  !2!23r<   c                 B    t        j                  | j                         y r6   )rJ   r   r,  r]   s    r:   tearDownzMonthCalendarTestCase.tearDown  s      !5!56r<   c           	          t        j                  ||      }| j                  t        |      t        |             t	        t        |            D ]*  }| j                  ||   t        d ||   D                     , y )Nc              3   &   K   | ]	  }|d k7    yw)r   NrI   )rt   rr   s     r:   rv   z4MonthCalendarTestCase.check_weeks.<locals>.<genexpr>  s     *F3!8*Fs   )rJ   monthcalendarrO   r   r  sum)rA   r   r   weeksrU   is         r:   check_weeksz!MonthCalendarTestCase.check_weeks  si    $$T51S3u:.s5z" 	HAU1Xs*Fs1v*F'FG	Hr<   N)r   r   r   r-  r/  r6  rI   r<   r:   r*  r*    s    47Hr<   r*  c                   6    e Zd Zej                  Zd Zd Zd Zy)MondayTestCasec                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       | j                  ddd       y )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   r6  r]   s    r:   test_februaryzMondayTestCase.test_february  x    q,/ 	q/2 	q/2 	q/2 	q/2 	q/2r<   c                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       y )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   rC  r]   s    r:   
test_aprilzMondayTestCase.test_april  e    q/2 	q/2 	q"45 	q/2 	q/2r<   c                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       | j                  ddd       y )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
   rC  r]   s    r:   test_decemberzMondayTestCase.test_december  z    r?3 	r?3 	r#56 	r?3 	r?3 	r#56r<   N)	r   r   r   rJ   r   r   rD  rM  rW  rI   r<   r:   r8  r8        ??L3&3 7r<   r8  c                   6    e Zd Zej                  Zd Zd Zd Zy)SundayTestCasec                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       | j                  ddd       y )Ni  r   r;  r:  r<    r>  rH   r@    rA  i  rB  rC  r]   s    r:   rD  zSundayTestCase.test_february  rE  r<   c                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       y )N  r   rG  i~  rH  i  rI  r^  rK  iu  rL  rC  r]   s    r:   rM  zSundayTestCase.test_april  rN  r<   c                     | j                  ddd       | j                  ddd       | j                  ddd       | j                  ddd	       | j                  d
dd       | j                  ddd       y )Ni   r   rP  i  rQ  r`  rR  i  rS  i  rU  rJ  rV  rC  r]   s    r:   rW  zSundayTestCase.test_december   rX  r<   N)	r   r   r   rJ   r   r   rD  rM  rW  rI   r<   r:   r[  r[    rY  r<   r[  c                       e Zd Zg dZd Zy)TimegmTestCase)
r   r   d   i  i'  i i@B iIi ;=Ki
Lc                     | j                   D ]<  }t        j                  |      }| j                  |t	        j
                  |             > y r6   )
TIMESTAMPStimegmtimerO   rJ   timegm)rA   secstuples      r:   test_timegmzTimegmTestCase.test_timegm  s<    OO 	;DKK%ET8??5#9:	;r<   N)r   r   r   rf  rl  rI   r<   r:   rc  rc    s    7J;r<   rc  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	MonthRangeTestCasec                 P    | j                  t        j                  dd      d       y )NrH   r
   )r   r(   rO   rJ   
monthranger]   s    r:   test_januaryzMonthRangeTestCase.test_january      ,,T!4f=r<   c                 P    | j                  t        j                  dd      d       y )NrH   r   )r   r&   rp  r]   s    r:   test_february_leapz%MonthRangeTestCase.test_february_leap   rs  r<   c                 P    | j                  t        j                  dd      d       y )Nr   r   )r   r%   rp  r]   s    r:   test_february_nonleapz(MonthRangeTestCase.test_february_nonleap$  rs  r<   c                 P    | j                  t        j                  dd      d       y )NrH   r   )r   r(   rp  r]   s    r:   rW  z MonthRangeTestCase.test_december(  s    ,,T"5v>r<   c                     | j                  t        j                        5  t        j                  dd       d d d        y # 1 sw Y   y xY wrZ   r   rJ   IllegalMonthErrorrq  r]   s    r:   test_zeroth_monthz$MonthRangeTestCase.test_zeroth_month,  s;    x99: 	)a(	) 	) 	)   A  A	c                     | j                  t        j                        5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NrH   r   rz  r]   s    r:   test_thirteenth_monthz(MonthRangeTestCase.test_thirteenth_month1  s;    x99: 	*b)	* 	* 	*r}  c                     | j                  t        j                  d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)N65rH   A   )r   rJ   r{  rq  r]   s    r:   test_illegal_month_reportedz.MonthRangeTestCase.test_illegal_month_reported6  s=    ##H$>$>E 	*b)	* 	* 	*s   AA
N)
r   r   r   rr  ru  rw  rW  r|  r  r  rI   r<   r:   rn  rn    s%    >>>?)
*
*r<   rn  c                   *    e Zd Zd Zd Zd Zd Zd Zy)LeapdaysTestCasec                 P    | j                  t        j                  dd      d       y )Nr   r   rO   rJ   leapdaysr]   s    r:   test_no_rangezLeapdaysTestCase.test_no_range;      **45q9r<   c                 P    | j                  t        j                  dd      d       y )Nr   i  r   r  r]   s    r:   test_no_leapdaysz!LeapdaysTestCase.test_no_leapdays?  r  r<   c                 P    | j                  t        j                  dd      d       y )Nr     r   r  r]   s    r:   test_no_leapdays_upper_boundaryz0LeapdaysTestCase.test_no_leapdays_upper_boundaryC  r  r<   c                 P    | j                  t        j                  dd      d       y )Nr  i  r
   r  r]   s    r:   test_one_leapday_lower_boundaryz0LeapdaysTestCase.test_one_leapday_lower_boundaryG  r  r<   c                 P    | j                  t        j                  dd      d       y )Nr]  i  r   r  r]   s    r:   test_several_leapyears_in_rangez0LeapdaysTestCase.test_several_leapyears_in_rangeK  s    **45q9r<   N)r   r   r   r  r  r  r  r  rI   r<   r:   r  r  :  s    :::::r<   r  c                 ^    | j                  dt        j                        j                         S )N
)replaceoslineseprR   )rB   s    r:   convr  O  s     99T2::&--//r<   c                   r    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y)CommandLineTestCasec                 "    t        ddg| d   S )N-mrJ   r
   )r   )rA   argss     r:   run_okzCommandLineTestCase.run_okS  s    j848;;r<   c                 n    t        ddg| \  }}}| j                  d|       | j                  |d       y )Nr  rJ      usage:r   )r   r  rO   )rA   r  rcstdoutstderrs        r:   assertFailurez!CommandLineTestCase.assertFailureV  s8    24KdKFFi(Qr<   c                     | j                  d      }| j                  d|       | j                  d|       | j                  d|       y )Nz-hr  s   calendar.pys   --help)r  r  rA   r  s     r:   	test_helpzCommandLineTestCase.test_help[  s:    T"i(nf-i(r<   c                     | j                  d       | j                  d       | j                  dd       | j                  dddd       y )Nz-zspam2004-thtmlr   )r  r]   s    r:   test_illegal_argumentsz*CommandLineTestCase.test_illegal_argumentsa  sB    4 6"66*45r<   c                    | j                         }t        j                  j                         j                  }| j	                  d|z  j                         |       | j	                  d|       | j	                  d|       y )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_yearg  s_      $$&++ut|++-v6j&)-v6r<   c                 d    | j                  d      }| j                  |t        t                     y )Nr  )r  rO   r  r[   r  s     r:   test_output_yearz$CommandLineTestCase.test_output_yearn  s&    V$&6!78r<   c                 f    | j                  dd      }| j                  |t        t                     y )Nr  r   )r  rO   r  r   r  s     r:   test_output_monthz%CommandLineTestCase.test_output_monthr  s(    VS)&9!:;r<   c                     | j                  d       | j                  d       | j                  ddd      }| j                  |t        j	                  d             y )Nz-e
--encodingz	utf-16-ler  )r  r  rO   r[   rR   r  s     r:   test_option_encodingz(CommandLineTestCase.test_option_encodingv  sL    4 <(\;?!1!8!8!EFr<   c                    | j                  d       | j                  d       | j                  dd       t        j                         \  }}|xs d}|xs d}	 t        j                  t        j                        }	 t        j                  t        j                  ||f       t        j                  t        j                  |       	 | j                  d|d|d      }| j                  dj                  |      |       y # t        j                  t        j                  |       w xY w# t        j
                  t        f$ r | j                  d       Y w xY w)	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_locale|  s
   4 :&4&$$&	c{snW	B((8I<  $=  ; Z|S&IfmmC(&1	   ;j) 	BMM@A	Bs*   #D( =&C? #$D( ?&D%%D( (*EEc                     | j                  d       | j                  d       | j                  dd       | j                  ddd      }| j                  d|       y )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  sO    4 9%4(YV44f=r<   c                     | j                  d       | j                  d       | j                  dd       | j                  ddd      }| j                  t        d      |       y )Nz-lz--linesr  r   r  zDecember

Mo Tu Wer  r  r  r  r  s     r:   test_option_linesz%CommandLineTestCase.test_option_lines  sT    4 9%4(YV4d12F;r<   c                     | j                  d       | j                  d       | j                  dd       | j                  ddd      }| j                  d|       y )Nz-sz	--spacingr  8r  s   Su        Mor  r  s     r:   test_option_spacingz'CommandLineTestCase.test_option_spacing  sN    4 ;'4([#v6ov.r<   c                     | j                  d       | j                  d       | j                  dd       | j                  ddd      }| j                  t        d      |       y )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  sT    4 9%4(Zf5d56?r<   c                 D   | j                  d       | j                  d       | j                  dd       | j                  ddd      }| j                  |t        t                     | j                  ddd      }| j                  |d d d       | j                  d	|       y )
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!78Xvv6Y/96Br<   c                     | j                  dd      }t        j                  j                         j                  }| j	                  d|z  j                         |       | j	                  d|       y )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	L	r<   c                     | j                  ddddd      }| j                  |t        j                  di t        j                  d             y )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  sE    T6<&I)00B>BII'R	Tr<   c                     | j                  ddd       | j                  ddd       | j                  ddddd      }| j                  d|       y )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  sP    4.41T67L&I ./5	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  R  s[    < 
)679<G2&></@CT
7r<   r  c                       e Zd Zd Zy)MiscTestCasec                 D    h d}t        j                  | t        |       y )N>   r9   mainr   EPOCHmdaysrQ   r   r   Februarymonthlen	nextmonth	prevmonthformatstringdifferent_locale)not_exported)r   check__all__rJ   )rA   r  s     r:   test__all__zMiscTestCase.test__all__  s    J 	T8,Gr<   N)r   r   r   r  rI   r<   r:   r  r    s    Hr<   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestSubClassingCasec                 N     G d dt         j                        } |       | _        y )Nc                       e Zd Zej                  j
                  D  cg c]  }|dz   	 c}} Zg dZdZdZdZ	dZ
yc c}} w )0TestSubClassingCase.setUp.<locals>.CustomHTMLCalz text-nowrap)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_head)rt   styles   00r:   CustomHTMLCalr    sK    "//::<U%.0 <J'C#":0N*M!(<s   ;r  )rJ   rK   rU   )rA   r  s     r:   r-  zTestSubClassingCase.setUp  s    	)H11 	) !?r<   c                 \    | j                  d| j                  j                  dd             y )Nzclass="text-center month-head"rT  r   )r  rU   r   r]   s    r:   test_formatmonthnamez(TestSubClassingCase.test_formatmonthname  s%    6hh..tQ7	9r<   c                 \    | j                  d| j                  j                  dd             y )Nr   rT  r   )r  rU   r   r]   s    r:   r   z$TestSubClassingCase.test_formatmonth  s%    1hh**43	5r<   c                     | j                   j                  dd      }| j                  d| j                   j                  |d                y )NrT  r   zclass="wed text-nowrap"r   )rU   monthdays2calendarr  
formatweek)rA   r4  s     r:   test_formatweekz#TestSubClassingCase.test_formatweek  s:    ++D!4/1D1DU1X1NOr<   c                     | j                   j                         }| j                   j                  D ]  }| j                  d|z  |        y )Nz<th class="%s">)rU   r   r  r  )rA   headercolors      r:   test_formatweek_headz(TestSubClassingCase.test_formatweek_head  sA    **,XX55 	=EMM+e3V<	=r<   c                     | j                  d| j                  j                  z  | j                  j                  d             y )Nz=<table border="0" cellpadding="0" cellspacing="0" class="%s">rT  )r  rU   r  ra   r]   s    r:   test_format_yearz$TestSubClassingCase.test_format_year  s6    LXX##$&*hh&9&9$&?	Ar<   c                     | j                  dd| j                  j                  dfz  | j                  j                  d             y )Nz,<tr><th colspan="%d" class="%s">%s</th></tr>r   rT  )r  rU   r  ra   r]   s    r:   test_format_year_headz)TestSubClassingCase.test_format_year_head  s@    Dtxx**DH2 237883F3Ft3L	Nr<   N)
r   r   r   r-  r  r   r  r  r  r
  rI   r<   r:   r  r    s(    #95P=
A
Nr<   r  __main__)%rJ   r   testr   test.support.script_helperr   r   rg  r   rj   r  r  warningsr   r\   r   r[   dictrL   rP   r   r~   TestCaser3   r   r*  r8  r[  rc  rn  r  r  r  r  r  r   r  rI   r<   r:   <module>r     s      N   
  	  %N $ N 67C{ | ""!	#
 !""	$
  ""	 ! "" 	"
 """ ""	 !  ""!	#
 !"" ""	!"  """	$
  ""	
 "" 	"#a? DI
I
IJI
IIJ I
IIJ I
I
IJ_=K BzBX&& zBxa-x(( a-HHH-- H77* 77t77* 77r;X&& ;*** *>:x(( :*0u7(++ u7pH8$$ H(N(++ (NT zHMMO r<   