§
    ¤9¬j÷4  ã                  ó
  — d Z ddlmZ ddlmZmZ ddlZddlZddlm	Z	m
Z
mZmZmZmZ ddlZ	 ddlmZ n# e$ r dZY nw xY w	 ddlZn# e$ r dZY nw xY wddlmZmZmZmZ e G d„ d	¦  «        ¦   «         Z G d
„ d¦  «        ZdS )u•  AutoPOE2 - Advanced Item Tooltip Tier & Mod Evaluator (Doc 29 / Doc 68).
=============================================================================
Ä�á»™ng cÆ¡ tháº©m Ä‘á»‹nh trang bá»‹ vÃ  váº­t pháº©m dá»±a trÃªn phÃ¢n tÃ­ch Tooltip (OCR & Text):
- Tiáº¿p nháº­n áº£nh chá»¥p Tooltip trang bá»‹ hiáº¿m tháº­t tá»« thá»±c Ä‘á»‹a (captures/*.png) hoáº·c text.
- Nháº­n diá»‡n cÃ¡c dÃ²ng thuá»™c tÃ­nh giÃ¡ trá»‹ cao (Tier 1 Life/ES, +Skill Gems, High Elemental Resistances, Critical Multiplier, High Physical/Elemental DPS).
- TÃ­nh toÃ¡n Ä‘iá»ƒm sá»‘ hiá»‡p Ä‘á»“ng thuá»™c tÃ­nh (Stat Synergy Score) vÃ  Pseudo Resistances.
- Xuáº¥t Ä‘Ã¡nh giÃ¡ phÃ¢n loáº¡i quyáº¿t Ä‘á»‹nh:
  + KEEP: Giá»¯ láº¡i trÃªn ngÆ°á»�i / MÃ³n Ä‘á»“ giÃ¡ trá»‹ cá»±c cao (God Roll / 3+ T1 / +Gems).
  + STASH: Cáº¥t vÃ o HÃ²m Ä‘á»“ Ä‘á»ƒ trao Ä‘á»•i hoáº·c cháº¿ Ä‘á»“ (2+ T1/T2, Ä‘á»“ cÃ³ giÃ¡ trá»‹ giao dá»‹ch).
  + VENDOR: BÃ¡n cho NPC láº¥y vÃ ng / Ä‘á»“ rÃ¡c thuá»™c tÃ­nh tháº¥p hoáº·c khÃ´ng cÃ³ hiá»‡p Ä‘á»“ng.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Python 3.11 Cold Path Tier 2.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p tráº§n file < 500 dÃ²ng.
- Rule 16: Google Docstrings chuáº©n má»±c.
é    )Úannotations)Ú	dataclassÚfieldN)ÚAnyÚDictÚListÚOptionalÚTupleÚUnion)ÚImage)ÚEvaluatedModÚItemEvaluationActionÚModCategoryÚclassify_single_mod_linec                  óF  — e Zd ZU dZdZded<   dZded<   dZded<   dZd	ed
<   e	j
        Zded<   dZded<   dZd	ed<   dZd	ed<    ee¬¦  «        Zded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<   dZded<   dS )ÚItemEvaluationReportuL   BÃ¡o cÃ¡o Ä‘Ã¡nh giÃ¡ toÃ n diá»‡n giÃ¡ trá»‹ vÃ  phÃ¢n loáº¡i váº­t pháº©m.Ú ÚstrÚ	item_nameÚ
item_classÚNORMALÚrarityr   ÚintÚ
item_levelr   Úactionç        ÚfloatÚtotal_scoreÚtier_1_countÚtier_2_count)Údefault_factoryzList[EvaluatedMod]Úhigh_value_modsÚall_modsz	List[str]ÚreasonszDict[str, float]Úpseudo_resistsÚsynergy_bonusesÚraw_textN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   ÚVENDORr   r   r   r    r   Úlistr"   r#   r$   Údictr%   r&   r'   © ó    úHC:\Projects\AutoPOE2\src\assistant_tool\pickit\item_tooltip_evaluator.pyr   r   -   sJ  € € € € € € àVÐVØ€IÐÐÐÑØ€JÐÐÐÑØ€FÐÐÐÑØ€JÐÐÐÑØ#7Ô#>€FÐ>Ð>Ð>Ñ>Ø€KÐÐÐÑØ€LÐÐÐÑØ€LÐÐÐÑØ*/¨%ÀÐ*EÑ*EÔ*E€OÐEÐEÐEÑEØ#( 5¸Ð#>Ñ#>Ô#>€HÐ>Ð>Ð>Ñ>Ø˜¨tÐ4Ñ4Ô4€GÐ4Ð4Ð4Ñ4Ø', u¸TÐ'BÑ'BÔ'B€NÐBÐBÐBÑBØ!& °tÐ!<Ñ!<Ô!<€OÐ<Ð<Ð<Ñ<Ø€HÐÐÐÑÐÐr1   r   c                  óN   — e Zd ZU dZdZded<   dZded<   	 	 ddd„Zdd„Zdd„Z	dS )ÚItemTooltipEvaluatoruX   Ä�á»™ng cÆ¡ bÃ³c tÃ¡ch vÃ  Ä‘á»‹nh giÃ¡ Tooltip trang bá»‹ theo chuáº©n Tier & Mod POE2.ç     €Q@r   ÚKEEP_SCORE_THRESHOLDç      D@ÚSTASH_SCORE_THRESHOLDÚkeep_score_thresholdÚstash_score_thresholdÚreturnÚNonec                ó"   — || _         || _        dS )uò   Khá»Ÿi táº¡o ItemTooltipEvaluator.

        Args:
            keep_score_threshold: NgÆ°á»¡ng Ä‘iá»ƒm tá»‘i thiá»ƒu Ä‘á»ƒ phÃ¢n loáº¡i KEEP.
            stash_score_threshold: NgÆ°á»¡ng Ä‘iá»ƒm tá»‘i thiá»ƒu Ä‘á»ƒ phÃ¢n loáº¡i STASH.
        N)r9   r:   )Úselfr9   r:   s      r2   Ú__init__zItemTooltipEvaluator.__init__G   s   € ð %9ˆÔ!Ø%:ˆÔ"Ð"Ð"r1   Ú	text_blobr   r   c                ód  ‡"— |r|                      ¦   «         st          t          j        dg¬¦  «        S d„ |                      ¦   «                              ¦   «         D ¦   «         }d}d}d}d}d}t          |¦  «        D �]q\  }}	|	                     d¦  «        rB|	                     dd	¦  «        d	                               ¦   «         }t          ||d	z   ¦  «        }Œ]|	                     d
¦  «        r¦|	                     dd	¦  «        d	                               ¦   «          	                    ¦   «         }|d	z   t          |¦  «        k     r;||d	z                                 d¦  «        s||d	z                                  ¦   «         }t          ||dz   ¦  «        }�Œ|	                     d¦  «        rDt          j        d|	t          j        ¦  «        }
|
r"t          |
                     d	¦  «        ¦  «        }�Œs|dk    rDt          j        d|t          j        ¦  «        }|r"t          |                     d	¦  «        ¦  «        }g }d}|D ]‹}	t          j        dd|	¦  «                              ¦   «         Š"‰"                     d¦  «        Š"‰"sŒBt%          ˆ"fd„|D ¦   «         ¦  «        rŒ^‰"|k    rŒet'          ‰"¦  «        }|�|                     |¦  «         ŒŒd}d}d}d}d}d}d}d}d}d}d}g }|D �]/}||j        z  }|j        r|d	z  }|                     |¦  «         n%|j        dk    r|d	z  }|                     |¦  «         |j        t2          j        k    rdd|j        v r||j        z  }Œ}d|j        v r||j        z  }Œ‘d|j        v r||j        z  }Œ¥d|j        v r||j        z  }Œ¹d|j        v r
||j        z  }ŒÍ|j        t2          j        k    rd}Œå|j        t2          j        k    rt          ||j        ¦  «        }�Œ|j        t2          j        k    r	|j        rd}�Œ1|||z   |z   z  }|||||||z   dœ}g }d}|dk    r |dk    r|d z  }|                     d!¦  «         |d"k    r+|d#z  }|                     d$t          |¦  «        › d%�¦  «         |r|d z  }|                     d&¦  «         |r&|d'k    s|d(k    r|d z  }|                     d)¦  «         |d k    r |d*k    r|d#z  }|                     d+¦  «         t          d||z   ¦  «        }g } t          j        }!|| j         k    s(|d,k    s"|r|d'k    s|d-k    r|d"k    s|rs|d"k    rm|dk    rgt          j!        }!|d,k    r|                      d.|› d/�¦  «         |r|                      d0¦  «         || j         k    r|                      d1|d2›�¦  «         nå|| j"        k    s&|dk    s |d	k    r|d	k    s|dk    r|d*k    s|d3k    s|r‹t          j#        }!|dk    r|                      d4|› d/�¦  «         nˆ|r|                      d5¦  «         np|d3k    r'|                      d6t          |¦  «        › d7�¦  «         nC|                      d8|d2›�¦  «         n)t          j        }!|                      d9|d2›d:|› d;�¦  «         t          |pd<||||!|||||| |||¬=¦  «        S )>u"  Ä�Ã¡nh giÃ¡ váº­t pháº©m tá»« chuá»—i vÄƒn báº£n Tooltip (Clipboard hoáº·c OCR).

        Args:
            text_blob: Chuá»—i vÄƒn báº£n Ä‘áº§y Ä‘á»§ cá»§a tooltip váº­t pháº©m.

        Returns:
            ItemEvaluationReport chá»©a káº¿t quáº£ phÃ¢n loáº¡i vÃ  chi tiáº¿t mod.
        zEmpty tooltip text©r   r$   c                ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S r0   )Ústrip)Ú.0Úlines     r2   ú
<listcomp>z6ItemTooltipEvaluator.evaluate_text.<locals>.<listcomp>a   s-   € ÐYÐYÐY $ÈDÏJÊJÉLÌLÐY�—’‘”ÐYÐYÐYr1   r   r   r   zItem Class:ú:é   zRarity:z---é   úItem Level:zItem\s+Level:\s*(\d+)ziLv[lI]:?\s*(\d+))z--------z
Item ClassÚRarityÚRequirementszLevel:zStr:zDex:zInt:zSockets:rK   Ú	CorruptedzCan be used in a Map Devicez	\{[^}]*\}u   â€¢-* c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S )N)Ú
startswith)rE   ÚpÚ
clean_lines     €r2   ú	<genexpr>z5ItemTooltipEvaluator.evaluate_text.<locals>.<genexpr>�   s1   øè è € ÐCÐC°�:×(Ò(¨Ñ+Ô+ÐCÐCÐCÐCÐCÐCr1   Nr   FÚFireÚColdÚ	LightningÚChaoszAll ElementalT)ÚfireÚcoldÚ	lightningÚchaosÚ	total_eleÚ	total_allr5   g      N@g      4@z)Life + Multi Resistance Synergy (+20 pts)g      T@g      .@z"High Pseudo Elemental Resistance (z%) (+15 pts)z'High-Value +Skill Gems Anchor (+20 pts)g      I@g      >@z1Boots Movement Speed + Survival Synergy (+20 pts)r7   z,Chaos & Elemental Survival Synergy (+15 pts)é   g      Y@zGod-roll gear with z Tier 1 affixesz(+Skill Gems with strong supporting statszOutstanding total score: z.1fg      9@zTradeable gear with zHigh tier Movement Speed bootszHigh Chaos Resistance (z%)zValuable stats total score: z%Low utility or vendor filler (Score: z, T1: ú)zUnknown Item)r   r   r   r   r   r   r   r    r"   r#   r$   r%   r&   r'   )$rD   r   r   r-   Ú
splitlinesÚ	enumeraterP   ÚsplitÚmaxÚupperÚlenÚreÚsearchÚ
IGNORECASEr   ÚgroupÚsubÚlstripÚanyr   ÚappendÚscoreÚ	is_tier_1Útier_estimateÚcategoryr   Ú
RESISTANCEÚnameÚvalueÚ
SKILL_GEMSÚLIFEÚ
MOVE_SPEEDr9   ÚKEEPr:   ÚSTASH)#r>   r@   Úlinesr   r   r   r   Úheader_lines_processedÚirF   ÚmÚm_ilvlÚevaluated_modsÚskip_prefixesÚmod_evalÚfire_resÚcold_resÚ	light_resÚ	chaos_resÚtotal_ele_resÚhas_skill_gemsÚmax_life_valÚhas_move_speed_t1r   r    Ú
base_scorer"   Úm_evalÚ
pseudo_resr&   Úsynergy_scorer   r$   r   rR   s#                                     @r2   Úevaluate_textz"ItemTooltipEvaluator.evaluate_textU   sD  ø€ ð ð 	l 	§¢Ñ 1Ô 1ð 	lÝ'Õ/CÔ/JÐUiÐTjÐkÑkÔkÐkàYÐY¨)¯/ª/Ñ*;Ô*;×*FÒ*FÑ*HÔ*HÐYÑYÔYˆð ˆ
ØˆØˆ	Øˆ
à!"ÐÝ  Ñ'Ô'ð 	1ñ 	1‰GˆAˆtØ�Š˜}Ñ-Ô-ð 1Ø!ŸZšZ¨¨QÑ/Ô/°Ô2×8Ò8Ñ:Ô:�
Ý),Ð-CÀQÈÁUÑ)KÔ)KÐ&Ð&Ø—’ Ñ+Ô+ð 1ØŸš C¨Ñ+Ô+¨AÔ.×4Ò4Ñ6Ô6×<Ò<Ñ>Ô>�Ø�q‘5�3˜u™:œ:Ò%Ð%¨e°A¸±E¬l×.EÒ.EÀeÑ.LÔ.LÐ%Ø % a¨!¡e¤× 2Ò 2Ñ 4Ô 4�IÝ),Ð-CÀQÈÁUÑ)KÔ)KÐ&Ñ&Ø—’ Ñ/Ô/ð 1Ý”IÐ6¸½b¼mÑLÔL�Øð 1Ý!$ Q§W¢W¨Q¡Z¤Z¡¤�Jùð ˜Š?ˆ?Ý”YÐ3°YÅÄÑNÔNˆFØð 2Ý  §¢¨a¡¤Ñ1Ô1�
ð .0ˆð
ˆð
 ð 	0ð 	0ˆDåœ ¨b°$Ñ7Ô7×=Ò=Ñ?Ô?ˆJà#×*Ò*¨8Ñ4Ô4ˆJØð ØåÐCÐCÐCÐC°]ÐCÑCÔCÑCÔCð ØØ˜YÒ&Ð&Øå/°
Ñ;Ô;ˆHØÐ#Ø×%Ò% hÑ/Ô/Ð/øð ˆØˆØˆ	Øˆ	ØˆØˆØˆØ!ÐàˆØˆØˆ
Ø.0ˆà$ð 	)ñ 	)ˆFØ˜&œ,Ñ&ˆJØÔð /Ø Ñ!�Ø×&Ò& vÑ.Ô.Ð.Ð.ØÔ%¨Ò*Ð*Ø Ñ!�Ø×&Ò& vÑ.Ô.Ð.ð Œ¥+Ô"8Ò8Ð8Ø˜Vœ[Ð(Ð(Ø ¤Ñ,�H�HØ˜vœ{Ð*Ð*Ø ¤Ñ,�H�HØ  F¤KÐ/Ð/Ø ¤Ñ-�I�IØ ¤Ð+Ð+Ø ¤Ñ-�I�IØ$¨¬Ð3Ð3Ø! V¤\Ñ1�MøØ”¥KÔ$:Ò:Ð:Ø!%��Ø”¥KÔ$4Ò4Ð4Ý" <°´Ñ>Ô>�‘Ø”¥KÔ$:Ò:Ð:¸vÔ?OÐ:Ø$(Ð!ùà˜( XÑ-°	Ñ9Ñ:ˆàØØ"ØØ&Ø&¨Ñ2ð
ð 
ˆ
ð &(ˆØˆð ˜4ÒÐ M°TÒ$9Ð$9Ø˜TÑ!ˆMØ×"Ò"Ð#NÑOÔOÐOð ˜DÒ Ð Ø˜TÑ!ˆMØ×"Ò"Ð#hÍÈMÑHZÔHZÐ#hÐ#hÐ#hÑiÔiÐið ð 	NØ˜TÑ!ˆMØ×"Ò"Ð#LÑMÔMÐMð ð 	X ,°$Ò"6Ð"6¸-È4Ò:OÐ:OØ˜TÑ!ˆMØ×"Ò"Ð#VÑWÔWÐWð ˜ÒÐ °$Ò!6Ð!6Ø˜TÑ!ˆMØ×"Ò"Ð#QÑRÔRÐRå˜#˜z¨MÑ9Ñ:Ô:ˆð  ˆÝ%Ô,ˆð ˜4Ô4Ò4Ð4Ø˜qÒ Ð Øð !Ø#.°$Ò#6Ð#6Ø Ò%Ð%¨-¸4Ò*?Ð*?Ø!ð +@Ø&2°dÒ&:Ð&:¸}ÐPTÒ?TÐ?Tå)Ô.ˆFØ˜qÒ Ð Ø—’ÐR°\ÐRÐRÐRÑSÔSÐSØð KØ—’ÐIÑJÔJÐJØ˜dÔ7Ò7Ð7Ø—’ÐL¸;ÐLÐLÐLÑMÔMÐMøð ˜4Ô5Ò5Ð5Ø˜qÒ Ð Ø Ò!Ð! l°aÒ&7Ð&7Ø Ò$Ð$¨¸$Ò)>Ð)>Ø˜TÒ!Ð!Ø ð "õ *Ô/ˆFØ˜qÒ Ð Ø—’ÐS°lÐSÐSÐSÑTÔTÐTÐTØ"ð QØ—’Ð?Ñ@Ô@Ð@Ð@Ø˜dÒ"Ð"Ø—’ÐK½¸Y¹¼ÐKÐKÐKÑLÔLÐLÐLà—’ÐO¸kÐOÐOÐOÑPÔPÐPÐPõ *Ô0ˆFØ�NŠNÐiÀ;ÐiÐiÐiÐZfÐiÐiÐiÑjÔjÐjå#ØÐ1 >Ø!ØØ!ØØ#Ø%Ø%Ø+Ø#ØØ%Ø+Øð
ñ 
ô 
ð 	
r1   Ú	img_inputú#Union[str, Image.Image, np.ndarray]c                ó´  — d}t          |t          ¦  «        rNt          j                             |¦  «        r.t
          �'t          j        |¦  «                             d¦  «        }nt          |t          j	        ¦  «        r/t
          �(t          j
        |¦  «                             d¦  «        }n6t
          �/t          |t
          j        ¦  «        r|                     d¦  «        }|€t          t          j        dg¬¦  «        S g }t          �¤	 t          j        |¦  «        }|                     dg ¦  «        D ]A}|                     dd¦  «                             ¦   «         }|r|                     |¦  «         ŒBn6# t&          $ r)}t          t          j        d|› �g¬¦  «        cY d}~S d}~ww xY wd	                     |¦  «        }|                      |¦  «        S )
u"  Ä�Ã¡nh giÃ¡ váº­t pháº©m tá»« áº£nh chá»¥p Tooltip hoáº·c toÃ n mÃ n hÃ¬nh thÃ´ng qua OCR.

        Args:
            img_input: Ä�Æ°á»�ng dáº«n áº£nh, Ä‘á»‘i tÆ°á»£ng PIL Image, hoáº·c numpy array.

        Returns:
            ItemEvaluationReport Ä‘Æ°á»£c bÃ³c tÃ¡ch tá»« áº£nh.
        NÚRGBzInvalid image inputrB   rz   Útextr   zOCR recognition error: ú
)Ú
isinstancer   ÚosÚpathÚexistsr   ÚopenÚconvertÚnpÚndarrayÚ	fromarrayr   r   r-   ÚwinocrÚrecognize_pil_syncÚgetrD   rm   Ú	ExceptionÚjoinrŽ   )	r>   r�   Úpil_imgÚ
text_linesÚ
ocr_resultrF   ÚtxtÚeÚ	full_texts	            r2   Úevaluate_imagez#ItemTooltipEvaluator.evaluate_image'  sâ  € ð *.ˆÝ�i¥Ñ%Ô%ð 	/ÝŒw�~Š~˜iÑ(Ô(ð ?­UÐ->Ýœ* YÑ/Ô/×7Ò7¸Ñ>Ô>�øÝ˜	¥2¤:Ñ.Ô.ð 	/µ5Ð3DÝ”o iÑ0Ô0×8Ò8¸Ñ?Ô?ˆGˆGÝÐ¥:¨i½¼Ñ#EÔ#EÐØ×'Ò'¨Ñ.Ô.ˆGàˆ?Ý'Õ/CÔ/JÐUjÐTkÐlÑlÔlÐlð !#ˆ
ÝÐð
Ý#Ô6°wÑ?Ô?�
Ø&ŸNšN¨7°BÑ7Ô7ð /ð /�DØŸ(š( 6¨2Ñ.Ô.×4Ò4Ñ6Ô6�CØð /Ø"×)Ò)¨#Ñ.Ô.Ð.øð/øõ ð ð ð Ý+Ý/Ô6Ø:°qÐ:Ð:Ð;ðñ ô ð ð ð ð ð ð øøøøðøøøð —I’I˜jÑ)Ô)ˆ	Ø×!Ò! )Ñ,Ô,Ð,s   ÄA,E: Å:
F-ÆF(Æ"F-Æ(F-N)r5   r7   )r9   r   r:   r   r;   r<   )r@   r   r;   r   )r�   r�   r;   r   )
r(   r)   r*   r+   r6   r,   r8   r?   rŽ   r©   r0   r1   r2   r4   r4   @   s�   € € € € € € ØbÐbð #'ÐÐ&Ð&Ð&Ñ&Ø#'ÐÐ'Ð'Ð'Ñ'ð '+Ø'+ð;ð ;ð ;ð ;ð ;ðP
ð P
ð P
ð P
ðd(-ð (-ð (-ð (-ð (-ð (-r1   r4   )r+   Ú
__future__r   Údataclassesr   r   r–   rf   Útypingr   r   r   r	   r
   r   Únumpyr›   ÚPILr   ÚImportErrorrž   Ú+src.assistant_tool.pickit.mod_tier_patternsr   r   r   r   r   r4   r0   r1   r2   ú<module>r±      s§  ððð ð" #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 	€	€	€	Ø 	€	€	€	Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à Ð Ð Ð ðØÐÐÐÐÐÐøØð ð ð Ø€E€E€EðøøøðØ€M€M€M€MøØð ð ð Ø€F€F€Fðøøøðð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ñ ô ñ „ðð$O-ð O-ð O-ð O-ð O-ñ O-ô O-ð O-ð O-ð O-s   ®5 µ?¾?ÁA ÁAÁA