§
    ÔŸ’j»!  ã                  ó”   — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
Z
ddlmZ  ej        d¦  «        Z G d	„ d
¦  «        ZdS )é    )ÚannotationsN)ÚDecimal)ÚPath)ÚAnyé   )ÚGroundTruthRowz!dscons.takeoff_training.gt_loaderc                  óŠ   — e Zd ZdZedd„¦   «         Zedd	„¦   «         Zedd
„¦   «         Zedd„¦   «         Ze	dd„¦   «         Z
dS )ÚGroundTruthLoaderul   Ä�á»�c vÃ  trÃ­ch xuáº¥t dá»¯ liá»‡u dá»± toÃ¡n thá»±c táº¿ chuáº©n Ká»¹ sÆ° tá»« file Excel (.xls / .xlsx).Ú	file_pathú
str | PathÚreturnúlist[GroundTruthRow]c                óN  — t          |¦  «        }|                     ¦   «         st                               d|¦  «         g S |j                             ¦   «         dk    r|                      |¦  «        S |j                             ¦   «         dk    r|                      |¦  «        S g S )u`   TrÃ­ch xuáº¥t toÃ n bá»™ cÃ¡c dÃ²ng Ä‘áº§u viá»‡c vÃ  diá»…n giáº£i cÃ´ng thá»©c Ä‘á»‘i chá»©ng.z[GT_LOADER] File not found: %sz.xlsz.xlsx)r   ÚexistsÚloggerÚwarningÚsuffixÚlowerÚ
_parse_xlsÚ_parse_xlsx)Úclsr   Úps      úZC:\Projects\DSCons\app\modules\takeoff\application\takeoff_training\ground_truth_loader.pyÚload_ground_truth_from_excelz.GroundTruthLoader.load_ground_truth_from_excel   s�   € õ
 �‰OŒOˆØ�xŠx‰zŒzð 	Ý�NŠNÐ;¸QÑ?Ô?Ð?ØˆIàŒ8�>Š>ÑÔ˜vÒ%Ð%Ø—>’> !Ñ$Ô$Ð$ØŒX�^Š^ÑÔ Ò(Ð(Ø—?’? 1Ñ%Ô%Ð%Øˆ	ó    Úpathr   c                ó˜  ‡‡— g }	 t          j        t          |¦  «        d¬¦  «        }|                     ¦   «         }d }dD ]7}|D ].}|                     ¦   «         |                     ¦   «         v r|} nŒ/|r nŒ8|r|                     |¦  «        n|                     d¦  «        Šg }t          ‰j        ¦  «        D ]FŠˆˆfd„t          t          ‰j
        d¦  «        ¦  «        D ¦   «         }	|                     |	¦  «         ŒG|                      |¦  «        }n2# t          $ r%}
t                               d|
¦  «         Y d }
~
nd }
~
ww xY w|S )NT)Ú	on_demand)u   CÃ´ng trÃ¬nhu   TiÃªn lÆ°á»£ngu   Chi tiáº¿t KLu
   Dá»± toÃ¡nÚSheet1r   c                ó<   •— g | ]}‰                      ‰|¦  «        ‘ŒS © )Ú
cell_value©Ú.0ÚcÚrÚshs     €€r   ú
<listcomp>z0GroundTruthLoader._parse_xls.<locals>.<listcomp>>   s'   ø€ ÐRÐRÐR°A˜BŸMšM¨!¨QÑ/Ô/ÐRÐRÐRr   é#   z![GT_LOADER] Error reading xls: %s)ÚxlrdÚopen_workbookÚstrÚsheet_namesr   Úsheet_by_nameÚsheet_by_indexÚrangeÚnrowsÚminÚncolsÚappendÚ_extract_from_matrixÚ	Exceptionr   Úerror)r   r   ÚitemsÚwbr-   Útarget_sheet_nameÚ	candidateÚnameÚ	rows_dataÚrow_valsÚexcr&   r'   s              @@r   r   zGroundTruthLoader._parse_xls#   sœ  øø€ à&(ˆð	CÝÔ#¥C¨¡I¤I¸Ð>Ñ>Ô>ˆBØŸ.š.Ñ*Ô*ˆKØ $Ððð ð �	ð (ð ð �DØ —’Ñ(Ô(¨D¯JªJ©L¬LÐ8Ð8Ø,0Ð)Ø˜ð 9ð %ð Ø�Eðð %ð*�× Ò Ð!2Ñ3Ô3Ð3à×&Ò& qÑ)Ô)ð ð
 ˆIÝ˜2œ8‘_”_ð +ð +�ØRÐRÐRÐRÐR½½sÀ2Ä8ÈRÑ?PÔ?PÑ9QÔ9QÐRÑRÔR�Ø× Ò  Ñ*Ô*Ð*Ð*Ø×,Ò,¨YÑ7Ô7ˆEˆEøÝð 	Cð 	Cð 	CÝ�LŠLÐ<¸cÑBÔBÐBÐBÐBÐBÐBÐBøøøøð	Cøøøàˆs   †DD Ä
EÄ"EÅEc           	     óÈ  ‡‡	— dd l }g }	 |                     t          |¦  «        d¬¦  «        }|j        Š	g }t	          d‰	j        dz   ¦  «        D ]JŠˆˆ	fd„t	          dt          ‰	j        dz   d¦  «        ¦  «        D ¦   «         }|                     |¦  «         ŒK|  	                    |¦  «        }n2# t          $ r%}t                               d|¦  «         Y d }~nd }~ww xY w|S )Nr   T)Ú	data_onlyr   c                óH   •— g | ]}‰                      ‰|¬ ¦  «        j        ‘ŒS ))ÚrowÚcolumn)ÚcellÚvaluer#   s     €€r   r(   z1GroundTruthLoader._parse_xlsx.<locals>.<listcomp>O   s<   ø€ ð ð ð àð —G’G ¨!�GÑ,Ô,Ô2ðð ð r   r)   z"[GT_LOADER] Error reading xlsx: %s)ÚopenpyxlÚload_workbookr,   Úactiver0   Úmax_rowr2   Ú
max_columnr4   r5   r6   r   r7   )
r   r   rG   r8   r9   r=   r>   r?   r&   r'   s
           @@r   r   zGroundTruthLoader._parse_xlsxE   s#  øø€ àˆˆˆà&(ˆð	DØ×'Ò'­¨D©	¬	¸TÐ'ÑBÔBˆBØ”ˆBØˆIÝ˜1˜bœj¨1™nÑ-Ô-ð +ð +�ðð ð ð ð å" 1¥c¨"¬-¸!Ñ*;¸RÑ&@Ô&@ÑAÔAðñ ô �ð × Ò  Ñ*Ô*Ð*Ð*Ø×,Ò,¨YÑ7Ô7ˆEˆEøÝð 	Dð 	Dð 	DÝ�LŠLÐ=¸sÑCÔCÐCÐCÐCÐCÐCÐCøøøøð	Døøøàˆs   ŠB%B0 Â0
CÂ:CÃCÚmatrixúlist[list[Any]]c           
     ó’
  ‡— g }d}d\  }}}}}t          |d d…         ¦  «        D ]Î\  }	}
d                     d„ |
D ¦   «         ¦  «        }d|v sd|v r¢d|v sd	|v sd
|v r–|	}t          |
¦  «        D ]‚\  }}t          |pd¦  «                             ¦   «                              dd¦  «        }d|v r	|dk    r|}ŒId|v sd|v rd	|vr|}ŒXd|v sd	|v sd|v sd|v r|}Œkd|v sd|v r|}Œvd
|v s|dk    r|}Œƒ nŒÏd }g }|dk    r|dz   nd}t          |t          |¦  «        ¦  «        D �]º}||         }
|
rt          d„ |
D ¦   «         ¦  «        rŒ't          |dk    r#|t          |
¦  «        k     r|
|         �|
|         nd¦  «                             ¦   «         }t          |dk    r#|t          |
¦  «        k     r|
|         �|
|         nd¦  «                             ¦   «         Št          |dk    r#|t          |
¦  «        k     r|
|         �|
|         nd¦  «                             ¦   «         }t          |dk    r#|t          |
¦  «        k     r|
|         �|
|         nd¦  «                             ¦   «         }d}t          d¦  «        }|r=|                     dd¦  «         
                    ¦   «         s,t          j        d|¦  «        s|rt          j        d|¦  «        rd}|dk    �r|t          |
¦  «        k     rú|
|         }t          |t          t          f¦  «        r>|dk    r8t          t          t!          t          |¦  «        d¦  «        ¦  «        ¦  «        }n˜t          |t          ¦  «        rƒ|                     ¦   «                              ddd¦  «                             ddd¦  «         
                    ¦   «         r3	 t          |                     ¦   «         ¦  «        }n# t"          $ r Y nw xY w|r´‰r²|ri|rd                     |¦  «        nd |_        |j        t          d¦  «        k    r|r|                      |¦  «        |_        |                     |¦  «         g }t-          |                     dd¦  «        |r|                     d¦  «        s|nd ‰|r|nd |¬!¦  «        }�Œ‚|r6‰r4d"‰v st1          ˆfd#„d$D ¦   «         ¦  «        r|                     ‰¦  «         �Œ¼|rg|rd                     |¦  «        nd |_        |j        t          d¦  «        k    r|r|                      |¦  «        |_        |                     |¦  «         |S )%Néÿÿÿÿ)r   é   é   é   rO   é   ú c                óT   — g | ]%}t          |pd ¦  «                             ¦   «         ‘Œ&S )Ú )r,   r   ©r$   r%   s     r   r(   z:GroundTruthLoader._extract_from_matrix.<locals>.<listcomp>`   s.   € ÐBÐBÐB¸¥ A G¨¡¤× 2Ò 2Ñ 4Ô 4ÐBÐBÐBr   Ústtu
   mÃ£ hiá»‡uu
   Ä‘Æ¡n vá»‹u
   cÃ´ng tÃ¡cu   khá»‘i lÆ°á»£ngrV   ú
r   u   mÃ£ Ä‘mu
   danh má»¥cu
   ná»™i dungu   diá»…n giáº£iu   Ä‘vtÚklr   c              3  óh   K  — | ]-}|d u p$t          |¦  «                             ¦   «         dk    V — Œ.d S )NrV   )r,   ÚstriprW   s     r   ú	<genexpr>z9GroundTruthLoader._extract_from_matrix.<locals>.<genexpr>€   s>   è è € ÐMÐMÀA˜a 4˜iÐ?­3¨q©6¬6¯<ª<©>¬>¸RÒ+?ÐMÐMÐMÐMÐMÐMr   Fú0.0z.0z^[0-9]+(\.[0-9]+)*$z^[A-Z]{2}\.[0-9]+Té   ú.ú-ÚHMÚm3)rX   Ú	norm_codeÚ	task_nameÚunitÚquantityú=c              3  ó    •K  — | ]}|‰v V — Œ	d S )Nr!   )r$   ÚopÚname_vals     €r   r]   z9GroundTruthLoader._extract_from_matrix.<locals>.<genexpr>Ç   s8   øè è € ð *ð *Ø')�B˜(�Nð*ð *ð *ð *ð *ð *r   )Ú*ú+ú/ra   )Ú	enumerateÚjoinr,   r   Úreplacer0   ÚlenÚallr\   r   ÚisdigitÚreÚmatchÚ
isinstanceÚintÚfloatÚroundr6   Úformula_breakdownrg   Ú_sum_formulasr4   r   Ú
startswithÚany)r   rL   r8   Ú
header_idxÚcol_sttÚcol_normÚcol_nameÚcol_unitÚcol_qtyÚidxrC   Útxt_rowÚc_idxrE   Úcell_strÚcurrent_itemÚcurrent_formulasÚ	start_rowr&   Ústt_valÚnorm_valÚunit_valÚis_main_itemÚqty_valÚraw_qrk   s                            @r   r5   z&GroundTruthLoader._extract_from_matrixY   sn  ø€ à&(ˆØˆ
Ø9GÑ6ˆ�˜8 X¨wå! &¨¨"¨¤+Ñ.Ô.ð 	ð 	‰HˆC�Ø—h’hÐBÐB¸cÐBÑBÔBÑCÔCˆGØ˜Ð Ð  L°GÐ$;Ð$;Ø Ð'Ð'¨<¸7Ð+BÐ+BÐFWÐ[bÐFbÐFbà �
Ý#,¨S¡>¤>ð (ð (‘K�E˜4Ý" 4 :¨2™œ×4Ò4Ñ6Ô6×>Ò>¸tÀSÑIÔI�HØ Ð(Ð(¨W¸ª\¨\Ø"'˜˜à$¨Ð0Ð0°IÀÐ4IÐ4IØ&¨hÐ6Ð6Ø#(˜˜à$¨Ð0Ð0Ø'¨8Ð3Ð3Ø'¨8Ð3Ð3Ø*¨hÐ6Ð6à#(˜˜Ø%¨Ð1Ð1°V¸xÐ5GÐ5GØ#(˜˜Ø*¨hÐ6Ð6¸(ÀdÒ:JÐ:JØ"'˜øØ�øà.2ˆØ&(Ðà&0°A¢o o�J ‘N�N¸1ˆ	Ý�y¥# f¡+¤+Ñ.Ô.ð L	6ñ L	6ˆAØ˜”)ˆCØð �#ÐMÐMÈÐMÑMÔMÑMÔMð Øåà˜a’<�< G­c°#©h¬hÒ$6Ð$6¸3¸w¼<Ð;Sð �G”�àñô ÷ Še‰gŒgð	 õ
 à˜q’=�= Xµ°C±´Ò%8Ð%8¸SÀ¼]Ð=Vð �H”�àñô ÷ Še‰gŒgð	 õ
 à˜q’=�= Xµ°C±´Ò%8Ð%8¸SÀ¼]Ð=Vð �H”�àñô ÷ Še‰gŒgð	 õ
 à˜q’=�= Xµ°C±´Ò%8Ð%8¸SÀ¼]Ð=Vð �H”�àñô ÷ Še‰gŒgð	 ð !ˆLÝ˜e‘n”nˆGð ð	$ð —O’O D¨"Ñ-Ô-×5Ò5Ñ7Ô7ð	$õ ”xÐ 6¸Ñ@Ô@ð		$ð ð	$õ ”HÐ1°8Ñ<Ô<ð	$ð  $�à˜!Š|‰| ­#¨c©(¬(Ò 2Ð 2Ø˜Gœ�Ý˜e¥c­5 \Ñ2Ô2ð 	°uÀ²z°zÝ%¥c­%µ°e±´¸aÑ*@Ô*@Ñ&AÔ&AÑBÔB�G�Gå˜u¥cÑ*Ô*ðàŸš™œ×-Ò-¨c°2°qÑ9Ô9×AÒAÀ#ÀrÈ1ÑMÔM×UÒUÑWÔWððÝ")¨%¯+ª+©-¬-Ñ"8Ô"8˜˜øÝ$ð ð ð Ø˜ðøøøð ð 6 ð 6Øð *à7GÐQ˜Ÿ	š	Ð"2Ñ3Ô3Ð3ÈTð !Ô2ð $Ô,µ¸±´Ò>Ð>ÐCSÐ>Ø03×0AÒ0AÐBRÑ0SÔ0S˜Ô-Ø—L’L Ñ.Ô.Ð.Ø')Ð$å-ØŸš¨¨bÑ1Ô1àðØ(0×(;Ò(;¸DÑ(AÔ(Að˜h˜hàØ&Ø%-Ð7˜˜°4Ø$ð ñ  ô  �‘ð ð 6 (ð 6Ø˜(�?�?¥cð *ð *ð *ð *Ø-Að*ñ *ô *ñ 'ô '�?ð %×+Ò+¨HÑ5Ô5Ð5ùàð 	'à/?ÐI�—	’	Ð*Ñ+Ô+Ð+ÀTð Ô*ð Ô$­°©¬Ò6Ð6Ð;KÐ6Ø(+×(9Ò(9Ð:JÑ(KÔ(K�Ô%Ø�LŠL˜Ñ&Ô&Ð&àˆs   Î<!OÏ
O+Ï*O+Úformulasú	list[str]r   c                óT  — t          d¦  «        }| D ]•}d|v r�|                     d¦  «        }	 |d                              ¦   «                              dd¦  «        }|t          t	          t          t          |¦  «        d¦  «        ¦  «        ¦  «        z  }Œ…# t          $ r Y Œ‘w xY wŒ–|S )Nr^   rh   rO   ú,r`   r_   )r   Úsplitr\   rq   r,   rz   ry   r6   )r’   ÚtotalÚfÚpartsÚvals        r   r|   zGroundTruthLoader._sum_formulasÖ   s´   € å˜‘”ˆØð 	ð 	ˆAØ�aˆxˆxØŸš ™œ�ðØ œ)Ÿ/š/Ñ+Ô+×3Ò3°C¸Ñ=Ô=�CØ�W¥S­­u°S©z¬z¸1Ñ)=Ô)=Ñ%>Ô%>Ñ?Ô?Ñ?�E�EøÝ ð ð ð Ø�Dðøøøð ð ˆs   ®A(BÂ
B$Â#B$N)r   r   r   r   )r   r   r   r   )rL   rM   r   r   )r’   r“   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   r   r5   Ústaticmethodr|   r!   r   r   r
   r
      s¾   € € € € € ØvÐvàðð ð ñ „[ðð ðð ð ñ „[ððB ðð ð ñ „[ðð& ðzð zð zñ „[ðzðx ð
ð 
ð 
ñ „\ð
ð 
ð 
r   r
   )Ú
__future__r   Úloggingru   Údecimalr   Úpathlibr   Útypingr   r*   Úmodelsr   Ú	getLoggerr   r
   r!   r   r   ú<module>r¨      sÉ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€à "Ð "Ð "Ð "Ð "Ð "à	ˆÔ	Ð>Ñ	?Ô	?€ðQð Qð Qð Qð Qñ Qô Qð Qð Qð Qr   