§
    X6Ãjð	  ã                   óX  — d Z ddlZddlmc mZ ddlmZ ddl	Z	ddl
Z
 ee¦  «                             ¦   «         j        d         dz  dz  dz  dz  Z e
j        d	¬
¦  «        defd„¦   «         Ze
j                             dg d¢¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )a©  Kiem thu bam nguon (grounding) cho mo hinh BIM Cong hop Ong Den - ba Lanh.

Moi gia tri duoc kiem o day deu truy nguyen ve ho so that:
- DWG `02. THIET KE CHI TIET_1_3.8.dwg` (chuyen bang tools/libredwg/dwg2dxf.exe):
  tim tuyen layer `TK-DBO-1317-Mb Cong doc`, ga cho layer `1.GACHO`,
  chi tiet BPTC cu (5000 giua 2 hang cu, cu dai 5000, 2 tang vang cach 1500, buoc chong 10000).
- DWG `03. TD +TN_3.8.DWG`: bang cong A=50d27'36'' R=25 K=22.02 T=11.78.
- Du toan tham dinh `02. DToan thanh dinh ba Lanh.xls`: phan doan 50/50/45, M250 = 439,636 m3,
  bang can nuoc 145*0,25*4, chong ngang 10 m/diem x 2 tang, cu tinh dai 5 m.
- HD + Gantt BPTC: 270 ngay 25/09/2026 -> 21/06/2027.
é    N)ÚPathé   ÚappÚstaticÚbimz
index.htmlÚmodule)ÚscopeÚreturnc                  ó8   — t                                d¬¦  «        S )Nzutf-8)Úencoding)ÚHTMLÚ	read_text© ó    ú=C:\Projects\DSCons\tests\test_ong_den_bim_source_grounding.pyÚsrcr      s   € å�>Š> 7ˆ>Ñ+Ô+Ð+r   Úbad)z51.46z101.46z474.9z	Larsen IVÚI300zs = 6.0z/ 90u   NgÃ y 90c                 óÊ  — || v}|sÚt          j        d|fd|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d }d S )	N©únot in)z%(py0)s not in %(py2)sr   r   ©Úpy0Úpy2z$Gia tri khong co nguon con ton tai: ú
>assert %(py4)sÚpy4©	Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanation)r   r   Ú@py_assert1Ú@py_format3Ú@py_format5s        r   Útest_no_unsourced_valuesr*      s  € à�cˆ>ÐGÐGÐGÕGÔGÐGÐGÐGÐGˆ3�cÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔGˆ3ÑGÔGÐGÕGÔGˆ3ÑGÔGÐGÐGÐGÕGÔGÑGÔGÐGÐGÕGÔG�cÑGÔGÐGÕGÔG�cÑGÔGÐGÐGÐGÐGÑGÐGÕGÔGÐGÀ#ÐGÐGÑGÔGÐGÑGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGr   c                 ó  — t           j        }d} ||| ¦  «        }| }|sût          j        d¦  «        dz   dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}x}}d}| j
        } |¦   «         }||v}|s½t          j        d|fd	||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j	        |
¦  «        ¦  «        ‚d x}x}x}}d S )Nzday\s*%\s*\dzNhat ky gia (day % n) van conzW
>assert not %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.search
}(%(py4)s, %(py5)s)
}Úrer   )r   r   r   Úpy5Úpy7Úweatherr   )zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
})Úpy1Úpy3r-   r.   zassert %(py9)sÚpy9)r,   Úsearchr   r$   r    r!   r"   r#   r%   r&   Úlowerr   )r   r'   Ú@py_assert3Ú@py_assert6Ú@py_assert8Ú@py_format9Ú@py_assert0Ú@py_assert4Ú@py_assert2Ú@py_format8Ú@py_format10s              r   Útest_no_synthetic_diaryr>      s$  € åŒyÐO˜ÐOˆyˆy˜¨#Ñ.Ô.ÐOÐ.Ð.ÐOÐ.ÐOÕOÔOÐ0OÑOÔOÐOÑOÐOÕOÔOÑOÔOÐOÐOÕOÔO�rÑOÔOÐOÕOÔO�rÑOÔOÐOÐOÕOÔOˆyÑOÔOÕOÔO˜ÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO¨#ÑOÔOÐOÕOÔO¨#ÑOÔOÐOÐOÕOÔOÐ.ÑOÔOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOÐOÐOÐOÐOÐOØÐ'˜CœIÐ'˜I˜I™KœKÐ'ˆ9˜KÐ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ9˜KÐ'Ñ'Ô'Õ'Ô'ˆ9Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'˜CÑ'Ô'Ð'Õ'Ô'˜CÑ'Ô'Ð'Ð'Õ'Ô'˜IÑ'Ô'Õ'Ô'˜KÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c                 ór  — dD ]ä}|| v }|sÚt          j        d|fd|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d }Œåd
D ]Ì}|| v }|sÂt          j        d|fd|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd	|iz  }t          t          j        |¦  «        ¦  «        ‚d }ŒÍd S )N)z1.428z61.434z50.46z5.999zR_CURVE = 25.0©Úin©z%(py0)s in %(py2)sÚtokenr   r   zThieu thong so tuyen tu DWG: r   r   )z18.16z46.47z75.60z97.62z125.69z146.46Ústazassert %(py4)sr   )r   rC   r'   r(   r)   rD   s         r   Útest_alignment_from_dwgrE   $   s  € ØHð Eð EˆØ˜ˆ|ÐDÐDÐDÕDÔDÐDÐDÐDÐDˆu˜ÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆuÑDÔDÐDÕDÔDˆuÑDÔDÐDÐDÐDÕDÔDÑDÔDÐDÐDÕDÔD˜ÑDÔDÐDÕDÔD˜ÑDÔDÐDÐDÐDÐDÑDÐDÕDÔDÐD¸UÐDÐDÑDÔDÐDÑDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDØGð ð ˆØ�cˆzÐÐÐÕÔÐÐÐÐˆs�cÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÐÕÔÑÔÐÐÕÔ�cÑÔÐÕÔ�cÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐðð r   c                 ó’  — d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )	NzJOINT_STATIONS = [50.0, 100.0]r@   ©z%(py1)s in %(py3)sr   ©r0   r1   úassert %(py5)sr-   z439.64©r   r   r#   r    r!   r"   r%   r&   ©r   r9   r;   Ú@py_format4Ú@py_format6s        r   Útest_segments_and_jointsrN   +   sŽ  € Ø+Ð2Ð+¨sÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð+¨sÐ2Ñ2Ô2Õ2Ô2Ð+Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¨sÑ2Ô2Ð2Õ2Ô2¨sÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2ØÐˆ8�sˆ?ÐÐÐÕÔÐÐÐÐˆ8�sÐÑÔÕÔˆ8ÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr   c                 óÔ  — dD ]ä}|| v }|sÚt          j        d|fd|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d }Œåd S )
N)zSHEET_PILE_OFFSET = 2.5zSHEET_PILE_LENGTH = 5.0zSTRUT_SPACING = 10.0zSTRUT_SPACING_TC1_C4 = 3.5zSTRUT_TIER_GAP = 1.5ÚU250r@   rB   rC   r   r   zThieu thong so cu/vang: r   r   r   )r   rC   r'   r(   r)   s        r   Ú"test_shoring_from_dwg_and_estimaterQ   0   s!  € ðPð @ð @ˆà˜ˆ|Ð?Ð?Ð?Õ?Ô?Ð?Ð?Ð?Ð?ˆu˜Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?ˆuÑ?Ô?Ð?Õ?Ô?ˆuÑ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?˜Ñ?Ô?Ð?Õ?Ô?˜Ñ?Ô?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Ô?Ð?¸Ð?Ð?Ñ?Ô?Ð?Ñ?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?ð@ð @r   c                 óL  — d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )NzWATERSTOP_LINES = 4r@   rG   r   rH   rI   r-   rJ   rK   s        r   Útest_waterstop_longitudinalrS   6   sÍ   € Ø Ð'Ð  CÐ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð  CÐ'Ñ'Ô'Õ'Ô'Ð Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' CÑ'Ô'Ð'Õ'Ô' CÑ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'r   c                 óÔ  — dD ]ä}|| v }|sÚt          j        d|fd|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d }Œåd S )
N)z19.29z33.37z75.17z103.69z117.25r@   rB   rD   r   r   zThieu ly trinh ga cho tu DWG: r   r   r   )r   rD   r'   r(   r)   s        r   Útest_manholes_from_dwgrU   :   s  € Ø>ð Bð BˆØ�cˆzÐAÐAÐAÕAÔAÐAÐAÐAÐAˆs�cÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAˆsÑAÔAÐAÕAÔAˆsÑAÔAÐAÐAÐAÕAÔAÑAÔAÐAÐAÕAÔA�cÑAÔAÐAÕAÔA�cÑAÔAÐAÐAÐAÐAÑAÐAÕAÔAÐA¸CÐAÐAÑAÔAÐAÑAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAðBð Br   c                 ó`  — d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}|| v }|s—t          j        d|fd|| f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d	D ]ä}|| v }|sÚt          j        d|fd
|| f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nddœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d }Œåd S )NzTOTAL_DAYS = 270r@   rG   r   rH   rI   r-   z
2026-09-25)z
2026-10-10z
2026-12-20z
2027-03-15z
2027-05-15z
2027-06-21rB   Údr   zThieu moc Gantt: r   r   )	r   r   r#   r    r!   r"   r%   r&   r$   )	r   r9   r;   rL   rM   rW   r'   r(   r)   s	            r   Útest_schedule_270_daysrX   ?   s¡  € ØÐ$Ð Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Õ$Ô$ÐÑ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$ØÐˆ<˜3ÐÐÐÐÕÔÐÐÐÐˆ<˜3ÐÑÔÕÔˆ<ÑÔÐÕÔÑÔÐÐÕÔ˜3ÑÔÐÕÔ˜3ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØSð 1ð 1ˆØ�CˆxÐ0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆq�CÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆqÑ0Ô0Ð0Õ0Ô0ˆqÑ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�CÑ0Ô0Ð0Õ0Ô0�CÑ0Ô0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Ô0Ð0¨QÐ0Ð0Ñ0Ô0Ð0Ñ0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0ð1ð 1r   )Ú__doc__Úbuiltinsr    Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úpathlibr   r,   ÚpytestÚ__file__ÚresolveÚparentsr   ÚfixtureÚstrr   ÚmarkÚparametrizer*   r>   rE   rN   rQ   rS   rU   rX   r   r   r   ú<module>rg      sn  ðð
ð 
ð € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ø 	€	€	€	à €€€à€tˆH�~„~×ÒÑÔÔ'¨Ô*¨UÑ2°XÑ=ÀÑEÈÑT€ð €„�hÐÑÔð,ˆSð ,ð ,ð ,ñ  Ôð,ð „×Ò˜Ð pÐ pÐ pÑqÔqðHð Hñ rÔqðHð(ð (ð (ðð ð ðð ð ð
@ð @ð @ð(ð (ð (ðBð Bð Bð
1ð 1ð 1ð 1ð 1r   