§
    ñ·¦j  ã                   ó‚   — d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZmZ d„ Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ur  
Unit Tests for Atlas Node Selector & Precursor Tower Orchestrator (Doc 56)
==========================================================================
Kiá»ƒm thá»­ cÃ¡c báº¥t biáº¿n kiáº¿n trÃºc:
- INV-ATLAS-01: Safe Hideout Execution
- INV-ATLAS-02: Verified Node Target & Hover Confirmation
- INV-ATLAS-03: Zero Hot-Path Blocking
- INV-ATLAS-04: Zero Wishful Thinking
é    N)	Ú	AtlasNodeÚPrecursorTowerÚAtlasPerceptionEngineÚAtlasStrategyPlannerÚAtlasStrategyConfigÚAtlasNodeSelectorÚATLAS_FLAG_REQUIRE_HOVER_VERIFYÚ!ATLAS_FLAG_SOCKET_PRECURSOR_TOWERÚ#ATLAS_FLAG_AUTO_PROCEED_TO_WAYSTONEc                  óî   — t          dd¬¦  «        } |                      dddd¦  «        du sJ ‚|                      dddd¦  «        du sJ ‚|                      ddd	d
¦  «        \  }}|dk    sJ ‚|dk    sJ ‚d S )Ng      ž@g     à�@)Ú	ref_widthÚ
ref_heightç      Ž@g     à€@Tç      I@Fç      ¤@ç     €–@g      ”@g     €†@)r   Úis_in_viewportÚscale_point)ÚengineÚsxÚsys      ú1C:\Projects\AutoPOE2\tests\test_atlas_selector.pyÚ!test_atlas_perception_roi_scalingr      s�   € Ý"¨VÀÐGÑGÔG€Fà× Ò  ¨¨v°vÑ>Ô>À$ÐFÐFÐFÐFð × Ò   t¨V°VÑ<Ô<ÀÐEÐEÐEÐEð ×Ò  u¨f°fÑ=Ô=�F€BˆØ�Š<ˆ<ˆ<ˆ<Ø�Š;ˆ;ˆ;ˆ;ˆ;ˆ;ó    c            
      óT  — t          dddg d¢ddg¬¦  «        } t          | ¬¦  «        }t          d	dd
dd¬¦  «        t          ddddd¬¦  «        t          dddd
d¬¦  «        t          ddddd¬¦  «        g}|                     |¦  «        }|€J ‚d|j        v sJ ‚|j        dk    sJ ‚d S )NÚfarm_whitelisté   é   )ÚDesertedÚFortressÚCreekúVaal PyramidÚMaze©ÚmodeÚmin_tierÚmax_tierÚpreferred_mapsÚignored_maps©Úconfigz	Creek Mapç     À‚@ç      y@T©ÚnameÚtierÚscreen_xÚscreen_yÚbonus_completedúDeserted Mapé   ç     à…@ç     @@FúVaal Pyramid Mapç      ‰@zRandom Normal Mapg      Œ@r   )r   r   r   Úselect_best_noder/   r0   ©ÚcfgÚplannerÚ
candidatesÚbests       r   Ú'test_atlas_strategy_whitelist_selectionr@   (   sð   € Ý
ØØØØ8Ð8Ð8Ø$ fÐ-ðñ ô €Cõ #¨#Ð.Ñ.Ô.€Gõ 	�{¨°eÀeÐ]aÐbÑbÔbÝ�~¨B¸ÈÐ`eÐfÑfÔfÝÐ)°¸UÈUÐdiÐjÑjÔjÝÐ*°¸eÈeÐeiÐjÑjÔjð	€Jð ×#Ò# JÑ/Ô/€DØÐÐÐà˜œÐ"Ð"Ð"Ð"ØŒ9˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?r   c                  ó¼   — t          ddddgdg¬¦  «        } t          | ¬¦  «        }t          dd	d
d¬¦  «        g}|                     |¦  «        }|�
J d¦   «         ‚d S )Nr   r   r   r   r"   r$   r*   r8   r5   r9   r,   ©r/   r0   r1   r2   u?   Map trong danh sÃ¡ch Ä‘en báº¯t buá»™c pháº£i bá»‹ loáº¡i bá»�!)r   r   r   r:   r;   s       r   Ú'test_atlas_strategy_blacklist_rejectionrC   @   sƒ   € Ý
ØØØØ"�|Ø$Ð%ðñ ô €Cõ #¨#Ð.Ñ.Ô.€Gõ 	Ð)°¸UÈUÐSÑSÔSð€Jð ×#Ò# JÑ/Ô/€DØˆ<ˆ<ÐZ‰<Œ<ˆ<ˆ<ˆ<r   c                  ó  — t          ddddddg¬¦  «        } t          | ¬¦  «        }t          d	d
ddd¬¦  «        t          dd
ddd¬¦  «        g}|                     |¦  «        }|€J ‚|j        dk    sJ ‚|j        du sJ ‚d S )NÚ
bonus_rushr   r   Tr   r    )r%   r&   r'   Úprioritize_uncompleted_bonusr(   r*   r4   r5   r6   r7   r.   zFortress Mapg     p‡@g     0�@F)r   r   r   r:   r/   r3   r;   s       r   Útest_atlas_strategy_bonus_rushrG   S   sÁ   € Ý
ØØØØ%)Ø" JÐ/ðñ ô €Cõ #¨#Ð.Ñ.Ô.€Gõ 	�~¨B¸ÈÐ`dÐeÑeÔeÝ�~¨B¸ÈÐ`eÐfÑfÔfð€Jð
 ×#Ò# JÑ/Ô/€DØÐÐÐàŒ9˜Ò&Ð&Ð&Ð&ØÔ 5Ð(Ð(Ð(Ð(Ð(Ð(r   c                  ó  — t          ¦   «         } t          dddd¬¦  «        g}|                      |dd¬¦  «        }|d	         d
u sJ ‚d|d         v sJ ‚|                      |dd¬¦  «        }|d	         du sJ ‚|d         j        dk    sJ ‚d S )Nr4   r5   r6   r7   rB   r!   é   ©Úcandidate_nodesÚ	area_nameÚmonster_countÚsuccessFzINV-ATLAS-01ÚerrorúShoreline Hideoutr   TÚselected_node©r   r   Úplan_and_executer/   )Úselectorr>   Ú
res_dangerÚres_safes       r   Ú(test_inv_atlas_01_safe_hideout_executionrW   i   sÙ   € Ý Ñ"Ô"€Hõ 	�~¨B¸ÈÐOÑOÔOð€Jð ×*Ò*Ø"ØØð +ñ ô €Jð
 �iÔ  EÐ)Ð)Ð)Ð)Ø˜Z¨Ô0Ð0Ð0Ð0Ð0ð ×(Ò(Ø"Ø%Øð )ñ ô €Hð
 �IÔ $Ð&Ð&Ð&Ð&Ø�OÔ$Ô)¨^Ò;Ð;Ð;Ð;Ð;Ð;r   c                  óÐ   — t          ¦   «         } t          dddd¬¦  «        g}t          ddd¬	¦  «        }|                      |d
d|¬¦  «        }|d         du sJ ‚|d         du sJ ‚d S )Nr4   r5   r6   r7   rB   r   g     Àw@é   ©r1   r2   Úempty_socketsrP   r   ©rK   rL   rM   Úavailable_towerrN   TÚtower_socketed©r   r   r   rS   )rT   r>   ÚtowerÚress       r   Ú test_precursor_tower_socket_flagrb   ‚   s˜   € Ý Ñ"Ô"€Hå�~¨B¸ÈÐOÑOÔOð€Jõ  E°EÈÐKÑKÔK€Eà
×
#Ò
#Ø"Ø%ØØð	 $ñ ô €Cð ˆyŒ>˜TÐ!Ð!Ð!Ð!ØÐÔ  DÐ(Ð(Ð(Ð(Ð(Ð(r   c                  ó¾   — t          ¦   «         } t          dddd¬¦  «        g}|                      |dd¬¦  «        }|d	         d
u sJ ‚d|d         v sJ ‚|d         �J ‚d S )Nr4   r5   g      Y@r   rB   rP   r   rJ   rN   FúINV-ATLAS-02rO   rQ   )r   r   rS   )rT   Úinvalid_candidatesra   s      r   Ú-test_inv_atlas_02_out_of_viewport_fail_closedrf   “   s“   € Ý Ñ"Ô"€Hõ 	�~¨B¸ÈÐNÑNÔNðÐð ×
#Ò
#Ø*Ø%Øð $ñ ô €Cð
 ˆyŒ>˜UÐ"Ð"Ð"Ð"Ø˜S œ\Ð)Ð)Ð)Ð)ØˆÔÐ'Ð'Ð'Ð'Ð'r   c                  ó  — t          ¦   «         } t          dddd¬¦  «        g}|                      |ddd¬	¦  «        }|d
         du sJ ‚d|d         v sJ ‚|                      |ddd¬	¦  «        }|d
         du sJ ‚|d         j        dk    sJ ‚d S )Nr4   r5   r-   r6   rB   rP   r   T)rK   rL   rM   Ú	chat_openrN   Frd   rO   rQ   rR   )rT   Úoccluded_candidatesÚres_chatÚ
res_normals       r   Ú'test_inv_atlas_02_occlusion_fail_closedrl   ¤   sà   € Ý Ñ"Ô"€Hõ 	�~¨B¸ÈÐOÑOÔOðÐð
 ×(Ò(Ø+Ø%ØØð	 )ñ ô €Hð �IÔ %Ð'Ð'Ð'Ð'Ø˜X gÔ.Ð.Ð.Ð.Ð.ð ×*Ò*Ø+Ø%ØØð	 +ñ ô €Jð �iÔ  DÐ(Ð(Ð(Ð(Ø�oÔ&Ô+¨~Ò=Ð=Ð=Ð=Ð=Ð=r   c                  óÐ   — t          ¦   «         } t          dddd¬¦  «        g}t          ddd¬¦  «        }|                      |d	d
|¬¦  «        }|d         du sJ ‚|d         du sJ ‚d S )Nr4   r5   r6   r7   rB   r   é   rZ   rP   r   r\   rN   Tr^   Fr_   )rT   r>   Ú	out_towerra   s       r   Ú/test_precursor_tower_outside_viewport_rejectionrp   À   s˜   € Ý Ñ"Ô"€Hå�~¨B¸ÈÐOÑOÔOð€Jõ ¨°tÈ1ÐMÑMÔM€Ià
×
#Ò
#Ø"Ø%ØØ!ð	 $ñ ô €Cð ˆyŒ>˜TÐ!Ð!Ð!Ð!àÐÔ  EÐ)Ð)Ð)Ð)Ð)Ð)r   c                  óº   — t          ¦   «         } t          dddd¬¦  «        }|                      |dddd	¬
¦  «        }|d         du sJ ‚|d         j        dk    sJ ‚d S )Nr4   r5   g     ì“@g      „@rB   rP   r   r   r   )rL   rM   Úscreen_wÚscreen_hrN   TrQ   )r   r   Úselect_noder/   )rT   Únodera   s      r   Ú&test_atlas_selector_select_node_directrv   Ó   sy   € Ý Ñ"Ô"€HÝ˜.¨r¸FÈUÐSÑSÔS€DØ
×
Ò
˜tÐ/BÐRSÐ^dÐouÐ
Ñ
vÔ
v€CØˆyŒ>˜TÐ!Ð!Ð!Ð!ØˆÔÔ$¨Ò6Ð6Ð6Ð6Ð6Ð6r   )Ú__doc__ÚosÚpytestÚ&src.assistant_tool.atlas_node_selectorr   r   r   r   r   r   r	   r
   r   r   r@   rC   rG   rW   rb   rf   rl   rp   rv   © r   r   ú<module>r|      s4  ððð ð 
€	€	€	Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ðð ð ð0[ð [ð [ð&)ð )ð )ð,<ð <ð <ð2)ð )ð )ð"(ð (ð (ð">ð >ð >ð8*ð *ð *ð&7ð 7ð 7ð 7ð 7r   