
    P1iT                         d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
m	Z	mZ d dlmZ d dlmZ d dlmZ d d	lmZ  e       Zd
edefdZ G d de      Zy)    )TestCaseClient)get_user_model)cache)patch)datedatetime	timedelta)Person)bzshagod)bz)evaluate_good_daynamereturnc                 x    t         j                  j                         D ci c]  \  }}||
 c}}|    S c c}}w )N)sggShagodFnNamesitems)r   kvs      E/home/cursorai/projects/iching/api/tests/test_bazi_good_days_rules.pyreverse_shagod_indexr      s8    ..44676TQAqD67==7s   6c                       e Zd ZdZedefd       Zededefd       Zd Z	de
d	e
d
e
f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)BaziGoodDaysRuleTestsu-  
[liuhe]
1905-01-06 08:00:00 (day.g=乙, day.e=巳), 1915-01-05 11:00:00 (day.g=丙, day.e=申)
1912-01-01 08:00:00 (day.g=丙, day.e=子), 1924-01-11 11:00:00 (day.g=己, day.e=丑)
1928-01-04 08:00:00 (day.g=癸, day.e=卯), 1943-01-04 11:00:00 (day.g=壬, day.e=戌)
1937-01-05 08:00:00 (day.g=壬, day.e=辰), 1955-01-12 11:00:00 (day.g=癸, day.e=酉)
1944-01-07 08:00:00 (day.g=庚, day.e=午), 1964-01-11 11:00:00 (day.g=己, day.e=未)
1956-01-12 08:00:00 (day.g=戊, day.e=寅), 1981-01-09 11:00:00 (day.g=丁, day.e=亥)
1967-01-05 08:00:00 (day.g=己, day.e=巳), 1997-01-06 11:00:00 (day.g=戊, day.e=申)
1977-01-07 08:00:00 (day.g=甲, day.e=子), 1991-01-07 11:00:00 (day.g=丁, day.e=丑)
1988-01-01 08:00:00 (day.g=乙, day.e=卯), 2010-01-12 11:00:00 (day.g=壬, day.e=戌)
1998-01-09 08:00:00 (day.g=丙, day.e=辰), 2026-01-11 11:00:00 (day.g=乙, day.e=酉)

[sanhe]
1937-01-09 08:00:00 (day.g=丙, day.e=申), 1962-04-08 11:00:00 (day.g=丙, day.e=子, month.e=辰)
1944-01-12 08:00:00 (day.g=乙, day.e=亥), 1974-07-13 11:00:00 (day.g=乙, day.e=卯, month.e=未)
1956-01-12 08:00:00 (day.g=戊, day.e=寅), 1970-10-17 11:00:00 (day.g=庚, day.e=午, month.e=戌)
1967-01-05 08:00:00 (day.g=己, day.e=巳), 1989-01-13 11:00:00 (day.g=癸, day.e=酉, month.e=丑)
1977-01-03 08:00:00 (day.g=庚, day.e=申), 2005-04-10 11:00:00 (day.g=甲, day.e=子, month.e=辰)
1988-01-09 08:00:00 (day.g=癸, day.e=亥), 1997-07-12 11:00:00 (day.g=乙, day.e=卯, month.e=未)
1998-01-07 08:00:00 (day.g=甲, day.e=寅), 2014-10-14 11:00:00 (day.g=戊, day.e=午, month.e=戌)
2001-01-06 08:00:00 (day.g=己, day.e=巳), 2022-01-08 11:00:00 (day.g=辛, day.e=酉, month.e=丑)
2005-01-12 08:00:00 (day.g=丙, day.e=申), 2029-04-04 11:00:00 (day.g=甲, day.e=子, month.e=辰)
2010-01-01 08:00:00 (day.g=辛, day.e=亥), 2021-07-18 11:00:00 (day.g=丁, day.e=卯, month.e=未)

[tian_yi]
1912-01-09 08:00:00 (day.g=甲, day.e=申), 1926-01-06 08:00:00 (day.g=乙, day.e=未)
1928-01-06 08:00:00 (day.g=乙, day.e=巳), 1950-01-01 08:00:00 (day.g=丙, day.e=申)
1937-01-09 08:00:00 (day.g=丙, day.e=申), 1965-01-07 08:00:00 (day.g=辛, day.e=酉)
1944-01-04 08:00:00 (day.g=丁, day.e=卯), 1953-01-12 08:00:00 (day.g=癸, day.e=亥)
1956-01-02 08:00:00 (day.g=戊, day.e=辰), 1972-01-11 08:00:00 (day.g=辛, day.e=丑)
1967-01-05 08:00:00 (day.g=己, day.e=巳), 1988-01-10 08:00:00 (day.g=甲, day.e=子)
1977-01-03 08:00:00 (day.g=庚, day.e=申), 2001-01-02 08:00:00 (day.g=乙, day.e=丑)
1988-01-07 08:00:00 (day.g=辛, day.e=酉), 1999-01-02 08:00:00 (day.g=甲, day.e=寅)
1998-01-05 08:00:00 (day.g=壬, day.e=子), 2008-01-04 08:00:00 (day.g=癸, day.e=卯)
2001-01-10 08:00:00 (day.g=癸, day.e=酉), 2013-01-03 08:00:00 (day.g=己, day.e=巳)
1998-01-07 08:00:00 (day.g=甲, day.e=寅), 2016-01-08 08:00:00 (day.g=己, day.e=丑)
2001-01-02 08:00:00 (day.g=乙, day.e=丑), 2021-01-04 08:00:00 (day.g=壬, day.e=子)
2005-01-02 08:00:00 (day.g=丙, day.e=戌), 2030-01-04 08:00:00 (day.g=己, day.e=亥)
2010-01-07 08:00:00 (day.g=丁, day.e=巳), 2040-01-10 08:00:00 (day.g=丁, day.e=酉)
2015-01-02 08:00:00 (day.g=戊, day.e=寅), 2029-01-05 08:00:00 (day.g=乙, day.e=未)
2019-01-02 08:00:00 (day.g=己, day.e=亥), 2041-01-03 08:00:00 (day.g=丙, day.e=申)
1905-01-01 08:00:00 (day.g=庚, day.e=子), 1933-01-05 08:00:00 (day.g=辛, day.e=未)
1912-01-06 08:00:00 (day.g=辛, day.e=巳), 1921-01-07 08:00:00 (day.g=庚, day.e=午)
1928-01-03 08:00:00 (day.g=壬, day.e=寅), 1944-01-06 08:00:00 (day.g=己, day.e=巳)
1937-01-06 08:00:00 (day.g=癸, day.e=巳), 1958-01-02 08:00:00 (day.g=己, day.e=卯)

[wenchang]
1956-01-08 08:00:00 (day.g=甲, day.e=戌), 1984-01-12 08:00:00 (day.g=乙, day.e=巳)
1967-01-01 08:00:00 (day.g=乙, day.e=丑), 1976-01-07 08:00:00 (day.g=戊, day.e=午)
1977-01-09 08:00:00 (day.g=丙, day.e=寅), 1993-01-03 08:00:00 (day.g=甲, day.e=申)
1988-01-03 08:00:00 (day.g=丁, day.e=巳), 2009-01-04 08:00:00 (day.g=己, day.e=酉)
1998-01-01 08:00:00 (day.g=戊, day.e=申), 2022-01-07 08:00:00 (day.g=庚, day.e=申)
2001-01-06 08:00:00 (day.g=己, day.e=巳), 2012-01-01 08:00:00 (day.g=辛, day.e=酉)
2005-01-06 08:00:00 (day.g=庚, day.e=寅), 2015-01-11 08:00:00 (day.g=丁, day.e=亥)
2010-01-01 08:00:00 (day.g=辛, day.e=亥), 2022-01-11 08:00:00 (day.g=甲, day.e=子)
2015-01-06 08:00:00 (day.g=壬, day.e=午), 2030-01-07 08:00:00 (day.g=壬, day.e=寅)
2019-01-06 08:00:00 (day.g=癸, day.e=卯), 2037-01-07 08:00:00 (day.g=己, day.e=卯)

[taohua]
1928-01-01 08:00:00 (day.g=庚, day.e=子), 1948-01-01 08:00:00 (day.g=乙, day.e=酉)
1937-01-02 08:00:00 (day.g=己, day.e=丑), 1962-01-08 08:00:00 (day.g=丙, day.e=午)
1944-01-03 08:00:00 (day.g=丙, day.e=寅), 1974-01-02 08:00:00 (day.g=癸, day.e=卯)
1956-01-01 08:00:00 (day.g=丁, day.e=卯), 1970-01-08 08:00:00 (day.g=戊, day.e=子)
1967-01-04 08:00:00 (day.g=戊, day.e=辰), 1989-01-01 08:00:00 (day.g=辛, day.e=酉)
1977-01-12 08:00:00 (day.g=己, day.e=巳), 2005-01-10 08:00:00 (day.g=甲, day.e=午)
1988-01-04 08:00:00 (day.g=戊, day.e=午), 1997-01-01 08:00:00 (day.g=癸, day.e=卯)
1998-01-12 08:00:00 (day.g=己, day.e=未), 2014-01-05 08:00:00 (day.g=丙, day.e=子)
2001-01-09 08:00:00 (day.g=壬, day.e=申), 2022-01-08 08:00:00 (day.g=辛, day.e=酉)
2005-01-01 08:00:00 (day.g=乙, day.e=酉), 2029-01-04 08:00:00 (day.g=甲, day.e=午)

[liuchong]
1905-01-01 08:00:00 (day.g=庚, day.e=子), 1915-01-01 08:00:00 (day.g=乙, day.e=午)
1912-01-01 08:00:00 (day.g=丙, day.e=子), 1924-01-01 08:00:00 (day.g=己, day.e=午)
1928-01-01 08:00:00 (day.g=癸, day.e=子), 1943-01-01 08:00:00 (day.g=壬, day.e=午)
1937-01-01 08:00:00 (day.g=壬, day.e=子), 1955-01-01 08:00:00 (day.g=癸, day.e=午)
1944-01-01 08:00:00 (day.g=庚, day.e=子), 1964-01-01 08:00:00 (day.g=己, day.e=午)
1956-01-01 08:00:00 (day.g=戊, day.e=子), 1981-01-01 08:00:00 (day.g=丁, day.e=午)
1967-01-01 08:00:00 (day.g=己, day.e=子), 1997-01-01 08:00:00 (day.g=戊, day.e=午)
1977-01-01 08:00:00 (day.g=甲, day.e=子), 1991-01-01 08:00:00 (day.g=丁, day.e=午)
1988-01-01 08:00:00 (day.g=乙, day.e=子), 2010-01-01 08:00:00 (day.g=壬, day.e=午)
1998-01-01 08:00:00 (day.g=丙, day.e=子), 2026-01-01 08:00:00 (day.g=乙, day.e=午)

[edge_cases]
liuhe-no:  1988-01-10 08:00:00 (day.g=甲, day.e=子), 1990-01-11 22:59:59 (day.g=丙, day.e=子)
liuhe-yes: 1988-01-10 08:00:00 (day.g=甲, day.e=子), 1990-01-11 23:00:00 (day.g=丁, day.e=丑)
sanhe-no:  1967-01-08 08:00:00 (day.g=壬, day.e=申), 1991-04-11 22:59:59 (day.g=辛, day.e=亥, month.g=壬, month.e=辰)
sanhe-yes: 1967-01-08 08:00:00 (day.g=壬, day.e=申), 1991-04-11 23:00:00 (day.g=壬, day.e=子, month.g=壬, month.e=辰)
tian_yi-no:  1988-01-10 08:00:00 (day.g=甲, day.e=子), 1992-01-07 22:59:59 (day.g=壬, day.e=午)
tian_yi-yes: 1988-01-10 08:00:00 (day.g=甲, day.e=子), 1992-01-07 23:00:00 (day.g=癸, day.e=未)
wenchang-no:  1988-01-10 08:00:00 (day.g=甲, day.e=子), 1993-01-11 22:59:59 (day.g=壬, day.e=辰)
wenchang-yes: 1988-01-10 08:00:00 (day.g=甲, day.e=子), 1993-01-11 23:00:00 (day.g=癸, day.e=巳)
taohua-no:  1988-01-10 08:00:00 (day.g=甲, day.e=子), 1994-01-10 22:59:59 (day.g=丙, day.e=申)
taohua-yes: 1988-01-10 08:00:00 (day.g=甲, day.e=子), 1994-01-10 23:00:00 (day.g=丁, day.e=酉)

[liuhe_not]
1905-01-01 08:00:00 (day.g=庚, day.e=子), 1915-01-11 08:00:00 (day.g=壬, day.e=寅)
1912-01-01 08:00:00 (day.g=丙, day.e=子), 1924-01-05 08:00:00 (day.g=癸, day.e=未)
1928-01-02 08:00:00 (day.g=辛, day.e=丑), 1943-01-08 08:00:00 (day.g=丙, day.e=寅)
1937-01-02 08:00:00 (day.g=己, day.e=丑), 1955-01-10 08:00:00 (day.g=辛, day.e=未)
1944-01-03 08:00:00 (day.g=丙, day.e=寅), 1964-01-04 08:00:00 (day.g=壬, day.e=子)
1956-01-12 08:00:00 (day.g=戊, day.e=寅), 1981-01-04 08:00:00 (day.g=壬, day.e=午)
1967-01-03 08:00:00 (day.g=丁, day.e=卯), 1997-01-10 08:00:00 (day.g=壬, day.e=子)
1977-01-10 08:00:00 (day.g=丁, day.e=卯), 2009-01-01 08:00:00 (day.g=丙, day.e=午)
1988-01-02 08:00:00 (day.g=丙, day.e=辰), 2023-01-06 08:00:00 (day.g=甲, day.e=子)
1998-01-09 08:00:00 (day.g=丙, day.e=辰), 2038-01-05 08:00:00 (day.g=壬, day.e=午)

[sanhe_not]
1912-01-09 08:00:00 (day.g=甲, day.e=申), 1927-01-09 08:00:00 (day.g=癸, day.e=卯)
1928-01-01 08:00:00 (day.g=庚, day.e=子), 1946-01-05 08:00:00 (day.g=己, day.e=卯)
1937-01-05 08:00:00 (day.g=壬, day.e=辰), 1957-01-07 08:00:00 (day.g=己, day.e=卯)
1944-01-04 08:00:00 (day.g=丁, day.e=卯), 1969-01-03 08:00:00 (day.g=戊, day.e=寅)
1956-01-09 08:00:00 (day.g=乙, day.e=亥), 1986-01-10 08:00:00 (day.g=甲, day.e=寅)
1967-01-07 08:00:00 (day.g=辛, day.e=未), 1999-01-02 08:00:00 (day.g=甲, day.e=寅)
1977-01-09 08:00:00 (day.g=丙, day.e=寅), 2012-01-01 08:00:00 (day.g=辛, day.e=酉)
1988-01-08 08:00:00 (day.g=壬, day.e=戌), 2028-01-01 08:00:00 (day.g=乙, day.e=酉)
1998-01-11 08:00:00 (day.g=戊, day.e=午), 2008-01-10 08:00:00 (day.g=己, day.e=酉)
2001-01-10 08:00:00 (day.g=癸, day.e=酉), 2013-01-06 08:00:00 (day.g=壬, day.e=申)

[tian_yi_not]
1928-01-05 08:00:00 (day.g=甲, day.e=辰), 1958-01-11 08:00:00 (day.g=戊, day.e=子)
1937-01-08 08:00:00 (day.g=乙, day.e=未), 1969-01-02 08:00:00 (day.g=丁, day.e=丑)
1944-01-03 08:00:00 (day.g=丙, day.e=寅), 1979-01-09 08:00:00 (day.g=丙, day.e=子)
1956-01-01 08:00:00 (day.g=丁, day.e=卯), 1996-01-04 08:00:00 (day.g=庚, day.e=子)
1967-01-04 08:00:00 (day.g=戊, day.e=辰), 1977-01-07 08:00:00 (day.g=甲, day.e=子)
1977-01-02 08:00:00 (day.g=己, day.e=未), 1989-01-05 08:00:00 (day.g=乙, day.e=丑)
1988-01-06 08:00:00 (day.g=庚, day.e=申), 2003-01-03 08:00:00 (day.g=丙, day.e=子)
1998-01-04 08:00:00 (day.g=辛, day.e=亥), 2016-01-07 08:00:00 (day.g=戊, day.e=子)
2001-01-09 08:00:00 (day.g=壬, day.e=申), 2021-01-04 08:00:00 (day.g=壬, day.e=子)
2005-01-09 08:00:00 (day.g=癸, day.e=巳), 2030-01-05 08:00:00 (day.g=庚, day.e=子)

[wenchang_not]
1944-01-01 08:00:00 (day.g=甲, day.e=子), 1979-01-09 08:00:00 (day.g=丙, day.e=子)
1956-01-09 08:00:00 (day.g=乙, day.e=亥), 1996-01-04 08:00:00 (day.g=庚, day.e=子)
1967-01-02 08:00:00 (day.g=丙, day.e=寅), 1977-01-07 08:00:00 (day.g=甲, day.e=子)
1977-01-10 08:00:00 (day.g=丁, day.e=卯), 1989-01-04 08:00:00 (day.g=甲, day.e=子)
1988-01-04 08:00:00 (day.g=戊, day.e=午), 2003-01-03 08:00:00 (day.g=丙, day.e=子)
1998-01-02 08:00:00 (day.g=己, day.e=酉), 2016-01-07 08:00:00 (day.g=戊, day.e=子)
2001-01-07 08:00:00 (day.g=庚, day.e=午), 2021-01-04 08:00:00 (day.g=壬, day.e=子)
2005-01-07 08:00:00 (day.g=辛, day.e=卯), 2030-01-06 08:00:00 (day.g=辛, day.e=丑)
2010-01-02 08:00:00 (day.g=壬, day.e=子), 2040-01-01 08:00:00 (day.g=戊, day.e=子)
2015-01-07 08:00:00 (day.g=癸, day.e=未), 2047-01-12 08:00:00 (day.g=丙, day.e=子)

[taohua_not]
1937-01-01 08:00:00 (day.g=戊, day.e=子), 1969-01-01 08:00:00 (day.g=丙, day.e=子)
1944-01-02 08:00:00 (day.g=乙, day.e=丑), 1979-01-09 08:00:00 (day.g=丙, day.e=子)
1956-01-12 08:00:00 (day.g=戊, day.e=寅), 1996-01-04 08:00:00 (day.g=庚, day.e=子)
1967-01-03 08:00:00 (day.g=丁, day.e=卯), 1977-01-08 08:00:00 (day.g=乙, day.e=丑)
1977-01-11 08:00:00 (day.g=戊, day.e=辰), 1989-01-04 08:00:00 (day.g=甲, day.e=子)
1988-01-03 08:00:00 (day.g=丁, day.e=巳), 2003-01-03 08:00:00 (day.g=丙, day.e=子)
1998-01-11 08:00:00 (day.g=戊, day.e=午), 2016-01-07 08:00:00 (day.g=戊, day.e=子)
2001-01-08 08:00:00 (day.g=辛, day.e=未), 2021-01-05 08:00:00 (day.g=癸, day.e=丑)
2005-01-12 08:00:00 (day.g=丙, day.e=申), 2030-01-05 08:00:00 (day.g=庚, day.e=子)
2010-01-11 08:00:00 (day.g=辛, day.e=酉), 2040-01-01 08:00:00 (day.g=戊, day.e=子)
sectionc                 $   | j                         D cg c]C  }|j                         s|j                         j                  d      r4|j                         E }}g }|D ]  }|j                  d      \  }}|j                  d      d   j                         }|j                         j                  d      d   j                         }t	        j
                  |d      }	t	        j
                  |d      }
|j                  |	|
f        |S c c}w )N[z),(r   z%Y-%m-%d %H:%M:%S)
splitlinesstrip
startswithsplitr	   strptimeappend)r   llinespairslineleftrightleft_dtright_dtdt1dt2s              r   _parse_pairsz"BaziGoodDaysRuleTests._parse_pairs   s    $+$6$6$8h$8qAGGIaggiNbNbcfNg$8hD**T*KD%jjoa(..0G{{}**3/288:H##G-@AC##H.ABCLL#s$   is   DD	Dr   r   c                     | j                   }|j                  d| d      }t        |      dk  ry|d   }dD ]%  }|d| dk(  r||v s|j                  |      d   }' |S )Nr   ]       )z[liuhe]z[sanhe]z	[tian_yi]z
[wenchang]z[taohua]z
[liuchong]z[edge_cases]r   )RELATION_DATAr"   len)clsr   blobpartstailmarkers         r   _get_sectionz"BaziGoodDaysRuleTests._get_section   sy      

QtfA;'u:>QxqF1TF!$~zz&)!,	 r
     c           	         t         j                  j                  ddd      | _        t	               | _        | j
                  j                  dd       t        j                  j                  ddt        dd	d	      d
| j                        | _
        dddddddddd| j                  _        | j                  j                          d| _        t        j                  dd	      }t        j                   d|d	z   d        y )N
5566778899zrules@example.compw123456)phoneemailpassword)rA   rC   OwnerNi  r4   T)r   gender
birth_dateowner
created_byr   )godearth)yearmonthdayz/api/bazi/good-days/bz_good_days_version)Userobjectscreate_useruserr   clientloginr   creater   personbazi_resultsaveurlr   getset)selfvers     r   setUpzBaziGoodDaysRuleTests.setUp   s    LL,,&9J - 
	 hzBnn++D!Q'yy , 
 *+q)#

 	) ii.2		(#'48r=   day_gday_emonth_ec                 (    dddd|d||dddddS )Nr   gerL   rM   rN   hour )r]   r`   ra   rb   s       r   
_mock_baziz BaziGoodDaysRuleTests._mock_bazi   s,    !$7+U+!$	
 	
r=   c           	         | j                  d      }| j                  |      d d }|D ]  \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |d   d   |d   d   |      }| j                  t        d |D                      y )	Nliuher2      ;   rN   re   rf   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 ywtrcrl   Nr[   .0rr   s     r   	<genexpr>z3BaziGoodDaysRuleTests.test_liuhe.<locals>.<genexpr>   s6     ]U\PQc
c 1 KaeeCjG6K KU\   46r<   r/   bzugetCalendar10kGodEarthStemrL   rM   rN   rh   minutesecondr   
assertTrueanyr]   r   r'   r-   r.   b1b2reasonss           r   
test_liuhez BaziGoodDaysRuleTests.test_liuhe   s    ##G,!!'*2A.HC//#))SWWchhX[XbXbdgdndnoB//#))SWWbRTVXYB'5	#5	#KGOOC]U\]]^	 r=   c                     d}d}ddddddddddddd}t        |||      }| j                  t        d |D                     y )Nr   rd      rg   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 yw)rq   rr   rs   liuchongNrt   ru   s     r   rw   z6BaziGoodDaysRuleTests.test_liuchong.<locals>.<genexpr>  5     \T[qAEE#J#-J!%%*
2JJT[rx   )r   r~   r   )r]   
user_day_g
user_day_etarget_bazir   s        r   test_liuchongz#BaziGoodDaysRuleTests.test_liuchong   s]     

!$1%#!$	
 $J
KH\T[\\]r=   c                    | j                  d      }| j                  |      d   \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |      }t        |d         |d<   |d   d   dz   dz  |d   d<   t        |d	   d
   |d	   d   |      }| j                  t        d |D                     | j                  t        d |D                     y )Nsanher   rm   rn   rM   rf   r4      rN   re   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 yw)rq   rr   rs   bansanheNrt   ru   s     r   rw   z6BaziGoodDaysRuleTests.test_bansanhe.<locals>.<genexpr>  r   rx   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 ywrq   rr   rs   r   Nrt   ru   s     r   rw   z6BaziGoodDaysRuleTests.test_bansanhe.<locals>.<genexpr>  s5     ZRYQQUU3Z3.H155:3HHRYrx   )r<   r/   rz   r{   rL   rM   rN   rh   r|   r}   dictr   r~   r   assertFalse)r]   r   r-   r.   r   r   b2_modr   s           r   test_bansanhez#BaziGoodDaysRuleTests.test_bansanhe  s   ##G,$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTUbr'{+w "7C 01 4:w#BuIcNBuIcNFK\T[\\]ZRYZZ[r=   c                    | j                  d      }| j                  |      d   \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |d   d   |d   d   |      }| j                  t        d |D                     y )	Nr   r   rm   rn   rN   re   rf   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 ywr   rt   ru   s     r   rw   z3BaziGoodDaysRuleTests.test_sanhe.<locals>.<genexpr>  s5     YQXAAEE#J#-G!%%*2GGQXrx   ry   )r]   r   r-   r.   r   r   r   s          r   
test_sanhez BaziGoodDaysRuleTests.test_sanhe  s    ##G,$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBGYQXYYZr=   c                     | j                  d      }| j                  |      d   \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |d   d   |d   d   |      }t        d      | j                  t        fd|D                     y )	Ntian_yir   rm   rn   rN   re   rf   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywrq   siNrt   rv   rr   idxs     r   rw   z5BaziGoodDaysRuleTests.test_tian_yi.<locals>.<genexpr>$  4     UWAEE#J#-C!%%*2CCW   47r<   r/   rz   r{   rL   rM   rN   rh   r|   r}   r   r   r~   r   r]   r   r-   r.   r   r   r   r   s          @r   test_tian_yiz"BaziGoodDaysRuleTests.test_tian_yi  s    ##I.$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG"9-UWUUVr=   c                     | j                  d      }| j                  |      d   \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |d   d   |d   d   |      }t        d      | j                  t        fd|D                     y )	Nwenchangr   rm   rn   rN   re   rf   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywr   rt   r   s     r   rw   z6BaziGoodDaysRuleTests.test_wenchang.<locals>.<genexpr>-  r   r   r   r   s          @r   test_wenchangz#BaziGoodDaysRuleTests.test_wenchang&  s    ##J/$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG":.UWUUVr=   c                     | j                  d      }| j                  |      d   \  }}t        j                  |j                  |j
                  |j                  |j                  |j                  |j                        }t        j                  |j                  |j
                  |j                  ddd      }t        |d   d   |d   d   |      }t        d      | j                  t        fd|D                     y )	Ntaohuar   rm   rn   rN   re   rf   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywr   rt   r   s     r   rw   z4BaziGoodDaysRuleTests.test_taohua.<locals>.<genexpr>6  r   r   r   r   s          @r   test_taohuaz!BaziGoodDaysRuleTests.test_taohua/  s    ##H-$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG"8,UWUUVr=   c           	         | j                  d      }|s| j                  d       | j                  |      d d }|D ]  \  }}t        j                  |j
                  |j                  |j                  |j                  |j                  |j                        }t        j                  |j
                  |j                  |j                  ddd      }t        |d   d   |d   d   |      }| j                  t        d	 |D                      y )
N	liuhe_notzliuhe_not data not present   rm   rn   rN   re   rf   c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 ywrp   rt   ru   s     r   rw   z7BaziGoodDaysRuleTests.test_liuhe_not.<locals>.<genexpr>A  s6      ^V]QRss!2!LquuSzW7L!LV]rx   r<   skipTestr/   rz   r{   rL   rM   rN   rh   r|   r}   r   r   r   r   s           r   test_liuhe_notz$BaziGoodDaysRuleTests.test_liuhe_not8  s    ##K0MM67!!'*2A.HC//#))SWWchhX[XbXbdgdndnoB//#))SWWbRTVXYB'5	#5	#KGS ^V] ^^_	 r=   c           	         | j                  d      }|s| j                  d       | j                  |      d d }|D ]  \  }}t        j                  |j
                  |j                  |j                  |j                  |j                  |j                        }t        j                  |j
                  |j                  |j                  ddd      }t        |d   d   |d   d   |      }| j                  t        d	 |D                      y )
N	sanhe_notzsanhe_not data not presentr   rm   rn   rN   re   rf   c              3   n   K   | ]-  }|j                  d       dk(  xr |j                  d      dv  / yw)rq   rr   rs   )r   r   Nrt   ru   s     r   rw   z7BaziGoodDaysRuleTests.test_sanhe_not.<locals>.<genexpr>L  s7      ldk_`ss!2!ZquuSzEZ7Z!Zdks   35r   r   s           r   test_sanhe_notz$BaziGoodDaysRuleTests.test_sanhe_notC  s    ##K0MM67!!'*2A.HC//#))SWWchhX[XbXbdgdndnoB//#))SWWbRTVXYB'5	#5	#KGS ldk llm	 r=   c                 &   | j                  d      }|s| j                  d       | j                  |      d   \  }}t        j                  |j
                  |j                  |j                  |j                  |j                  |j                        }t        j                  |j
                  |j                  |j                  ddd      }t        |d   d   |d   d   |      }t        d	      | j                  t        fd
|D                     y )Ntian_yi_notztian_yi_not data not presentr   rm   rn   rN   re   rf   r   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywr   rt   r   s     r   rw   z9BaziGoodDaysRuleTests.test_tian_yi_not.<locals>.<genexpr>W  4     VgQUU3Z3.D155:3DDgr   r<   r   r/   rz   r{   rL   rM   rN   rh   r|   r}   r   r   r   r   r   s          @r   test_tian_yi_notz&BaziGoodDaysRuleTests.test_tian_yi_notN  s    ##M2MM89$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG"9-VgVVWr=   c                 &   | j                  d      }|s| j                  d       | j                  |      d   \  }}t        j                  |j
                  |j                  |j                  |j                  |j                  |j                        }t        j                  |j
                  |j                  |j                  ddd      }t        |d   d   |d   d   |      }t        d	      | j                  t        fd
|D                     y )Nwenchang_notzwenchang_not data not presentr   rm   rn   rN   re   rf   r   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywr   rt   r   s     r   rw   z:BaziGoodDaysRuleTests.test_wenchang_not.<locals>.<genexpr>b  r   r   r   r   s          @r   test_wenchang_notz'BaziGoodDaysRuleTests.test_wenchang_notY  s    ##N3MM9:$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG":.VgVVWr=   c                 &   | j                  d      }|s| j                  d       | j                  |      d   \  }}t        j                  |j
                  |j                  |j                  |j                  |j                  |j                        }t        j                  |j
                  |j                  |j                  ddd      }t        |d   d   |d   d   |      }t        d	      | j                  t        fd
|D                     y )N
taohua_notztaohua_not data not presentr   rm   rn   rN   re   rf   r   c              3   r   K   | ].  }|j                  d       dk(  xr |j                  d      k(   0 ywr   rt   r   s     r   rw   z8BaziGoodDaysRuleTests.test_taohua_not.<locals>.<genexpr>m  r   r   r   r   s          @r   test_taohua_notz%BaziGoodDaysRuleTests.test_taohua_notd  s    ##L1MM78$$W-a0S++CHHcii#((TWT^T^`c`j`jk++CHHcii"bRTU#BuIcNBuIcNBG"8,VgVVWr=   N)__name__
__module____qualname__r5   staticmethodstrr/   classmethodr<   r_   intrj   r   r   r   r   r   r   r   r   r   r   r   r   ri   r=   r   r   r      s    ZMx c      98
 
C 
# 
_^\[WWW	`	n	X	X	Xr=   r   N)django.testr   r   django.contrib.authr   django.core.cacher   unittest.mockr   r	   r   r
   bazi.modelsr   iching.utilsr   r   r   rz   iching.utils.person_good_daysr   rP   r   r   r   r   ri   r=   r   <module>r      sN    ( . #  . .  ' " ;>s >s >ZXH ZXr=   