§
    89¬j)   ã                  ó°   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZmZ ddlmZmZ  e
j        d¬¦  «        dd
„¦   «         Z G d„ d¦  «        ZdS )uà  AutoPOE2 - Multi-Map Endurance Simulation & 100% Autonomy Readiness Gate (Chu Ká»³ 8).
======================================================================================
[MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME] (Rule 5 Compliance)

Domain: QA & Governance Sentinel (SÆ° Ä‘oÃ n 4) phá»‘i há»£p SÆ° Ä‘oÃ n 1, 2, 3.
Test Suite kiá»ƒm chá»©ng Ä‘á»™ bá»�n há»‡ thá»‘ng tá»± hÃ nh qua chuá»—i 20 maps liÃªn tá»¥c:
1. SÆ° Ä‘oÃ n 1 (Core & Combat):
   - Chá»‘ng chá»�i Boss Phase Transition (Invulnerability, AOE Blast, Hollow Form Stance).
   - Báº¥t biáº¿n INV-CI-01: Life 1/1, Max ES 4284, 0 tá»­ tráº­n (Survival Rate = 100.0%).
2. SÆ° Ä‘oÃ n 2 (Perception & Navigation):
   - Hiá»‡u chuáº©n Camera Zoom Calibrator Ä‘á»™ng (1.0x, 1.4x, 2.0x, Yaw 0-45Â°).
   - Báº¥t biáº¿n INV-WASD-MIN-DWELL: Thá»�i gian giá»¯ phÃ­m WASD luÃ´n >= 0.30s (300ms).
3. SÆ° Ä‘oÃ n 3 (Endgame Loop & Economic Logistics):
   - TiÃªu hao Waystone vÃ  tá»± Ä‘á»™ng tÃ¡i náº¡p (Restock) tá»« Stash Map Tab khi tÃºi cÃ²n < 2 Waystones.
   - SÃ n Faustus Currency Waterfall Cascade & Auto-Profit Taking (chá»‘t lá»�i phá»¥ tá»‡ sang Chaos/Divine).
   - Báº¥t biáº¿n INV-EXCHANGE-GOLD-TAX: Quá»¹ vÃ ng an toÃ n luÃ´n >= 5,000 Gold.
   - CÃ¢y ná»™i táº¡i Atlas Progression DAG 115+ nodes: Nháº­n +20 Ä‘iá»ƒm ná»™i táº¡i tuáº§n tá»±.
4. SÆ° Ä‘oÃ n 4 (QA & Governance Sentinel):
   - LiveRunSentinel giÃ¡m sÃ¡t thá»¥ Ä‘á»™ng (Zero-Input Guarantee) suá»‘t 20 maps.
   - XÃ¡c nháº­n 0 báº¥t thÆ°á»�ng, 100% Healthy.
é    )ÚannotationsN)ÚDictÚList)ÚEnduranceSimulationReportÚMultiMapEnduranceHarnessÚmodule)ÚscopeÚreturnr   c                 óT   — t          dddd¬¦  «        } |                      d¬¦  «        S )uv   Fixture thá»±c thi má»™t láº§n toÃ n bá»™ chuá»—i mÃ´ phá»�ng 20 maps Ä‘á»ƒ tÃ¡i sá»­ dá»¥ng káº¿t quáº£ kiá»ƒm thá»­.é'  é   é   i6(5)Úinitial_goldÚinitial_waystones_in_bagÚinitial_waystones_in_stashÚrandom_seedé   )Ú
total_maps)r   Úrun_endurance_simulation)Úharnesss    úAC:\Projects\AutoPOE2\tests\test_multi_map_endurance_simulation.pyÚendurance_reportr   #   s=   € õ 'ØØ!"Ø#%Øð	ñ ô €Gð ×+Ò+°rÐ+Ñ:Ô:Ð:ó    c                  óJ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dS )ÚTestMultiMapEnduranceSimulationuk   Bá»™ kiá»ƒm thá»­ nghiá»‡m thu toÃ n diá»‡n Ä‘á»™ bá»�n Multi-Map vÃ  chá»‰ sá»‘ Sáºµn SÃ ng 100% Autonomy.r   r   c                óN  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        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}}|j	        }d	}||k    }|sÈt          j        d|fd
||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d|j	        › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|s¿t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }t          |¦  «        }d}||k    }	|	�st          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}	}|j        D �]w}|j        }d}||u }|sªt          j        d|fd||f¦  «        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}}|j        }d}||k    }|s¿t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d	}||k    }|sÈt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d|j        › d �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}�ŒydS )!u¹   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        XÃ¡c nháº­n hoÃ n thÃ nh Ä‘á»§ 20 maps vá»›i tá»· lá»‡ sá»‘ng sÃ³t tuyá»‡t Ä‘á»‘i 100.0% (0 tá»­ tráº­n).
        r   ©ú==)z6%(py2)s
{%(py2)s = %(py0)s.total_maps_run
} == %(py5)sr   ©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7Nr   )z4%(py2)s
{%(py2)s = %(py0)s.total_deaths
} == %(py5)su   CÃ³ u!    ca tá»­ tráº­n ngoÃ i Ã½ muá»‘n!ú
>assert %(py7)sç      Y@)z9%(py2)s
{%(py2)s = %(py0)s.survival_rate_pct
} == %(py5)su#   Survival Rate khÃ´ng Ä‘áº¡t 100.0%!)zQ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.map_records
})
} == %(py8)sÚlen)r    Úpy1Úpy3r"   Úpy8zassert %(py10)sÚpy10T©Úis)z0%(py2)s
{%(py2)s = %(py0)s.survived
} is %(py5)sÚrecé   ©z.%(py2)s
{%(py2)s = %(py0)s.hp_min
} == %(py5)su2   Báº¥t biáº¿n INV-CI-01 bá»‹ vi pháº¡m: HP khÃ¡c 1!©ú>)z-%(py2)s
{%(py2)s = %(py0)s.es_min
} > %(py5)súMap u   : ES bá»‹ tá»¥t vá»� 0!)Útotal_maps_runÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚtotal_deathsÚ_format_assertmsgÚsurvival_rate_pctÚmap_recordsr'   ÚsurvivedÚhp_minÚes_minÚ	map_index)Úselfr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert2Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11r.   s                r   Ú0test_full_20_maps_endurance_survival_100_percentzPTestMultiMapEnduranceSimulation.test_full_20_maps_endurance_survival_100_percent2   s	  € ð  Ô.Ð4°"Ð4Ð.°"Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð.°"Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ÐÑ4Ô4Ð4Õ4Ô4ÐÑ4Ô4Ð4Ð4Õ4Ô4Ð.Ñ4Ô4Õ4Ô4°"Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÔ,Ðz°ÐzÐ,°Ò1ÐzÐzÐzÕzÔzÐzÐzÐzÐzÐ,°ÐzÑzÔzÐzÕzÔzÑzÔzÐzÐzÕzÔzÐÑzÔzÐzÕzÔzÐÑzÔzÐzÐzÕzÔzÐ,ÑzÔzÕzÔz°ÑzÔzÐzÐzÑzÐzÕzÔzÐ3zÐ:JÔ:WÐ3zÐ3zÐ3zÑzÔzÐzÑzÐzÐzÐzÑzÐzÕzÕzÔzÐzÑzÔzÑzÔzÐzÐzÐzÐzÐzÐzÐzØÔ1Ða°UÐaÐ1°UÒ:ÐaÐaÐaÕaÔaÐaÐaÐaÐaÐ1°UÐaÑaÔaÐaÕaÔaÑaÔaÐaÐaÕaÔaÐÑaÔaÐaÕaÔaÐÑaÔaÐaÐaÕaÔaÐ1ÑaÔaÕaÔa°UÑaÔaÐaÐaÑaÐaÕaÔaÐ<aÑaÔaÐaÑaÐaÐaÐaÑaÐaÕaÕaÔaÐaÑaÔaÑaÔaÐaÐaÐaÐaÐaÐaÐaØ#Ô/Ð6�sÐ/Ñ0Ô0Ð6°BÐ6Ð0°BÒ6Ð6Ð6Ñ6Õ6Ô6Ð6Ð6Ð6Ð6Ð0°BÐ6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�sÑ6Ô6Ð6Õ6Ô6�sÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6Ð#Ñ6Ô6Ð6Õ6Ô6Ð#Ñ6Ô6Ð6Ð6Õ6Ô6Ð/Ñ6Ô6Õ6Ô6Ð0Ñ6Ô6Õ6Ô6°BÑ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6à#Ô/ð 	Qñ 	QˆCØ”<Ð' 4Ð'�< 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'�< 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�3Ñ'Ô'Ð'Õ'Ô'�3Ñ'Ô'Ð'Ð'Õ'Ô'�<Ñ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø”:ÐX ÐX�: ’?ÐXÐXÐXÕXÔXÐXÐXÐXÐX�: ÐXÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔX�3ÑXÔXÐXÕXÔX�3ÑXÔXÐXÐXÕXÔX�:ÑXÔXÕXÔX ÑXÔXÐXÐXÑXÐXÕXÔXÐ$XÑXÔXÐXÑXÐXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXÐXÐXØ”:ÐP ÐP�: ’>ÐPÐPÐPÕPÔPÐPÐPÐPÐP�: ÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔP�3ÑPÔPÐPÕPÔP�3ÑPÔPÐPÐPÕPÔP�:ÑPÔPÕPÔP ÑPÔPÐPÐPÑPÐPÕPÔPÐ#P¨#¬-Ð#PÐ#PÐ#PÑPÔPÐPÑPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPÑPð	Qð 	Qr   c                óD  — |j         }d}||k    }|sÈt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j         › d�¦  «        dz   d	|iz  }t          t          j	        |¦  «        ¦  «        ‚d
x}x}}d„ |j
        D ¦   «         }|D �]«}|j        }d}||k    }|sÐt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j        › d|j        › d�¦  «        dz   d	|iz  }t          t          j	        |¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        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}}�Œ­d
S )u»   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        [SÆ° Ä‘oÃ n 1] Chá»‘ng chá»�i an toÃ n qua táº¥t cáº£ cÃ¡c Ä‘á»£t Boss Phase Transition (AOE/Invulnerable).
        r   ©ú>=)z<%(py2)s
{%(py2)s = %(py0)s.boss_phases_survived
} >= %(py5)sr   r   u   Sá»‘ pha Boss sá»‘ng sÃ³t (u#   ) chÆ°a Ä‘á»§ máº«u kiá»ƒm Ä‘á»‹nh!r%   r$   Nc                ó    — g | ]}|j         ¯	|‘ŒS © )Úboss_phase_triggered)Ú.0Úrs     r   ú
<listcomp>zeTestMultiMapEnduranceSimulation.test_boss_phase_transition_resilience_zero_deaths.<locals>.<listcomp>H   s    € ÐZÐZÐZ˜aÀ1ÔCYÐZ˜ÐZÐZÐZr   iÐ  )z.%(py2)s
{%(py2)s = %(py0)s.es_min
} >= %(py5)sÚb_recr3   u!    Boss Phase: ES tá»¥t quÃ¡ sÃ¢u (z	 < 2000)!r/   r   r0   r#   )Úboss_phases_survivedr5   r6   r7   r8   r9   r:   r>   r;   r<   r@   rC   rD   rB   )	rE   r   rF   rG   rH   rI   rJ   Úboss_recordsrZ   s	            r   Ú1test_boss_phase_transition_resilience_zero_deathszQTestMultiMapEnduranceSimulation.test_boss_phase_transition_resilience_zero_deaths@   s.  € ð  Ô4ð 	
¸ð 	
Ð4¸Ò9ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð4¸ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 5ñ 	
ô 	
õ 	
ä 	ð 9:ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð uÐ*:Ô*OÐtÐtÐtñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð [ÐZÐ#3Ô#?ÐZÑZÔZˆØ!ð 	%ñ 	%ˆEØ”<ð  4ð �< 4Ò'ð ð ð õ ìðð ð ð �< 4ð ñ ô ð õ äñô ð ð õ ìð ñ ô ð õ äð ñ ô ð ð õ äð  ñ ô õ äð $(ñ ô ð ð ñ ð õ ìð a�u”Ð`Ð`ÈÌÐ`Ð`Ð`ñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð ”<Ð$ 1Ð$�< 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�< 1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�5Ñ$Ô$Ð$Õ$Ô$�5Ñ$Ô$Ð$Ð$Õ$Ô$�<Ñ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ñ$ð		%ð 	%r   c                ó  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        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}}t          ¦   «         }|j
        D �]}|                     |j        ¦  «         |j        }d	}||k    }|sÑt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j        › d|j        d›d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}�Œt!          |¦  «        }	d}
|	|
k    }|�st          j        d
|fd|	|
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        dœz  }t          j        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}}
dS )uÇ   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        [SÆ° Ä‘oÃ n 2] Kiá»ƒm chá»©ng hiá»‡u chuáº©n Camera/Minimap Ä‘á»™ng trÃªn 20 maps vÃ  báº¥t biáº¿n Dwell Time >= 0.30s.
        r   r   )zE%(py2)s
{%(py2)s = %(py0)s.camera_calibrations_performed
} == %(py5)sr   r   r#   r$   Ng333333Ó?rR   )z6%(py2)s
{%(py2)s = %(py0)s.wasd_dwell_sec
} >= %(py5)sr.   r3   z: Dwell time z.3fu   s vi pháº¡m INV-WASD-MIN-DWELL!r%   é   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sr'   Úzoom_levels_seen)r    r(   r)   Úpy6u6   ChÆ°a kiá»ƒm thá»­ Ä‘á»§ cÃ¡c má»©c zoom (hiá»‡n cÃ³: ú)z
>assert %(py8)sr*   )Úcamera_calibrations_performedr5   r6   r7   r8   r9   r:   r;   r<   Úsetr@   ÚaddÚ
zoom_levelÚwasd_dwell_secr>   rD   r'   )rE   r   rF   rG   rH   rI   rJ   r`   r.   rK   Ú@py_assert5Ú@py_format7rN   s                r   Ú5test_camera_minimap_calibrator_dynamic_zoom_and_dwellzUTestMultiMapEnduranceSimulation.test_camera_minimap_calibrator_dynamic_zoom_and_dwellO   sû  € ð  Ô=ÐCÀÐCÐ=ÀÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ=ÀÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCÐÑCÔCÐCÕCÔCÐÑCÔCÐCÐCÕCÔCÐ=ÑCÔCÕCÔCÀÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCå™5œ5ÐØ#Ô/ð 	ñ 	ˆCØ× Ò  ¤Ñ0Ô0Ð0àÔ%ð ¨ð Ð%¨Ò-ð ð ð õ ìðð ð ð Ð%¨ð ñ ô ð õ äñô ð ð õ ìð ñ ô ð õ äð ñ ô ð ð õ äð &ñ ô õ äð *.ñ ô ð ð ñ ð õ ìð k�s”}ÐjÐj°3Ô3EÐjÐjÐjÐjñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ñ õ
 Ð#Ñ$Ô$Ðw¨ÐwÐ$¨Ò)ÐwÐwÑwÕwÔwÐwÐwÐwÐwÐ$¨ÐwÑwÔwÐwÕwÔwÑwÔwÐwÐwÕwÔw�sÑwÔwÐwÕwÔw�sÑwÔwÐwÐwÐwÕwÔwÑwÔwÐwÐwÕwÔwÐ#ÑwÔwÐwÕwÔwÐ#ÑwÔwÐwÐwÕwÔwÐ$ÑwÔwÕwÔw¨ÑwÔwÐwÐwÑwÐwÕwÔwÐ+wÐdtÐ+wÐ+wÐ+wÑwÔwÐwÑwÐwÐwÐwÑwÐwÕwÕwÔwÐwÑwÔwÑwÔwÐwÐwÐwÐwÐwÐwÐwÐwÐwr   c                ól  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        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}}|j	        }d	}||k    }|sÈt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d|j	        › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        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}}|j        D �]É}|j        }d}||k    }|sÈt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d|j        › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }d}||k    }|sÐt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j
        d|j        › d|j        › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}�ŒËdS )uÈ   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        [SÆ° Ä‘oÃ n 3] Kiá»ƒm chá»©ng tiÃªu hao 20 waystones, tá»± Ä‘á»™ng restock tá»« Stash vÃ  quá»¹ vÃ ng sÃ n >= 5000 Gold.
        r   r   )z@%(py2)s
{%(py2)s = %(py0)s.total_waystones_consumed
} == %(py5)sr   r   r#   r$   Né   rR   )zA%(py2)s
{%(py2)s = %(py0)s.total_waystones_restocked
} >= %(py5)su   Waystone tÃ¡i náº¡p (u-   ) khÃ´ng Ä‘á»§ Ä‘Ã¡p á»©ng tiÃªu hao 20 maps!r%   é
   )zC%(py2)s
{%(py2)s = %(py0)s.arbitrage_sessions_executed
} == %(py5)sr/   )z>%(py2)s
{%(py2)s = %(py0)s.waystones_in_inventory
} >= %(py5)sr.   r3   u   : TÃºi cáº¡n sáº¡ch Waystone!iˆ  )z3%(py2)s
{%(py2)s = %(py0)s.ending_gold
} >= %(py5)su   : Quá»¹ vÃ ng tá»¥t xuá»‘ng u0    < 5,000 Gold (vi pháº¡m INV-EXCHANGE-GOLD-TAX)!)Útotal_waystones_consumedr5   r6   r7   r8   r9   r:   r;   r<   Útotal_waystones_restockedr>   Úarbitrage_sessions_executedr@   Úwaystones_in_inventoryrD   Úending_gold©rE   r   rF   rG   rH   rI   rJ   r.   s           r   Ú9test_faustus_profit_taking_and_waystone_restock_logisticszYTestMultiMapEnduranceSimulation.test_faustus_profit_taking_and_waystone_restock_logistics`   s  € ð  Ô8Ð>¸BÐ>Ð8¸BÒ>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð8¸BÐ>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>ÐÑ>Ô>Ð>Õ>Ô>ÐÑ>Ô>Ð>Ð>Õ>Ô>Ð8Ñ>Ô>Õ>Ô>¸BÑ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØÔ9ð 	
¸Rð 	
Ð9¸RÒ?ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð9¸Rð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð :ñ 	
ô 	
õ 	
ä 	ð >@ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð ~Ð$4Ô$NÐ}Ð}Ð}ñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð  Ô;ÐA¸rÐAÐ;¸rÒAÐAÐAÐAÕAÔAÐAÐAÐAÐAÐ;¸rÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAÐÑAÔAÐAÕAÔAÐÑAÔAÐAÐAÕAÔAÐ;ÑAÔAÕAÔA¸rÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAà#Ô/ð 	ñ 	ˆCØÔ-Ðg°ÐgÐ-°Ò2ÐgÐgÐgÕgÔgÐgÐgÐgÐgÐ-°Ð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ÐgÑgÐgÕgÔgÐ4g¸3¼=Ð4gÐ4gÐ4gÑgÔgÐgÑgÐgÐgÐgÑgÐgÕgÕgÔgÐgÑgÔgÑgÔgÐgÐgÐgÐgÐgÐgÐgØ”?ð  dð �? dÒ*ð ð ð õ ìðð ð ð �? dð ñ ô ð õ äñô ð ð õ ìð ñ ô ð õ äð ñ ô ð ð õ äð #ñ ô õ äð '+ñ ô ð ð ñ ð õ ìð D�s”}ð  Dð  DÀ#Ä/ð  Dð  Dð  Dñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ñ ð	ð 	r   c                óØ  — |j         }d}||k    }|sªt          j        d|fd||f¦  «        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}}|j	        }d	}||k    }|sªt          j        d|fd
||f¦  «        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}}|j
        D ]ß}|j        }d}||u }|sÈt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j        › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}ŒàdS )uÌ   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        [SÆ° Ä‘oÃ n 4] XÃ¡c nháº­n LiveRunSentinel giÃ¡m sÃ¡t thá»¥ Ä‘á»™ng 100% Healthy, khÃ´ng cÃ³ báº¥t ká»³ dá»‹ thÆ°á»�ng nÃ o.
        r   r   )zC%(py2)s
{%(py2)s = %(py0)s.sentinel_anomalies_detected
} == %(py5)sr   r   r#   r$   Nr&   )z;%(py2)s
{%(py2)s = %(py0)s.sentinel_health_pct
} == %(py5)sTr,   )z8%(py2)s
{%(py2)s = %(py0)s.sentinel_healthy
} is %(py5)sr.   r3   u2   : LiveRunSentinel phÃ¡t hiá»‡n lá»—i báº¥t biáº¿n!r%   )Úsentinel_anomalies_detectedr5   r6   r7   r8   r9   r:   r;   r<   Úsentinel_health_pctr@   Úsentinel_healthyr>   rD   rs   s           r   Ú;test_live_sentinel_zero_anomalies_gating_throughout_20_mapsz[TestMultiMapEnduranceSimulation.test_live_sentinel_zero_anomalies_gating_throughout_20_mapsp   sí  € ð  Ô;Ð@¸qÐ@Ð;¸qÒ@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð;¸qÐ@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ÐÑ@Ô@Ð@Õ@Ô@ÐÑ@Ô@Ð@Ð@Õ@Ô@Ð;Ñ@Ô@Õ@Ô@¸qÑ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØÔ3Ð<°uÐ<Ð3°uÒ<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<Ð3°uÐ<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ÐÑ<Ô<Ð<Õ<Ô<ÐÑ<Ô<Ð<Ð<Õ<Ô<Ð3Ñ<Ô<Õ<Ô<°uÑ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à#Ô/ð 	zð 	zˆCØÔ'Ðy¨4ÐyÐ'¨4Ð/ÐyÐyÐyÕyÔyÐyÐyÐyÐyÐ'¨4ÐyÑyÔyÐyÕyÔyÑyÔyÐyÐyÕyÔy�3ÑyÔyÐyÕyÔy�3ÑyÔyÐyÐyÕyÔyÐ'ÑyÔyÕyÔy¨4ÑyÔyÐyÐyÑyÐyÕyÔyÐ1y¸¼Ð1yÐ1yÐ1yÑyÔyÐyÑyÐyÐyÐyÑyÐyÕyÕyÔyÐyÑyÔyÑyÔyÐyÐyÐyÐyÐyÐyÐyÐyð	zð 	zr   c                ó  — |j         }d}||k    }|sÈt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j         › d�¦  «        dz   d	|iz  }t          t          j	        |¦  «        ¦  «        ‚d
x}x}}|j
        }d}||k    }|sÈt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j
        › d�¦  «        dz   d	|iz  }t          t          j	        |¦  «        ¦  «        ‚d
x}x}}|j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d
x}x}}|j        }d}||k    }|sªt          j        d|fd||f¦  «        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}}d
S )uÀ   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        Kiá»ƒm chá»©ng tÄƒng trÆ°á»Ÿng tÃ i sáº£n rÃ²ng thá»±c cháº¥t sau 20 maps: Delta Chaos > 0 vÃ  Delta Divine > 0.
        g      i@r1   )z<%(py2)s
{%(py2)s = %(py0)s.delta_net_worth_chaos
} > %(py5)sr   r   u!   TÄƒng trÆ°á»Ÿng tÃ i sáº£n rÃ²ng u    Chaos quÃ¡ tháº¥p!r%   r$   Ng      ð?)z=%(py2)s
{%(py2)s = %(py0)s.delta_net_worth_divine
} > %(py5)su   TÄƒng trÆ°á»Ÿng Divine u    Divine quÃ¡ tháº¥p!)zi%(py2)s
{%(py2)s = %(py0)s.final_net_worth_chaos
} > %(py6)s
{%(py6)s = %(py4)s.initial_net_worth_chaos
})r    r!   Úpy4ra   zassert %(py8)sr*   r   rR   )z:%(py2)s
{%(py2)s = %(py0)s.final_gold_balance
} >= %(py5)sr#   )Údelta_net_worth_chaosr5   r6   r7   r8   r9   r:   r>   r;   r<   Údelta_net_worth_divineÚfinal_net_worth_chaosÚinitial_net_worth_chaosÚfinal_gold_balance)
rE   r   rF   rG   rH   rI   rJ   rh   ri   rN   s
             r   Ú5test_economic_net_worth_growth_delta_chaos_and_divinezUTestMultiMapEnduranceSimulation.test_economic_net_worth_growth_delta_chaos_and_divinez   s'  € ð  Ô5ð 	
¸ð 	
Ð5¸Ò=ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð5¸ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 6ñ 	
ô 	
õ 	
ä 	ð 9>ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð lÐ0@Ô0VÐkÐkÐkñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð  Ô6ð 	
¸ð 	
Ð6¸Ò<ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð6¸ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 7ñ 	
ô 	
õ 	
ä 	ð :=ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð dÐ&6Ô&MÐcÐcÐcñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð  Ô5Ð`Ð8HÔ8`Ð`Ð5Ð8`Ò`Ð`Ð`Ð`Õ`Ô`Ð`Ð`Ð`Ð`Ð5Ð8`Ð`Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`ÐÑ`Ô`Ð`Õ`Ô`ÐÑ`Ô`Ð`Ð`Õ`Ô`Ð5Ñ`Ô`Ð`Õ`Ô`Ñ`Ô`Ð`Ð`Õ`Ô`Ð8HÑ`Ô`Ð`Õ`Ô`Ð8HÑ`Ô`Ð`Ð`Õ`Ô`Ð8`Ñ`Ô`Ð`Ð`Ñ`Ð`Ð`Ð`Ð`Ð`Ñ`Ð`Õ`Õ`Ô`Ð`Ñ`Ô`Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ØÔ2Ð;°eÐ;Ð2°eÒ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð2°eÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ÐÑ;Ô;Ð;Õ;Ô;ÐÑ;Ô;Ð;Ð;Õ;Ô;Ð2Ñ;Ô;Õ;Ô;°eÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;r   c                ó`  — |j         d         }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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}}|j
        }d
}||k    }|sÈt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|j
        › d�¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d	x}x}}d	S )u¡   [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]
        Kiá»ƒm chá»©ng má»Ÿ rá»™ng cÃ¢y ná»™i táº¡i Atlas qua 20 maps hoÃ n thÃ nh bonus.
        éÿÿÿÿr   r   )z1%(py2)s
{%(py2)s = %(py0)s.map_index
} == %(py5)sÚlast_recordr   r#   r$   Ng      N@)ú<=)z>%(py2)s
{%(py2)s = %(py0)s.average_clear_time_sec
} <= %(py5)sr   u"   Tá»‘c Ä‘á»™ dá»�n map trung bÃ¬nh u   s quÃ¡ cháº­m (> 60s)!r%   )r@   rD   r5   r6   r7   r8   r9   r:   r;   r<   Úaverage_clear_time_secr>   )rE   r   r„   rF   rG   rH   rI   rJ   s           r   Ú6test_atlas_progression_dag_tree_expansion_over_20_mapszVTestMultiMapEnduranceSimulation.test_atlas_progression_dag_tree_expansion_over_20_maps‡   s„  € ð 'Ô2°2Ô6ˆØÔ$Ð*¨Ð*Ð$¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð$¨Ð*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆ{Ñ*Ô*Ð*Õ*Ô*ˆ{Ñ*Ô*Ð*Ð*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÔ6ð 	
¸$ð 	
Ð6¸$Ò>ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
Ð6¸$ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð  ñ 	
ô 	
ð 	
õ 	
ä 	ð  ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 7ñ 	
ô 	
õ 	
ä 	ð ;?ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð qÐ1AÔ1XÐpÐpÐpñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r   N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rP   r]   rj   rt   ry   r�   r‡   rU   r   r   r   r   /   s²   € € € € € ØuÐuðQð Qð Qð Qð%ð %ð %ð %ðxð xð xð xð"ð ð ð ð zð zð zð zð<ð <ð <ð <ð

ð 

ð 

ð 

ð 

ð 

r   r   )r
   r   )r‹   Ú
__future__r   Úbuiltinsr7   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter5   ÚosÚpytestÚtypingr   r   Ú)tests.helpers.multi_map_endurance_harnessr   r   Úfixturer   r   rU   r   r   ú<module>r–      sû   ððð ð, #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð €„�hÐÑÔð;ð ;ð ;ñ  Ôð;ðb
ð b
ð b
ð b
ð b
ñ b
ô b
ð b
ð b
ð b
r   