§
    wÉ«j,v  ã                   ó  — d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
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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#d„ Z$d „ Z%d!„ Z&d"„ Z'd#„ Z(d$„ Z)d%„ Z*d&„ Z+d'„ Z,d(„ Z-dS ))u  
Unit Tests for AutonomousMappingCoordinator (Doc 48 / Doc 56 / Doc 43)
======================================================================
Kiá»ƒm thá»­ cÃ¡c báº¥t biáº¿n kiáº¿n trÃºc:
- INV-FARM-CLOSED-LOOP: Kiá»ƒm tra chuá»—i 6 giai Ä‘oáº¡n Ä‘iá»�u phá»‘i.
- INV-TOWN-PORTAL-KEY: Báº£o Ä‘áº£m phÃ­m '.' (VK 0xBE) Ä‘Æ°á»£c sá»­ dá»¥ng.
- INV-ATLAS-01: An toÃ n táº¡i Hideout.
- INV-ATLAS-02: Fail-closed khi khÃ´ng cÃ³ Waystone hoáº·c lá»—i tá»�a Ä‘á»™.
- INV-CI-01: Cáº¥u hÃ¬nh Vitals CI (4284 ES, 897 Mana, 241 Ward).
é    N)ÚPath)Ú	MagicMockÚpatch)ÚAutonomousMappingCoordinatorc                  óž   — t          dddd¬¦  «        } | j        dk    sJ ‚| j        dk    sJ ‚| j        dk    sJ ‚| j        €J ‚| j        €J ‚d S )Né 
  é   zcaptures/test_pipelineé
   )Úscreen_wÚscreen_hÚcapture_dirÚmap_duration_sec)r   r   r   r   ÚscannerÚselector©Úcoordinators    úAC:\Projects\AutoPOE2\tests\test_autonomous_mapping_coordinator.pyÚtest_coordinator_initializationr      s„   € Ý.ØØØ,Øð	ñ ô €Kð Ô 4Ò'Ð'Ð'Ð'ØÔ 4Ò'Ð'Ð'Ð'ØÔ'¨2Ò-Ð-Ð-Ð-ØÔÐ*Ð*Ð*ØÔÐ+Ð+Ð+Ð+Ð+ó    c                  ó„   — t          dd¬¦  «        } | j                             dd¦  «        \  }}|dk    sJ ‚|dk    sJ ‚d S )Nr   r	   ©r   r   r   éÃ  é6  )r   r   Úget_slot_center)r   ÚcxÚcys      r   Ú$test_coordinator_scanner_integrationr   "   sN   € Ý.¸ÀtÐLÑLÔL€KàÔ ×0Ò0°°AÑ6Ô6�F€BˆØ�Š:ˆ:ˆ:ˆ:Ø�Š9ˆ9ˆ9ˆ9ˆ9ˆ9r   c                  ó8   — g d¢} t          | ¦  «        dk    sJ ‚d S )N©ÚSTAGE1_PRECHECKÚSTAGE2_MAP_DEVICEÚSTAGE3_ATLAS_ACTIVATIONÚSTAGE4_MAP_ENTRANCEÚSTAGE5_MAP_CLEARÚSTAGE6_PORTAL_RETURNé   )Úlen)Úexpected_stagess    r   Ú"test_coordinator_stage_definitionsr)   *   s4   € ðð ð €Oõ ˆÑÔ 1Ò$Ð$Ð$Ð$Ð$Ð$r   c                  ó>  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          d¬¦  «        | _        t          dd¬¦  «        5  t          dddœ¬¦  «        | j        _        t          dd	g¬¦  «        | j        _        |  	                    ¦   «         }|d
         dk    sJ ‚|d         dk    sJ ‚|d         rJ ‚|d         rJ ‚t          |d         ¦  «        dk    sJ ‚|d         dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NT©Úreturn_valueúcaptures/fake_inv.pngúos.path.existsé   F©Úoccupied_countÚis_full©r   r   r   r   ç     `P@)é   r   i	  r   gš™™™™M@ÚstatusÚSUCCESSÚoccupied_slotsr2   Úhooded_one_triggeredÚwaystones_foundé   Úselected_slot)r   r   Úensure_focusÚ	press_keyÚcapture_stepr   r   Úscan_full_inventoryÚscan_all_waystonesÚexecute_stage1_precheckr'   ©r   Úress     r   Útest_stage1_precheck_successrE   6   s¦  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ(Ð6MÐNÑNÔN€KÔå	Ð¨dÐ	3Ñ	3Ô	3ð ?ð ?Ý2;Ø ØðJ
ð J
ð 3ñ 3ô 3ˆÔÔ/õ 2;Ø#Ø#ðI
ð 2ñ 2ô 2ˆÔÔ.ð
 ×1Ò1Ñ3Ô3ˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÐ#Ô$¨Ò*Ð*Ð*Ð*Ø�y”>Ð!Ð!Ð!ØÐ-Ô.Ð.Ð.Ð.Ý�3Ð(Ô)Ñ*Ô*¨aÒ/Ð/Ð/Ð/Ø�?Ô#Ð'>Ò>Ð>Ð>Ð>Ð>ð!?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s   ÁB'DÄDÄDc                  óJ  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          d¬¦  «        | _        t          dd¬¦  «        5  t          dddœ¬¦  «        | j        _        t          dddœ¬¦  «        | j        _        t          d	g¬¦  «        | j        _	        |  
                    ¦   «         }|d
         dk    sJ ‚|d         du sJ ‚|d         du sJ ‚| j        j                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r-   r.   é4   r0   ÚIDENTIFY_REQUESTED)Ú	triggeredr6   r3   r6   r7   r2   r9   )r   r   r=   r>   r?   r   r   r@   Ú%check_and_trigger_hooded_one_identifyrA   rB   Úassert_called_oncerC   s     r   Ú7test_stage1_precheck_full_inventory_triggers_hooded_onerL   O   s¼  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ(Ð6MÐNÑNÔN€KÔå	Ð¨dÐ	3Ñ	3Ô	3ð Wð WÝ2;Ø ØðJ
ð J
ð 3ñ 3ô 3ˆÔÔ/õ ENØØ*ð\
ð \
ð Eñ Eô EˆÔÔAõ 2;Ø#ðI
ð 2ñ 2ô 2ˆÔÔ.ð ×1Ò1Ñ3Ô3ˆØ�8Œ} 	Ò)Ð)Ð)Ð)Ø�9Œ~ Ð%Ð%Ð%Ð%ØÐ)Ô*¨dÐ2Ð2Ð2Ð2ØÔÔA×TÒTÑVÔVÐVð#Wð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wð Wð Ws   ÁB.DÄDÄDc                  óÐ  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          d¬¦  «        | _        t          dd¬¦  «        5  t          dddœ¬¦  «        | j        _        t          g ¬¦  «        | j        _        |  	                    ¦   «         }|d         d	k    sJ ‚d
|d         v sJ ‚|d         �J ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r-   r.   r
   Fr0   r6   ÚFAILEDúFail-closedÚerrorr<   )
r   r   r=   r>   r?   r   r   r@   rA   rB   rC   s     r   Ú.test_stage1_precheck_no_waystones_fails_closedrQ   i   sK  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ(Ð6MÐNÑNÔN€KÔå	Ð¨dÐ	3Ñ	3Ô	3ð 
,ð 
,Ý2;Ø ØðJ
ð J
ð 3ñ 3ô 3ˆÔÔ/õ 2;ÈÐ1KÑ1KÔ1KˆÔÔ.à×1Ò1Ñ3Ô3ˆØ�8Œ} Ò(Ð(Ð(Ð(Ø  G¤Ð,Ð,Ð,Ð,Ø�?Ô#Ð+Ð+Ð+Ð+ð
,ð 
,ð 
,ñ 
,ô 
,ð 
,ð 
,ð 
,ð 
,ð 
,ð 
,ð 
,øøøð 
,ð 
,ð 
,ð 
,ð 
,ð 
,s   ÁA0CÃCÃ"Cc                  ó  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¦  «        5 }|  
                    ¦   «         }|d         dk    sJ ‚|d	         du sJ ‚d
„ | j        j        D ¦   «         }d|vs
J d¦   «         ‚d|vs
J d¦   «         ‚| j        j        dk    sJ ‚| j                             ddd¬¦  «         | j                             ddd¬¦  «         |j        dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   úcaptures/fake_device.pngF©é—  é…  ú ctypes.windll.user32.mouse_eventr6   r7   Úzoom_appliedc                 ó*   — g | ]}|d          d          ‘ŒS ©r   © ©Ú.0Úcalls     r   ú
<listcomp>z*test_stage2_map_device.<locals>.<listcomp>‹   ó    € ÐSÐSÐS d�t˜A”w˜q”zÐSÐSÐSr   éU   uA   Cáº¤M TUYá»†T Ä�á»�I gá»­i phÃ­m VK_U (0x55) khi má»Ÿ Map Device!éF   u[   Cáº¤M TUYá»†T Ä�á»�I gá»­i phÃ­m VK_F (0x46) Ä‘á»ƒ tÆ°Æ¡ng tÃ¡c Map Device (F lÃ  Skill 8)!é   rU   rV   ç333333ó?©Údelay_afterio  é^   g       @é   )r   r   r=   r>   Úclickr?   Ú_core_owns_map_device_loopÚfind_map_device_screen_posÚis_atlas_ui_openr   Úexecute_stage2_map_deviceÚcall_args_listÚ
call_countÚassert_any_call)r   Úmock_mouse_eventrD   Úcalled_keyss       r   Útest_stage2_map_devicers   |   sì  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ!™œ€KÔÝ(Ð6PÐQÑQÔQ€KÔÝ-6ÀEÐ-JÑ-JÔ-J€KÔ*Ý-6ÀKÐ-PÑ-PÔ-P€KÔ*Ý#,¸$Ð#?Ñ#?Ô#?€KÔ å	Ð1Ñ	2Ô	2ð 0Ð6FØ×3Ò3Ñ5Ô5ˆØ�8Œ} 	Ò)Ð)Ð)Ð)Ø�>Ô" dÐ*Ð*Ð*Ð*àSÐS¨kÔ.CÔ.RÐSÑSÔSˆØ˜;Ð&Ð&Ð&Ð(kÑ&Ô&Ð&Ø˜;Ð&Ð&Ð&ð  )FÑ&Ô&Ð&ØÔ Ô+¨qÒ0Ð0Ð0Ð0ØÔ×)Ò)¨$°ÀÐ)ÑEÔEÐEØÔ×)Ò)¨$°ÀÐ)ÑDÔDÐDàÔ*¨aÒ/Ð/Ð/Ð/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   Â-B:E5Å5E9Å<E9c                  ó‚  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        |                      ¦   «         }|d         dk    sJ ‚|d         du sJ ‚| j                             ¦   «          | j                             ¦   «          d S )NTr+   r6   r7   Úskipped_core_owner)r   r   r=   r>   ri   rj   rm   Úassert_not_calledrC   s     r   Ú+test_stage2_skips_when_core_owns_map_devicerw   •   s¸   € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ!™œ€KÔÝ-6ÀDÐ-IÑ-IÔ-I€KÔ*à
×
/Ò
/Ñ
1Ô
1€CØˆxŒ=˜IÒ%Ð%Ð%Ð%ØÐ#Ô$¨Ð,Ð,Ð,Ð,ØÔ×+Ò+Ñ-Ô-Ð-ØÔ×'Ò'Ñ)Ô)Ð)Ð)Ð)r   c                  ó’  — t          ¦   «         } t          d¦  «        5 }|                      ddd¬¦  «         |j        dk    sJ ‚|                     ddddd¦  «         |                     ¦   «          |                      d	dd¬¦  «         |j        dk    sJ ‚|                     dddd
d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrW   Té   gü©ñÒMbP?)Úzoom_inÚstepsÚ
step_delayi   r   éx   Fiˆÿÿÿ)r   r   Údynamic_camera_zoomro   Úassert_called_withÚ
reset_mock)r   rq   s     r   Útest_dynamic_camera_zoomr�   £   s9  € Ý.Ñ0Ô0€KÝ	Ð1Ñ	2Ô	2ð CÐ6FØ×'Ò'°¸AÈ%Ð'ÑPÔPÐPØÔ*¨aÒ/Ð/Ð/Ð/Ø×+Ò+¨F°A°q¸#¸qÑAÔAÐAà×#Ò#Ñ%Ô%Ð%Ø×'Ò'°¸QÈ5Ð'ÑQÔQÐQØÔ*¨aÒ/Ð/Ð/Ð/Ø×+Ò+¨F°A°q¸$ÀÑBÔBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cs   žBB<Â<C ÃC c            	      óT  — t          ¦   «         } |                      dddddd¦  «        \  }}}|||fdk    sJ ‚|                      ddddddd¬¦  «        \  }}}|dk    sJ ‚|dk    sJ ‚|dk    sJ ‚|                      ddddddd¬¦  «        \  }}}|dk    sJ ‚|dk     sJ ‚|dk    sJ ‚d S )Nç        g      $@)rƒ   rƒ   r   r   )Úpreferred_handr5   éÿÿÿÿ)r   Úcompute_tangent_slide)r   ÚbxÚbyÚhandÚbx_rÚby_rÚhand_rs          r   Ú#test_compute_tangent_slide_geometryr�   °   sõ   € Ý.Ñ0Ô0€Kà×4Ò4°S¸#¸sÀCÈÈtÑTÔT�L€BˆˆDØ��Dˆ>˜]Ò*Ð*Ð*Ð*ð ×4Ò4°S¸#¸tÀSÈ$ÐPTÐefÐ4ÑgÔg�L€BˆˆDð
 �1Š9ˆ9ˆ9ˆ9à�Š8ˆ8ˆ8ˆ8Ø�Š8ˆ8ˆ8ˆ8ð %×:Ò:¸3ÀÀTÈ3ÐPTÐVZÐkmÐ:ÑnÔnÑ€Dˆ$�Ø�RŠ<ˆ<ˆ<ˆ<Ø�#Š:ˆ:ˆ:ˆ:Ø�#Š:ˆ:ˆ:ˆ:ˆ:ˆ:r   c            	      ó2  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¦  «        5  |  
                    dd¬¦  «        }|d	         d
k    sJ ‚|d         du sJ ‚| j                             dddddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   rS   FrW   )ç      Y@ç      i@)r�   r�   )Údevice_world_posÚplayer_world_posr6   r7   Ú
approachedr�   r�   ç      2@g       @)Úinteract_radiusÚmax_duration_sec)r   r   r=   r>   ri   r?   Ú%navigate_towards_with_tangent_slidingrj   rl   r   rm   Úassert_called_once_withrC   s     r   Ú.test_stage2_map_device_approaches_when_distantr™   È   ss  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ!™œ€KÔÝ(Ð6PÐQÑQÔQ€KÔÝ8AÈtÐ8TÑ8TÔ8T€KÔ5Ý-6ÀEÐ-JÑ-JÔ-J€KÔ*Ý#,¸$Ð#?Ñ#?Ô#?€KÔ å	Ð1Ñ	2Ô	2ð 

ð 

à×3Ò3Ø+Ø+ð 4ñ 
ô 
ˆð �8Œ} 	Ò)Ð)Ð)Ð)Ø�<Ô  DÐ(Ð(Ð(Ð(ØÔ9×QÒQØ�5˜% ¸Èsð 	Rñ 	
ô 	
ð 	
ð

ð 

ð 

ñ 

ô 

ð 

ð 

ð 

ð 

ð 

ð 

ð 

øøøð 

ð 

ð 

ð 

ð 

ð 

s   Â-ADÄDÄDc                  óh  — t          ¦   «         } |                      dddd¦  «        \  }}|dk    sJ ‚|dk    sJ ‚|                      ddddd¬¦  «        \  }}|                      ddddd¬¦  «        \  }}t          j        |dz
  |dz
  ¦  «        }t          j        |dz
  |dz
  ¦  «        }||k    sJ ‚d S )Nr�   é   iÐ  g      ^@T)Úis_zoomed_inF)r   Ú"project_map_device_world_to_screenÚmathÚhypot)	r   r   r   Úpx_zoomÚpy_zoomÚpx_normÚpy_normÚ	dist_zoomÚ	dist_norms	            r   Ú'test_project_map_device_world_to_screenr¦   ß   sÜ   € Ý.Ñ0Ô0€Kà×;Ò;¸EÀ5È%ÐQVÑWÔW�F€BˆØ�Š:ˆ:ˆ:ˆ:Ø�Š9ˆ9ˆ9ˆ9ð #×EÒEÀeÈUÐTYÐ[`ÐosÐEÑtÔtÑ€GˆWØ"×EÒEÀeÈUÐTYÐ[`ÐotÐEÑuÔuÑ€GˆWå”
˜7 T™>¨7°S©=Ñ9Ô9€IÝ”
˜7 T™>¨7°S©=Ñ9Ô9€IØ�yÒ Ð Ð Ð Ð Ð r   c                  óÖ   — t          ¦   «         } t          ¦   «         | _        t          d ¬¦  «        | _        |                      ddddd¬¦  «        }|du sJ ‚| j        j        dk    sJ ‚d S )Nr+   r�   g     @Z@r”   )r•   Tr   )r   r   Úsend_wasd_directionÚget_player_world_posr—   ro   )r   Úreacheds     r   Ú*test_navigate_towards_with_tangent_slidingr«   ï   sv   € Ý.Ñ0Ô0€KÝ&/¡k¤k€KÔ#Ý'0¸dÐ'CÑ'CÔ'C€KÔ$à×?Ò?ÀÀuÈeÐUZÐlpÐ?ÑqÔq€GØ�dˆ?ˆ?ˆ?ˆ?ØÔ*Ô5¸Ò:Ð:Ð:Ð:Ð:Ð:r   c                  óˆ  — t          ¦   «         } t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | j        _        t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _	        t          d¬¦  «        | _
        t          d¬¦  «        | _        t          d¦  «        5  |                      d¬	¦  «        }|d
         dk    sJ ‚| j                             ¦   «          | j        j                             ¦   «          | j                             ddd¬¦  «         | j                             ddd¬¦  «         | j	                             ddd¬¦  «         | j	                             ddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   ©éÕ  éÉ  Fúcaptures/fake_activated.png©é3  éî  ú
time.sleep©r   r   r   r4   ©Úwaystone_slotr6   r7   éI   é   ç      à?re   r   r   r®   r¯   gš™™™™™é?r²   r³   )r   r   r=   Úfind_reachable_atlas_noder   Úselect_nodeÚis_inventory_openr>   Ú
ctrl_clickri   r?   Úfind_traverse_buttonr   Úexecute_stage3_atlas_activationrK   r˜   rp   rC   s     r   Útest_stage3_atlas_activationrÁ   ù   sþ  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ,5À:Ð,NÑ,NÔ,N€KÔ)Ý'0¸dÐ'CÑ'CÔ'C€KÔÔ$Ý$-¸5Ð$AÑ$AÔ$A€KÔ!Ý%™KœK€KÔÝ&™[œ[€KÔÝ!™œ€KÔÝ(Ð6SÐTÑTÔT€KÔÝ'0¸kÐ'JÑ'JÔ'J€KÔ$å	ˆ|Ñ	Ô	ð Fð FØ×9Ò9ÐH\Ð9Ñ]Ô]ˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÔ-×@Ò@ÑBÔBÐBØÔÔ(×;Ò;Ñ=Ô=Ð=ØÔ×5Ò5°d¸DÈcÐ5ÑRÔRÐRØÔ×6Ò6°t¸SÈcÐ6ÑRÔRÐRØÔ×)Ò)¨#¨sÀÐ)ÑDÔDÐDØÔ×)Ò)¨$°ÀÐ)ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð Fð Fs   ÃCF7Æ7F;Æ>F;c                  óž  — t          ¦   «         } t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | j        _        t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _	        t          d¬¦  «        | _
        t          d¬¦  «        | _        t          d¦  «        5  |                      d¬¦  «        }|d	         d
k    sJ ‚| j                             ¦   «          | j                             ddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r­   r°   r±   r´   rµ   r¶   r6   r7   r   r   rº   re   )r   r   r=   r»   r   r¼   r½   r>   r¾   ri   r?   r¿   r   rÀ   rv   r˜   rC   s     r   Ú2test_stage3_inventory_not_reclosed_if_already_openrÃ     sŒ  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ,5À:Ð,NÑ,NÔ,N€KÔ)Ý'0¸dÐ'CÑ'CÔ'C€KÔÔ$Ý$-¸4Ð$@Ñ$@Ô$@€KÔ!Ý%™KœK€KÔÝ&™[œ[€KÔÝ!™œ€KÔÝ(Ð6SÐTÑTÔT€KÔÝ'0¸kÐ'JÑ'JÔ'J€KÔ$å	ˆ|Ñ	Ô	ð Sð SØ×9Ò9ÐH\Ð9Ñ]Ô]ˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÔ×/Ò/Ñ1Ô1Ð1ØÔ×6Ò6°t¸SÈcÐ6ÑRÔRÐRð	Sð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sð Sð Ss   ÃAEÅEÅ	Ec                  ó–  — t          ¦   «         } t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | j        _        t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _	        t          d¬¦  «        | _
        t          d ¬¦  «        | _        t          d¦  «        5  |                      d¬¦  «        }|d         d	k    sJ ‚d
|d         v sJ ‚t          d„ | j	        j        D ¦   «         ¦  «        rJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r­   r°   r´   rµ   r¶   r6   rN   ÚTRAVERSErP   c              3   ó<   K  — | ]}|j         d d…         dk    V — Œd S )Nr;   r±   )Úargs)r]   Úcs     r   ú	<genexpr>z7test_stage3_traverse_ocr_fail_closed.<locals>.<genexpr>3  s1   è è € Ð[Ð[°Q�q”v˜b˜q˜b”z [Ò0Ð[Ð[Ð[Ð[Ð[Ð[r   )r   r   r=   r»   r   r¼   r½   r>   r¾   ri   r?   r¿   r   rÀ   Úanyrn   rC   s     r   Ú$test_stage3_traverse_ocr_fail_closedrË   #  sš  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ,5À:Ð,NÑ,NÔ,N€KÔ)Ý'0¸dÐ'CÑ'CÔ'C€KÔÔ$Ý$-¸4Ð$@Ñ$@Ô$@€KÔ!Ý%™KœK€KÔÝ&™[œ[€KÔÝ!™œ€KÔÝ(Ð6SÐTÑTÔT€KÔÝ'0¸dÐ'CÑ'CÔ'C€KÔ$å	ˆ|Ñ	Ô	ð \ð \Ø×9Ò9ÐH\Ð9Ñ]Ô]ˆØ�8Œ} Ò(Ð(Ð(Ð(Ø˜S œ\Ð)Ð)Ð)Ð)ÝÐ[Ð[¸+Ô:KÔ:ZÐ[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[ð	\ð \ð \ñ \ô \ð \ð \ð \ð \ð \ð \ð \øøøð \ð \ð \ð \ð \ð \s   ÃAD>Ä>EÅEc                  ó&  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¬¦  «        | _        t          d¦  «        5  |  
                    ¦   «         }|d         dk    sJ ‚d	|d
         v sJ ‚| j                             ddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   rS   FrT   rW   r6   rN   zINV-MAPDEVICE-VERIFY-UIrP   rU   rV   rd   re   )r   r   r=   r>   ri   r?   rj   rk   rl   r   rm   rp   rC   s     r   Ú+test_stage2_atlas_ui_unverified_fail_closedrÍ   6  se  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ!™œ€KÔÝ(Ð6PÐQÑQÔQ€KÔÝ-6ÀEÐ-JÑ-JÔ-J€KÔ*Ý-6ÀKÐ-PÑ-PÔ-P€KÔ*Ý#,¸%Ð#@Ñ#@Ô#@€KÔ å	Ð1Ñ	2Ô	2ð Fð FØ×3Ò3Ñ5Ô5ˆØ�8Œ} Ò(Ð(Ð(Ð(Ø(¨C°¬LÐ8Ð8Ð8Ð8àÔ×)Ò)¨$°ÀÐ)ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð Fð Fs   Â-ADÄD
ÄD
c                  óâ  — t          dd¬¦  «        } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _	        d | _
        t          d¦  «        5  |                      ¦   «         }|d	         d
k    sJ ‚|d         du sJ ‚| j                             ¦   «          | j                             ddd¬¦  «         | j                             ¦   «          | j        j        dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r	   r   Tr+   úcaptures/fake_entered.png©éÁ  éÂ  r´   r6   r7   Úzone_transitionedrÑ   rÒ   g333333Ó?re   r;   )r   r   r=   Údismiss_modalsri   Úhoverr>   r¨   r?   Úfind_portal_screen_posÚlog_watcherr   Úexecute_stage4_map_entrancerK   r˜   rv   ro   rC   s     r   Útest_stage4_map_entrancerÙ   H  s£  € Ý.¸ÀtÐLÑLÔL€KÝ(°dÐ;Ñ;Ô;€KÔÝ!*¡¤€KÔÝ!™œ€KÔÝ!™œ€KÔÝ%™KœK€KÔÝ&/¡k¤k€KÔ#Ý(Ð6QÐRÑRÔR€KÔÝ)2À
Ð)KÑ)KÔ)K€KÔ&Ø"€KÔå	ˆ|Ñ	Ô	ð ?ð ?Ø×5Ò5Ñ7Ô7ˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÐ&Ô'¨4Ð/Ð/Ð/Ð/ØÔ"×5Ò5Ñ7Ô7Ð7ØÔ×1Ò1°#°sÈÐ1ÑLÔLÐLØÔ×/Ò/Ñ1Ô1Ð1ØÔ.Ô9¸QÒ>Ð>Ð>Ð>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s   ÃBE$Å$E(Å+E(c                  ó–  — t          dd¬¦  «        } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          d¬¦  «        | _	        t          ¦   «         }t          ¦   «         }d|_
        ||j        _        || _        t          d	¦  «        5  |                      ¦   «         }|d
         dk    sJ ‚|d         du sJ ‚d|d         v sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r	   r   Tr+   rÏ   rÐ   zShoreline Hideoutr´   r6   rN   rÓ   FrO   rP   )r   r   r=   rÔ   ri   rÕ   r>   r¨   r?   rÖ   Ú	area_nameÚseed_latest_playable_zoner,   r×   r   rØ   ©r   Úmock_watcherÚ	mock_zonerD   s       r   Ú-test_stage4_map_entrance_timeout_fails_closedrà   ^  s~  € Ý.¸ÀtÐLÑLÔL€KÝ(°dÐ;Ñ;Ô;€KÔÝ!*¡¤€KÔÝ!™œ€KÔÝ!™œ€KÔÝ%™KœK€KÔÝ&/¡k¤k€KÔ#Ý(Ð6QÐRÑRÔR€KÔÝ)2À
Ð)KÑ)KÔ)K€KÔ&å‘;”;€LÝ‘”€IØ-€IÔØ:C€LÔ*Ô7Ø*€KÔå	ˆ|Ñ	Ô	ð -ð -Ø×5Ò5Ñ7Ô7ˆØ�8Œ} Ò(Ð(Ð(Ð(ØÐ&Ô'¨5Ð0Ð0Ð0Ð0Ø  G¤Ð,Ð,Ð,Ð,Ð,ð	-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   Ã5;D>Ä>EÅEc            
      ó¢  — t          d¬¦  «        } t          d¬¦  «        | _        t          d¦  «        5 }|j        }dddd	œ|j        _        |                      ¦   «         }|d
         dk    sJ ‚|d         d         du sJ ‚|                     t          t          d¦  «        ¦  «        dddddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Né   )r   Tr+   z8tools.autonomous_mapping_coordinator.AutonomousMapRunnerÚ	COMPLETEDFé   )r6   Údeath_detectedÚcaptured_framesr6   r7   Úrunner_resultrå   zbin/AutoPOE2_Core.exeç      @i¼  i�  éñ   )Úcore_exer–   Úcapture_interval_secÚportal_exitÚmax_esÚmax_manaÚmax_ward)
r   r   r=   r   r,   ÚstartÚexecute_stage5_map_clearr˜   Ústrr   )r   Ú
MockRunnerÚmock_instancerD   s       r   Útest_stage5_map_clearrõ   v  s?  € Ý.ÀÐCÑCÔC€KÝ(°dÐ;Ñ;Ô;€KÔå	ÐIÑ	JÔ	Jð 
ÈjØ"Ô/ˆà!Ø#Ø ð,
ð ,
ˆÔÔ(ð ×2Ò2Ñ4Ô4ˆØ�8Œ} 	Ò)Ð)Ð)Ð)Ø�?Ô#Ð$4Ô5¸Ð>Ð>Ð>Ð>Ø×*Ò*Ý�Ð5Ñ6Ô6Ñ7Ô7ØØ!$ØØØØð 	+ñ 	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
s   µBCÃCÃCc                  ó„  — t          ¦   «         } t          d¬¦  «        | _        t          d¬¦  «        | _        d | _        t          ¦   «         }t          d¦  «        5  |                      |d¬¦  «        }|d         dk    sJ ‚|d	         du sJ ‚|j                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )
NTr+   úcaptures/fake_returned.pngr´   úDeserted Map©ÚrunnerÚmap_zoner6   r7   Úreturned_to_hideout)	r   r   r=   r?   r×   r   Úexecute_stage6_portal_returnÚexecute_portal_exitrK   )r   Úmock_runnerrD   s      r   Ú%test_stage6_portal_return_with_runnerr   �  s  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ(Ð6RÐSÑSÔS€KÔØ"€KÔå‘+”+€KÝ	ˆ|Ñ	Ô	ð =ð =Ø×6Ò6¸kÐTbÐ6ÑcÔcˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÐ(Ô)¨TÐ1Ð1Ð1Ð1ØÔ'×:Ò:Ñ<Ô<Ð<ð	=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð =ð =s   ÁAB5Â5B9Â<B9c                  ó®  — t          ¦   «         } t          d¬¦  «        | _        t          d¬¦  «        | _        t          ¦   «         }t          ¦   «         }d|_        ||j        _        || _        t          d¦  «        5  |  	                    d d¬¦  «        }|d         dk    sJ ‚|d	         d
u sJ ‚d|d         v sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r÷   rø   r´   rù   r6   rN   rü   FrO   rP   )
r   r   r=   r?   rÛ   rÜ   r,   r×   r   rý   rÝ   s       r   Ú.test_stage6_portal_return_timeout_fails_closedr  ž  s/  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ(Ð6RÐSÑSÔS€KÔå‘;”;€LÝ‘”€IØ(€IÔØ:C€LÔ*Ô7Ø*€KÔå	ˆ|Ñ	Ô	ð -ð -Ø×6Ò6¸dÈ^Ð6Ñ\Ô\ˆØ�8Œ} Ò(Ð(Ð(Ð(ØÐ(Ô)¨UÐ2Ð2Ð2Ð2Ø  G¤Ð,Ð,Ð,Ð,Ð,ð	-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -s   Á>>C
Ã
CÃCc                  ó>  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        d | _        t          d¦  «        5  |                      d d¬¦  «        }|d         dk    sJ ‚|d	         du sJ ‚| j         	                    d
dd¬¦  «         d„ | j        j
        D ¦   «         }d|vs
J d¦   «         ‚| j         	                    ddd¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r÷   r´   rø   rù   r6   r7   rü   é¾   rG   g      ø?re   c                 ó*   — g | ]}|d          d          ‘ŒS rZ   r[   r\   s     r   r_   z8test_stage6_portal_return_standalone.<locals>.<listcomp>¾  r`   r   rb   u?   Cáº¤M TUYá»†T Ä�á»�I gá»­i phÃ­m VK_F (0x46) Ä‘á»ƒ vÃ o portal!r›   iø  rè   )r   r   r=   r>   ri   r?   r×   r   rý   r˜   rn   )r   rD   rr   s      r   Ú$test_stage6_portal_return_standaloner  °  s�  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ%™KœK€KÔÝ!™œ€KÔÝ(Ð6RÐSÑSÔS€KÔØ"€KÔå	ˆ|Ñ	Ô	ð Nð NØ×6Ò6¸dÈ^Ð6Ñ\Ô\ˆØ�8Œ} 	Ò)Ð)Ð)Ð)ØÐ(Ô)¨TÐ1Ð1Ð1Ð1àÔ×5Ò5°d¸DÈcÐ5ÑRÔRÐRØSÐS¨kÔ.CÔ.RÐSÑSÔSˆØ˜;Ð&Ð&Ð&Ð(iÑ&Ô&Ð&ØÔ×1Ò1°$¸ÈÐ1ÑMÔMÐMðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nð Nð Ns   Á5BDÄDÄDc                  ó  — t          ¦   «         } t          d ¬¦  «        | _        t          dddœ¬¦  «        | _        t          ddi¬¦  «        | _        t          ddi¬¦  «        | _        t          ddi¬¦  «        | _        t          dddit          ¦   «         dœ¬¦  «        | _        t          ddi¬¦  «        | _        |  	                    ¦   «         }|d         dk    sJ ‚t          |d	         ¦  «        d
k    sJ ‚|d	         g d¢k    sJ ‚d S )Nr+   r7   rµ   ©r6   r<   r6   rå   F©r6   rç   Úrunner_instanceÚstages_completedr&   r   )r   r   Úcheck_active_portal_in_hideoutrB   rm   rÀ   rØ   rñ   rý   Úexecute_pipeliner'   ©r   Úreports     r   Útest_execute_pipeline_successr  Ã  sa  € Ý.Ñ0Ô0€KÝ1:ÈÐ1MÑ1MÔ1M€KÔ.Ý*3ØØ-ðBð Bð +ñ +ô +€KÔ'õ -6ÀHÈiÐCXÐ,YÑ,YÔ,Y€KÔ)Ý2;È(ÐT]ÐI^Ð2_Ñ2_Ô2_€KÔ/Ý.7ÀhÐPYÐEZÐ.[Ñ.[Ô.[€KÔ+Ý+4ØØ*¨EÐ2Ý$™;œ;ðCð Cð ,ñ ,ô ,€KÔ(õ
 09ÀxÐQZÐF[Ð/\Ñ/\Ô/\€KÔ,à×)Ò)Ñ+Ô+€FØ�(Ô˜yÒ(Ð(Ð(Ð(ÝˆvÐ(Ô)Ñ*Ô*¨aÒ/Ð/Ð/Ð/ØÐ$Ô%ð *ð *ð *ò ð ð ð ð ð r   c                  óL  — t          ¦   «         } t          d ¬¦  «        | _        t          dddœ¬¦  «        | _        t          ¦   «         | _        |                      ¦   «         }|d         dk    sJ ‚d|d         v sJ ‚|d         g k    sJ ‚| j                             ¦   «          d S )	Nr+   rN   zNo waystones)r6   rP   r6   u   Stage 1 tháº¥t báº¡irP   r  )r   r   r  rB   rm   r  rv   r  s     r   Ú'test_execute_pipeline_stage1_fail_haltsr  á  sÅ   € Ý.Ñ0Ô0€KÝ1:ÈÐ1MÑ1MÔ1M€KÔ.Ý*3ØØðBð Bð +ñ +ô +€KÔ'õ -6©K¬K€KÔ)à×)Ò)Ñ+Ô+€FØ�(Ô˜xÒ'Ð'Ð'Ð'Ø! V¨G¤_Ð4Ð4Ð4Ð4ØÐ$Ô%¨Ò+Ð+Ð+Ð+ØÔ)×;Ò;Ñ=Ô=Ð=Ð=Ð=r   c                  ó–  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          dddœ¬¦  «        | _        t          dddit          ¦   «         dœ¬¦  «        | _        t          d	di¬¦  «        | _        |  	                    ¦   «         }|d	         dk    sJ ‚|d
         g d¢k    sJ ‚| j         
                    ¦   «          | j         
                    ¦   «          | j         
                    ¦   «          | j                             ¦   «          d S )N)éX  é,  zBURNING MONOLITHr+   r7   zBurning Monolith©r6   Úentered_zonerå   Fr	  r6   r  )r#   r$   r%   )r   r   r  rB   rm   rÀ   rØ   rñ   rý   r  rv   rK   r  s     r   Ú#test_execute_pipeline_portal_bypassr  ñ  sQ  € Ý.Ñ0Ô0€KÝ1:ÐHfÐ1gÑ1gÔ1g€KÔ.Ý*3©+¬+€KÔ'Ý,5©K¬K€KÔ)Ý2;±+´+€KÔ/Ý.7ÐPYÐk}ÐE~ÐE~Ð.Ñ.Ô.€KÔ+Ý+4ØØ*¨EÐ2Ý$™;œ;ðCð Cð ,ñ ,ô ,€KÔ(õ
 09ÀxÐQZÐF[Ð/\Ñ/\Ô/\€KÔ,à×)Ò)Ñ+Ô+€FØ�(Ô˜yÒ(Ð(Ð(Ð(ØÐ$Ô%Ð)lÐ)lÐ)lÒlÐlÐlÐlØÔ'×9Ò9Ñ;Ô;Ð;ØÔ)×;Ò;Ñ=Ô=Ð=ØÔ/×AÒAÑCÔCÐCØÔ+×>Ò>Ñ@Ô@Ð@Ð@Ð@r   c                  ó<  — t          dd¬¦  «        } d}t          j                             |¦  «        rE|                      |¦  «        \  }}d|cxk    rdk    rn nd|cxk    rdk    sn |d	v r|d
v sJ ‚d S d S |                      d ¦  «        \  }}|dv sJ ‚|dv sJ ‚d S )Nr   r	   r   ú2captures/20260913_215022_379_LIVE_VERIFICATION.pngi0  ib  i¤  iê  )é`  rU   )éæ   rV   )r  rU   iJ  )r  rV   i×  )r   ÚosÚpathÚexistsrk   )r   Úimg_pathÚmxÚmys       r   Ú1test_optical_map_device_locator_authentic_capturer#  	  sð   € Ý.¸ÀtÐLÑLÔL€KØC€HÝ	„w‡~‚~�hÑÔð %Ø×7Ò7¸ÑAÔA‰ˆˆBØ˜Ð"Ð"Ò"Ð"˜dÒ"Ð"Ð"Ð"Ð" s¨bÐ'7Ð'7Ò'7Ð'7°CÒ'7Ð'7Ð'7Ð'7¸RÀ<Ð=OÐ=OÐTVÐZdÐTdÐTdÐTdÐeÐ'7Ð'7ÐTdÐTdð ×7Ò7¸Ñ=Ô=‰ˆˆBØÐ'Ð'Ð'Ð'Ð'Ø�_Ð$Ð$Ð$Ð$Ð$Ð$r   c                  ó2  — t          dd¬¦  «        } d}t          j                             |¦  «        r<|                      |¦  «        \  }}d|cxk    rdk    sn J ‚d|cxk    rdk    sn J ‚d S |                      d ¦  «        \  }}|d	k    sJ ‚|d
k    sJ ‚d S )Nr   r	   r   r  é°  i¤  r  r  rÑ   rÒ   )r   r  r  r  rÖ   )r   r   ÚpxÚpys       r   Ú-test_optical_portal_locator_authentic_capturer(    sÍ   € Ý.¸ÀtÐLÑLÔL€KØC€HÝ	„w‡~‚~�hÑÔð Ø×3Ò3°HÑ=Ô=‰ˆˆBØ�rÐ!Ð!Ò!Ð!˜TÒ!Ð!Ð!Ð!Ð!Ð!Ø�bÐÐÒÐ˜CÒÐÐÐÐÐÐÐð ×3Ò3°DÑ9Ô9‰ˆˆBØ�SŠyˆyˆyˆyØ�SŠyˆyˆyˆyˆyˆyr   c                  ó2  — t          dd¬¦  «        } d}t          j                             |¦  «        r<|                      |¦  «        \  }}d|cxk    rdk    sn J ‚d|cxk    rdk    sn J ‚d S |                      d ¦  «        \  }}|d	k    sJ ‚|d
k    sJ ‚d S )Nr   r	   r   zBcaptures/20260914_055336_887_LIVE_CLEAR_SEARCH_TEST_CORRELATED.pngéd   iÐ  r  r%  i  i*  )r   r  r  r  r»   )r   r   ÚnxÚnys       r   Ú)test_optical_reachable_atlas_node_locatorr-  $  sÍ   € Ý.¸ÀtÐLÑLÔL€KàS€HÝ	„w‡~‚~�hÑÔð Ø×6Ò6°xÑ@Ô@‰ˆˆBØ�bÐ Ð Ò Ð ˜DÒ Ð Ð Ð Ð Ð Ø�bÐ Ð Ò Ð ˜DÒ Ð Ð Ð Ð Ð Ð Ð ð ×6Ò6°tÑ<Ô<‰ˆˆBØ�TŠzˆzˆzˆzØ�SŠyˆyˆyˆyˆyˆyr   c                  óî  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        |                      ¦   «          | j                             ¦   «          | j        j        dk    sJ ‚| j         	                    ddd¬¦  «         | j         	                    d	dd¬¦  «         | j         
                    d
dd¬¦  «         d S )NTr+   Ú r;   iZ  é,   g333333Ã?re   iâ	  é    é9   gš™™™™™É?)r   r   r=   ri   r>   r?   rÔ   rK   ro   rp   r˜   r   s    r   Útest_dismiss_modals_precheckr3  3  sé   € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ!™œ€KÔÝ%™KœK€KÔå(°bÐ9Ñ9Ô9€KÔØ×ÒÑ Ô Ð àÔ×/Ò/Ñ1Ô1Ð1ØÔÔ'¨1Ò,Ð,Ð,Ð,ØÔ×%Ò% d¨B¸DÐ%ÑAÔAÐAØÔ×%Ò% d¨B¸DÐ%ÑAÔAÐAØÔ×1Ò1°$¸È#Ð1ÑNÔNÐNÐNÐNr   c                  ó  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          ¦   «         | _        t          d¬¦  «        | _        t          dd¬¦  «        5  t          dddœ¬¦  «        | j        _        t          dg¬¦  «        | j        _	        |  
                    d	¬
¦  «        }|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )NTr+   r-   r.   é   Fr0   )r   r   r   r   çÍÌÌÌÌZ@r   )Útarget_slot_idxr6   r7   Úcraft_actionÚ
SKIP_CRAFTr<   )r   r   r=   rÔ   r>   r?   r   r   r@   rA   rB   rC   s     r   Ú0test_waystone_auto_crafter_integration_rare_skipr:  C  s†  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ!*¡¤€KÔÝ%™KœK€KÔÝ(Ð6MÐNÑNÔN€KÔå	Ð¨dÐ	3Ñ	3Ô	3ð @ð @Ý2;Ø ØðJ
ð J
ð 3ñ 3ô 3ˆÔÔ/õ 2;Ø$ðI
ð 2ñ 2ô 2ˆÔÔ.ð ×1Ò1À!Ð1ÑDÔDˆØ�8Œ} 	Ò)Ð)Ð)Ð)Ø�>Ô" lÒ2Ð2Ð2Ð2Ø�?Ô#Ð'?Ò?Ð?Ð?Ð?Ð?ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @s   Á0A9C7Ã7C;Ã>C;c                  ó¬  — t          ¦   «         } dg d¢ddgiddidœ}t          |¬¦  «        | _        t          d	¦  «        5  |                      d
¬¦  «        }|d         dk    sJ ‚|d         d
k    sJ ‚|d         d
k    sJ ‚|d         du sJ ‚t          |d         ¦  «        d
k    sJ ‚| j        j        d
k    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr7   r   r:   ©r   r   r   r6  rå   F©r6   r  Ústage1_datarç   r+   r´   r;   ©Úmax_mapsr6   rã   Útotal_maps_requestedÚmaps_completedÚ	exhaustedÚruns©r   r   r  r   Úrun_multi_map_loopr'   ro   )r   Úsuccess_reportrD   s      r   Útest_run_multi_map_loop_successrH  Y  so  € Ý.Ñ0Ô0€Kàð cð  cð  cØ)Ð,AÐ+BÐCØ*¨EÐ2ð	ð €Nõ $-¸.Ð#IÑ#IÔ#I€KÔ å	ˆ|Ñ	Ô	ð <ð <Ø×,Ò,°aÐ,Ñ8Ô8ˆØ�8Œ} Ò+Ð+Ð+Ð+ØÐ)Ô*¨aÒ/Ð/Ð/Ð/ØÐ#Ô$¨Ò)Ð)Ð)Ð)Ø�;Ô 5Ð(Ð(Ð(Ð(Ý�3�v”;ÑÔ 1Ò$Ð$Ð$Ð$ØÔ+Ô6¸!Ò;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s   ÁA:C	Ã	CÃCc                  óÂ  — t          ¦   «         } dg d¢ddgiddidœ}dg dg id	d
œ}t          ||g¬¦  «        | _        t          d¦  «        5  |                      d¬¦  «        }|d         dk    sJ ‚|d         dk    sJ ‚|d         dk    sJ ‚|d         du sJ ‚t          |d         ¦  «        dk    sJ ‚| j        j        dk    sJ ‚	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr7   r   r:   r<  rå   Fr=  rN   uT   Stage 1 tháº¥t báº¡i: Khong tim thay Waystone nao trong Hang 1 (Row 0)! Fail-closed.)r6   r  r>  rP   )Úside_effectr´   rc   r?  r6   Ú	EXHAUSTEDrA  rB  r5   rC  TrD  r;   rE  )r   rG  Úexhausted_reportrD   s       r   Ú+test_run_multi_map_loop_stops_on_exhaustionrM  m  s•  € Ý.Ñ0Ô0€Kàð cð  cð  cØ)Ð,AÐ+BÐCØ*¨EÐ2ð	ð €Nð ØØ)¨2Ð.Øgð	ð Ðõ $-¸.ÐJZÐ9[Ð#\Ñ#\Ô#\€KÔ å	ˆ|Ñ	Ô	ð <ð <Ø×,Ò,°aÐ,Ñ8Ô8ˆØ�8Œ} Ò+Ð+Ð+Ð+ØÐ)Ô*¨aÒ/Ð/Ð/Ð/ØÐ#Ô$¨Ò)Ð)Ð)Ð)Ø�;Ô 4Ð'Ð'Ð'Ð'Ý�3�v”;ÑÔ 1Ò$Ð$Ð$Ð$ØÔ+Ô6¸!Ò;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <ð <ð <s   ÁA:CÃCÃCc            
      óH  — t          ¦   «         } t          d¬¦  «        | _        t          ddddddddœ¬¦  «        | j        _        |                      ¦   «         }|d         d	k    sJ ‚|d
         dk    sJ ‚|d         dk    sJ ‚| j        j                             ¦   «          d S )NTr+   ry   rä   Fr/  )ÚsuccessÚstash_openedÚtabs_detectedÚitems_depositedÚwaystone_withdrawnÚstash_closedrP   r6   r7   rR  rQ  )r   r   r=   Ústash_orchestratorÚrun_full_stash_cycleÚexecute_stage0_stash_routinerK   rC   s     r   Ú!test_stage0_stash_routine_successrX  ˆ  sÎ   € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ:CØØØØØ#ØØðRð Rð ;ñ ;ô ;€KÔ"Ô7ð ×
2Ò
2Ñ
4Ô
4€CØˆxŒ=˜IÒ%Ð%Ð%Ð%ØÐ Ô! QÒ&Ð&Ð&Ð&ØˆÔ 1Ò$Ð$Ð$Ð$ØÔ"Ô7×JÒJÑLÔLÐLÐLÐLr   c                  ó”  — t          ¦   «         } t          d¬¦  «        | _        t          ¦   «         | _        t          d ¬¦  «        | _        t          dddœ¬¦  «        | _        t          dddœ¬¦  «        | _        t          ddi¬¦  «        | _        t          ddi¬¦  «        | _        t          dd	d
œ¬¦  «        | _	        t          dd i dœ¬¦  «        | _
        t          ddi¬¦  «        | _        |                      dd¬¦  «        }|d         dk    sJ ‚d|d         v sJ ‚d|d         v sJ ‚| j                             ¦   «          d S )NTr+   r7   rc   )r6   rR  r3   r  r6   zThe Western Enigmar  )r6   r
  rç   r   )r7  Úenable_stashingÚSTAGE0_STASHr  r    )r   r   r=   rÔ   r  rW  rB   rm   rÀ   rØ   rñ   rý   r  rK   r  s     r   Ú#test_execute_pipeline_with_stashingr\  œ  s¸  € Ý.Ñ0Ô0€KÝ(°dÐ;Ñ;Ô;€KÔÝ!*¡¤€KÔÝ1:ÈÐ1MÑ1MÔ1M€KÔ.Ý/8ØØðGð Gð 0ñ 0ô 0€KÔ,õ +4ØØ0ðBð Bð +ñ +ô +€KÔ'õ -6ÀHÈiÐCXÐ,YÑ,YÔ,Y€KÔ)Ý2;È(ÐT]ÐI^Ð2_Ñ2_Ô2_€KÔ/Ý.7ÐPYÐkð  FAð  FAð  /Bñ  /Bô  /B€KÔ+Ý+4ÈYÐkoð  CEð  CFð  CFð  ,Gñ  ,Gô  ,G€KÔ(Ý/8ÀxÐQZÐF[Ð/\Ñ/\Ô/\€KÔ,à×)Ò)¸!ÈTÐ)ÑRÔR€FØ�(Ô˜yÒ(Ð(Ð(Ð(Ø˜VÐ$6Ô7Ð7Ð7Ð7Ð7Ø Ð'9Ô :Ð:Ð:Ð:Ð:ØÔ,×?Ò?ÑAÔAÐAÐAÐAr   ).Ú__doc__rž   r  ÚpytestÚpathlibr   Úunittest.mockr   r   Ú$tools.autonomous_mapping_coordinatorr   r   r   r)   rE   rL   rQ   rs   rw   r�   r�   r™   r¦   r«   rÁ   rÃ   rË   rÍ   rÙ   rà   rõ   r   r  r  r  r  r  r#  r(  r-  r3  r:  rH  rM  rX  r\  r[   r   r   ú<module>rb     s¥  ðð	ð 	ð €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø MÐ MÐ MÐ MÐ MÐ Mð,ð ,ð ,ðð ð ð	%ð 	%ð 	%ð?ð ?ð ?ð2Wð Wð Wð4,ð ,ð ,ð&0ð 0ð 0ð2*ð *ð *ð
Cð 
Cð 
Cðð ð ð0
ð 
ð 
ð.!ð !ð !ð ;ð ;ð ;ðFð Fð Fð.Sð Sð Sð&\ð \ð \ð&Fð Fð Fð$?ð ?ð ?ð,-ð -ð -ð0
ð 
ð 
ð4=ð =ð =ð-ð -ð -ð$Nð Nð Nð&ð ð ð<>ð >ð >ð Að Að Að0
%ð 
%ð 
%ðð ð ðð ð ðOð Oð Oð @ð @ð @ð,<ð <ð <ð(<ð <ð <ð6Mð Mð Mð(Bð Bð Bð Bð Br   