§
    †j®j¤H  ã                  ó  — 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ZddlZddlmZmZmZ ddlmZ ddlmZmZ ddlmZmZmZmZ dZ G d	„ d
¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z dS )uy  AutoPOE2 - Unit Tests for Frontier Exploration Engine & Monster Density Heatmap.
==================================================================================
Kiá»ƒm thá»­ tÃ­ch há»£p chuyÃªn sÃ¢u cho Stage 5 In-Map Autonomous Exploration:
1. `MonsterDensityHeatmap`: PhÃ¢n bá»‘ khÃ´ng gian 2D, gom cá»¥m bÃ£i quÃ¡i (pack clustering),
   Ä‘áº¿m kills, tháº©m Ä‘á»‹nh bÃ£i quÃ¡i há»£p lá»‡ `is_clearing_legitimate(min_required_packs=4)`.
2. `FrontierExplorationEngine`: Ä�iá»�u phá»‘i 3 cháº¿ Ä‘á»™ (FRONTIER_EXPLORE, COMBAT_ENGAGE, BOSS_COMBAT),
   tÃ­ch há»£p BossArenaDetector vÃ  MinimapNavigationAdapter.
3. RÃ o cháº¯n Cáº¤M THOÃ�T Sá»šM (Anti-Premature-Exit Interlock):
   KhÃ¡ng triá»‡t Ä‘á»ƒ lá»— há»•ng "Ä‘Ã¡nh 1 con quÃ¡i á»Ÿ cá»­a map xong Ä‘á»©ng yÃªn 25s káº¿t luáº­n map clear".
4. Kiá»ƒm thá»­ hiá»‡u nÄƒng trÃªn frame thá»±c táº¿ (captures/*.png) < 10.0 ms.

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 < 500 dÃ²ng.
- Rule 5: 100% test case kiá»ƒm thá»­ thá»±c nghiá»‡m trÃªn artifact tháº­t.
- Báº¥t biáº¿n: INV-MAP-LEGITIMATE-CLEAR, INV-WASD-NO-BLIND-LMB.
é    )ÚannotationsN)ÚFrontierExplorationEngineÚInMapOperationModeÚExplorationStepDecision)ÚMapClearEvaluator)ÚMonsterDensityHeatmapÚMonsterPackEncounter)ÚArenaGateDetectionÚBossArenaDetectorÚBossArenaStateÚBossHealthBarDetectionzGc:\Projects\AutoPOE2\captures\20260910_054356_319_PERIODIC_ANALYSIS.pngc                  ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestMonsterDensityHeatmapuU   Kiá»ƒm thá»­ tÃ­nh nÄƒng quáº£n trá»‹ báº£n Ä‘á»“ nhiá»‡t máº­t Ä‘á»™ quÃ¡i váº­t 2D.c                ó�  — t          ddd¬¦  «        }|                     dd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  }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}|j        }||v }|sªt          j        d|fd||f¦  «        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}}|                     dd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  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        d         }|j        }d}	||	k    }|st          j        d
|fd||	f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}}	|                     dd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  }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"}|j        }||v }|sªt          j        d|fd||f¦  «        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}}dS )#uW   Kiá»ƒm thá»­ phÃ¢n Ã´ sector 100u x 100u vÃ  gom cá»¥m bÃ£i quÃ¡i trong bÃ¡n kÃ­nh 80u.ç      Y@é   ç      T@)Úsector_sizeÚmin_pack_monstersÚpack_merge_radiusç      ^@é   ç      ð?©Úplayer_xÚplayer_yÚmonsters_nearÚnow_secé   ©ú==)z9%(py2)s
{%(py2)s = %(py0)s.total_packs_count
} == %(py5)sÚheatmap©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7N)z<%(py2)s
{%(py2)s = %(py0)s.visited_sector_count
} == %(py5)s)r   r   ©Úin)z7%(py1)s in %(py5)s
{%(py5)s = %(py3)s.visited_sectors
}©Úpy1Úpy3r&   g     @`@ç     @_@é   ç       @r   )z5%(py3)s
{%(py3)s = %(py1)s.current_count
} == %(py6)s©r,   r-   Úpy6úassert %(py8)sÚpy8ç     àu@é   ç      @)é   r8   )r   Úrecord_telemetry_frameÚtotal_packs_countÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚvisited_sector_countÚvisited_sectorsÚpacksÚcurrent_count©Úselfr"   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert0Ú@py_assert2Ú@py_assert5Ú@py_format7Ú@py_format9s               úCC:\Projects\AutoPOE2\tests\test_frontier_exploration_and_density.pyÚ&test_spatial_sectors_and_pack_groupingz@TestMonsterDensityHeatmap.test_spatial_sectors_and_pack_grouping1   sp  € å'°EÈQÐbfÐgÑgÔgˆð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ+Ð0¨qÐ0Ð+¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð+¨qÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆwÑ0Ô0Ð0Õ0Ô0ˆwÑ0Ô0Ð0Ð0Õ0Ô0Ð+Ñ0Ô0Õ0Ô0¨qÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÐ0˜Ô0Ð0ˆvÐ0Ð0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆvÐ0Ð0Ñ0Ô0Õ0Ô0ˆvÑ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0˜Ñ0Ô0Ð0Õ0Ô0˜Ñ0Ô0Ð0Ð0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØŒ}˜QÔÐ2ÐÔ-Ð2°Ð2Ð-°Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð-°Ð2Ñ2Ô2Õ2Ô2ÐÑ2Ô2Õ2Ô2Ð-Ñ2Ô2Õ2Ô2°Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ+Ð0¨qÐ0Ð+¨qÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð+¨qÐ0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆwÑ0Ô0Ð0Õ0Ô0ˆwÑ0Ô0Ð0Ð0Õ0Ô0Ð+Ñ0Ô0Õ0Ô0¨qÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÐ0˜Ô0Ð0ˆvÐ0Ð0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆvÐ0Ð0Ñ0Ô0Õ0Ô0ˆvÑ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0˜Ñ0Ô0Ð0Õ0Ô0˜Ñ0Ô0Ð0Ð0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ó    c                óŽ	  — t          dd¬¦  «        }|                     dd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  }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d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  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|                     dd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  }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¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }
dd|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}}	dS )u_   Kiá»ƒm thá»­ tÃ­nh toÃ¡n sá»‘ quÃ¡i váº­t bá»‹ tiÃªu diá»‡t vÃ  Ä‘Ã¡nh dáº¥u bÃ£i dá»�n sáº¡ch.r   r   )r   r   r   é   r   r   r    )zB%(py2)s
{%(py2)s = %(py0)s.total_monsters_encountered
} == %(py5)sr"   r#   r'   r(   Nr   )zA%(py2)s
{%(py2)s = %(py0)s.total_monsters_eliminated
} == %(py5)sr8   r0   r   r7   r   )z;%(py2)s
{%(py2)s = %(py0)s.cleared_packs_count
} == %(py5)sT©Úis)z2%(py3)s
{%(py3)s = %(py1)s.is_cleared
} is %(py6)sr1   r3   r4   )r   r9   Útotal_monsters_encounteredr;   r<   r=   r>   r?   r@   rA   rB   Útotal_monsters_eliminatedÚcleared_packs_countrE   Ú
is_clearedrG   s               rS   Ú#test_kill_tracking_and_pack_clearedz=TestMonsterDensityHeatmap.test_kill_tracking_and_pack_clearedF   s«  € å'¸!ÈtÐTÑTÔTˆð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ1Ð6°QÐ6Ð1°QÒ6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð1°QÐ6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆwÑ6Ô6Ð6Õ6Ô6ˆwÑ6Ô6Ð6Ð6Õ6Ô6Ð1Ñ6Ô6Õ6Ô6°QÑ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Ð5°AÐ5Ð0°AÒ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð0°AÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Ð5Õ5Ô5Ð0Ñ5Ô5Õ5Ô5°AÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ0Ð5°AÐ5Ð0°AÒ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð0°AÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Ð5Õ5Ô5Ð0Ñ5Ô5Õ5Ô5°AÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØÔ0Ð5°AÐ5Ð0°AÒ5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð0°AÐ5Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Õ5Ô5ˆwÑ5Ô5Ð5Ð5Õ5Ô5Ð0Ñ5Ô5Õ5Ô5°AÑ5Ô5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆwÑ/Ô/Ð/Õ/Ô/ˆwÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØŒ}˜QÔÐ2ÐÔ*Ð2¨dÐ2Ð*¨dÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð*¨dÐ2Ñ2Ô2Õ2Ô2ÐÑ2Ô2Õ2Ô2Ð*Ñ2Ô2Õ2Ô2¨dÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2rU   c                ó0  — t          d¬¦  «        }|                     d¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        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}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}| 
                    dddd¬¦  «         | 
                    dddd¬¦  «         |                     d¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        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}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d|_        |                     d¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        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}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}d|_        g d¢}	t          |	¦  «        D ]t\  }
\  }}| 
                    t          |¦  «        t          |¦  «        dd|
z   ¬¦  «         | 
                    t          |¦  «        t          |¦  «        dd|
z   ¬¦  «         Œu|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¬¦  «        \  }}d}||u }|s—t          j        d|fd||f¦  «        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}}d&}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d
d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}dS )'uQ   Kiá»ƒm thá»­ logic tháº©m Ä‘á»‹nh tÃ­nh há»£p lá»‡ cá»§a quÃ¡ trÃ¬nh dá»�n quÃ¡i.r   ©r   r/   )Úmin_required_packsFrX   ©z%(py0)s is %(py3)sÚis_legit©r$   r-   úassert %(py5)sr&   Nu   0/4 bÃ£ir)   ©z%(py1)s in %(py3)sÚreason©r,   r-   r   r8   r   r   r   r0   u   1/4 bÃ£ié   Tu   >= 25 quÃ¡ié   ))éd   rk   )i,  rk   )iô  rk   )i¼  rk   ç      $@g      %@©ú>=©z9%(py2)s
{%(py2)s = %(py0)s.total_packs_count
} >= %(py5)sr"   r#   r'   r(   u   Ä�Ã£ dá»�n sáº¡ch)r   Úis_clearing_legitimater;   r<   r=   r>   r?   r@   rA   rB   r9   r[   Ú	enumerateÚfloatr:   )rH   r"   rc   rg   rO   rI   Ú@py_format4rL   rN   ÚcoordsÚiÚcxÚcyrJ   rK   rM   s                   rS   Ú&test_is_clearing_legitimate_thresholdsz@TestMonsterDensityHeatmap.test_is_clearing_legitimate_thresholdsY   s_  € å'¸$Ð?Ñ?Ô?ˆð #×9Ò9ÈQÐ9ÑOÔOÑˆ�&Ø Ð ˆx˜5Ð Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆx˜5Ð Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆxÑ Ô Ð Õ Ô ˆxÑ Ô Ð Ð Õ Ô ˜5Ñ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÐ#ˆz˜VÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆz˜VÐ#Ñ#Ô#Õ#Ô#ˆzÑ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜VÑ#Ô#Ð#Õ#Ô#˜VÑ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ð 	×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØ×&Ò&°ÀÐUVÐ`cÐ&ÑdÔdÐdØ"×9Ò9ÈQÐ9ÑOÔOÑˆ�&Ø Ð ˆx˜5Ð Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆx˜5Ð Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆxÑ Ô Ð Õ Ô ˆxÑ Ô Ð Ð Õ Ô ˜5Ñ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð ØÐ#ˆz˜VÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆz˜VÐ#Ñ#Ô#Õ#Ô#ˆzÑ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜VÑ#Ô#Ð#Õ#Ô#˜VÑ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ð -/ˆÔ)Ø"×9Ò9ÈQÐ9ÑOÔOÑˆ�&ØÐˆx˜4ÐÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐ&ˆ} Ð&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ} Ð&Ñ&Ô&Õ&Ô&ˆ}Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô& Ñ&Ô&Ð&Õ&Ô& Ñ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ð -/ˆÔ)ØAÐAÐAˆÝ$ VÑ,Ô,ð 	vð 	v‰KˆA‰x��BØ×*Ò*µE¸"±I´IÍÈbÉ	Ì	ÐabÐlpÐstÑltÐ*ÑuÔuÐuØ×*Ò*µE¸"±I´IÍÈbÉ	Ì	ÐabÐlpÐstÑltÐ*ÑuÔuÐuÐuàÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø"×9Ò9ÈQÐ9ÑOÔOÑˆ�&ØÐˆx˜4ÐÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ"Ð,Ð" fÐ,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð" fÐ,Ñ,Ô,Õ,Ô,Ð"Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, fÑ,Ô,Ð,Õ,Ô, fÑ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,rU   c                óP
  — t          ¦   «         }|                     d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  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|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}}|                     d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  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|                     d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  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|                     ¦   «          |                     dd¬¦  «         |                     d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  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|                     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  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}d
S )uG   Kiá»ƒm thá»­ tÃ­ch há»£p dá»¯ liá»‡u thá»‹ giÃ¡c vá»� Boss báº£n Ä‘á»“.Tr   )Úboss_bar_detectedÚhealth_ratiorX   )z5%(py2)s
{%(py2)s = %(py0)s.boss_detected
} is %(py5)sr"   r#   r'   r(   NF)z:%(py2)s
{%(py2)s = %(py0)s.boss_slain_optical
} is %(py5)sçš™™™™™¹?g{®Gáz„?çš™™™™™é?ç333333Ã?)rz   )r   Úupdate_optical_boss_statusÚboss_detectedr;   r<   r=   r>   r?   r@   rA   rB   Úboss_slain_opticalÚreset)rH   r"   rI   rJ   rK   rL   rM   s          rS   Ú!test_optical_boss_status_trackingz;TestMonsterDensityHeatmap.test_optical_boss_status_tracking{   s  € å'Ñ)Ô)ˆð 	×*Ò*¸TÐPSÐ*ÑTÔTÐTØÔ$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Õ,Ô,ˆwÑ,Ô,Ð,Ð,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØÔ)Ð2¨UÐ2Ð)¨UÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð)¨UÐ2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Ð2Õ2Ô2Ð)Ñ2Ô2Õ2Ô2¨UÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð 	×*Ò*¸TÐPTÐ*ÑUÔUÐUØÔ)Ð2¨UÐ2Ð)¨UÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð)¨UÐ2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Ð2Õ2Ô2Ð)Ñ2Ô2Õ2Ô2¨UÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð 	×*Ò*¸TÐPTÐ*ÑUÔUÐUØÔ)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆwÑ1Ô1Ð1Õ1Ô1ˆwÑ1Ô1Ð1Ð1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð 	�Š‰ŒˆØ×*Ò*¸TÐPTÐ*ÑUÔUÐUØ×*Ò*¸TÐPTÐ*ÑUÔUÐUØÔ)Ð2¨UÐ2Ð)¨UÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð)¨UÐ2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Õ2Ô2ˆwÑ2Ô2Ð2Ð2Õ2Ô2Ð)Ñ2Ô2Õ2Ô2¨UÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2à×*Ò*¸UÐ*ÑCÔCÐCØÔ)Ð1¨TÐ1Ð)¨TÐ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð)¨TÐ1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1ˆwÑ1Ô1Ð1Õ1Ô1ˆwÑ1Ô1Ð1Ð1Õ1Ô1Ð)Ñ1Ô1Õ1Ô1¨TÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1rU   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rT   r^   rx   rƒ   © rU   rS   r   r   .   sW   € € € € € Ø_Ð_ð1ð 1ð 1ð*3ð 3ð 3ð& -ð  -ð  -ðD2ð 2ð 2ð 2ð 2rU   r   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestFrontierExplorationEngineug   Kiá»ƒm thá»­ Ä‘á»™ng cÆ¡ Ä‘iá»�u phá»‘i thÃ¡m hiá»ƒm sÆ°Æ¡ng mÃ¹ liÃªn tá»¥c FrontierExplorationEngine.c                óò  — t          dd¬¦  «        }t          j        dt          j        ¬¦  «        }|                     |ddd¬¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        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dd¬¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        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}|j        }	||	v }|sªt          j	        d|fd||	f¦  «        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}}	|                     |ddd¬¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}dS ) uZ   Kiá»ƒm thá»­ chuyá»ƒn tráº¡ng thÃ¡i mÆ°á»£t mÃ  giá»¯a FRONTIER_EXPLORE vÃ  COMBAT_ENGAGE.r}   r/   ©Útarget_coveragera   ©i8  i€  r8   ©Údtyper   r   )Úframe_inputr   r   r   r    ©zR%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.FRONTIER_EXPLORE
}Ú	decision1r   ©r$   r%   Úpy4r2   r3   r4   N)z9%(py2)s
{%(py2)s = %(py0)s.packs_encountered
} == %(py5)sr#   r'   r(   r   r   )zO%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.COMBAT_ENGAGE
}Ú	decision2r   zStutter-Step Combatr)   ©z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reason
}r+   r.   Ú	decision3)r   ÚnpÚzerosÚuint8Úprocess_frame_and_decideÚmoder   ÚFRONTIER_EXPLOREr;   r<   r=   r>   r?   r@   rA   rB   Úpacks_encounteredÚCOMBAT_ENGAGErg   )rH   ÚengineÚdummy_framer“   rI   rP   rK   rQ   rR   rJ   rL   rM   r–   rN   rO   r˜   s                   rS   Ú/test_exploration_mode_transitions_with_monsterszMTestFrontierExplorationEngine.test_exploration_mode_transitions_with_monsters™   s·  € å*¸4ÐTUÐVÑVÔVˆõ ”h˜µb´hÐ?Ñ?Ô?ˆð ×3Ò3Ø#ØØØð	 4ñ 
ô 
ˆ	ð Œ~ÐDÕ!3Ô!DÐDˆ~Ð!DÒDÐDÐDÐDÕDÔDÐDÐDÐDÐDˆ~Ð!DÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆyÑDÔDÐDÕDÔDˆyÑDÔDÐDÐDÕDÔDˆ~ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDÕ!3ÑDÔDÐDÕDÔDÕ!3ÑDÔDÐDÐDÕDÔDÐ!DÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆyÑ/Ô/Ð/Õ/Ô/ˆyÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð ×3Ò3Ø#ØØØð	 4ñ 
ô 
ˆ	ð Œ~ÐAÕ!3Ô!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ˆyÑAÔAÐAÕAÔAˆyÑAÔAÐAÐAÕAÔAˆ~ÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAÕ!3ÑAÔAÐAÕAÔAÕ!3Ñ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ÐAØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆyÑ/Ô/Ð/Õ/Ô/ˆyÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø$Ð8¨	Ô(8Ð8Ð$Ð(8Ð8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð$Ð(8Ð8Ñ8Ô8Õ8Ô8Ð$Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¨	Ñ8Ô8Ð8Õ8Ô8¨	Ñ8Ô8Ð8Ð8Õ8Ô8Ð(8Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð ×3Ò3Ø#ØØØð	 4ñ 
ô 
ˆ	ð Œ~ÐDÕ!3Ô!DÐDˆ~Ð!DÒDÐDÐDÐDÕDÔDÐDÐDÐDÐDˆ~Ð!DÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆyÑDÔDÐDÕDÔDˆyÑDÔDÐDÐDÕDÔDˆ~ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDÕ!3ÑDÔDÐDÕDÔDÕ!3ÑDÔDÐDÐDÕDÔDÐ!DÑDÔDÐDÐDÑDÐDÐDÐDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDrU   c                ó8  — t          dd¬¦  «        }t          j        dt          j        ¬¦  «        }d„ |j        _        |                     |ddd¬	¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d}	|j        }
|	|
v }|sªt          j        d|fd|	|
f¦  «        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}}
d„ |j        _        |                     |ddd¬	¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d}	|j        }
|	|
v }|sªt          j        d|fd|	|
f¦  «        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}}
d„ |j        _        |                     |ddd¬	¦  «        }|j        }t          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        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d }	|j        }
|	|
v }|sªt          j        d|fd|	|
f¦  «        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}}
dS )!uR   Kiá»ƒm thá»­ phÃ¡t hiá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ vÃ  chuyá»ƒn cháº¿ Ä‘á»™ Ä‘Ã¡nh Boss.r}   r/   rŒ   rŽ   r�   c                ód   — t          dt          ddd¬¦  «        dt          d¬¦  «        ¬¦  «        S )NTg333333ë?)i   i�  iL  iX  )ÚdetectedÚ
confidenceÚbounding_boxF©r¦   ©Úgate_detectedÚ	gate_infoÚboss_bar_activeÚboss_bar_info©r   r
   r   ©Úframes    rS   ú<lambda>zTTestFrontierExplorationEngine.test_boss_gate_and_boss_combat_modes.<locals>.<lambda>Ä   s<   € ½>ØÝ(°$À4ÐVkÐlÑlÔlØ!Ý0¸%Ð@Ñ@Ô@ð	<
ñ <
ô <
€ rU   ç     @@r   ©r   r   r   r    )zO%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.BOSS_PRE_BUFF
}Údecisionr   r”   r3   r4   Nu   tiá»�n buffr)   r—   r+   r'   r(   c           
     ód   — t          dt          d¬¦  «        dt          ddd¬¦  «        ¬¦  «        S )NFr©   Tg      è?©r¦   r{   Ú	is_phasedrª   r¯   r°   s    rS   r²   zTTestFrontierExplorationEngine.test_boss_gate_and_boss_combat_modes.<locals>.<lambda>Ð   s<   € ½>ØÝ(°%Ð8Ñ8Ô8Ø Ý0¸$ÈTÐ]bÐcÑcÔcð	<
ñ <
ô <
€ rU   ç     À‚@)zM%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.BOSS_COMBAT
}Údecision_bossu   Giao tranh vá»›i Bossc           
     ód   — t          dt          d¬¦  «        dt          ddd¬¦  «        ¬¦  «        S )NFr©   Tg      à?r·   rª   r¯   r°   s    rS   r²   zTTestFrontierExplorationEngine.test_boss_gate_and_boss_combat_modes.<locals>.<lambda>Ü   s<   € ½>ØÝ(°%Ð8Ñ8Ô8Ø Ý0¸$ÈTÐ]aÐbÑbÔbð	<
ñ <
ô <
€ rU   )zK%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.BOSS_KITE
}Údecision_kiteu   Kiting tháº£ diá»�u nÃ© Ä‘Ã²n)r   r™   rš   r›   Úboss_detectorÚprocess_framerœ   r�   r   ÚBOSS_PRE_BUFFr;   r<   r=   r>   r?   r@   rA   rB   rg   ÚBOSS_COMBATÚ	BOSS_KITE)rH   r¡   r¢   rµ   rI   rP   rK   rQ   rR   rN   rJ   rO   rL   rM   rº   r¼   s                   rS   Ú$test_boss_gate_and_boss_combat_modeszBTestFrontierExplorationEngine.test_boss_gate_and_boss_combat_modes¾   sÔ  € å*¸4ÐTUÐVÑVÔVˆÝ”h˜µb´hÐ?Ñ?Ô?ˆð.
ð .
ˆÔÔ*ð ×2Ò2°;ÈÐY^ÐnoÐ2ÑpÔpˆØŒ}Ð@Õ 2Ô @Ð@ˆ}Ð @Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@ˆ}Ð @Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Ð@Õ@Ô@ˆ}Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Ð@Õ@Ô@Ð @Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØÐ/ ¤Ð/ˆ} Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/ˆ} Ð/Ñ/Ô/Õ/Ô/ˆ}Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð.
ð .
ˆÔÔ*ð ×7Ò7¸ÈeÐ^cÐstÐ7ÑuÔuˆØÔ!ÐCÕ%7Ô%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Õ%7ÑCÔCÐCÕCÔCÕ%7Ñ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Ø&Ð>¨-Ô*>Ð>Ð&Ð*>Ð>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð&Ð*>Ð>Ñ>Ô>Õ>Ô>Ð&Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>¨-Ñ>Ô>Ð>Õ>Ô>¨-Ñ>Ô>Ð>Ð>Õ>Ô>Ð*>Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ð.
ð .
ˆÔÔ*ð ×7Ò7¸ÈeÐ^cÐstÐ7ÑuÔuˆØÔ!ÐAÕ%7Ô%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ÐAÐAÕAÔAÐ!ÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔAÕ%7ÑAÔAÐAÕAÔAÕ%7Ñ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ÐAØ.ÐF°-Ô2FÐFÐ.Ð2FÐFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐ.Ð2FÐFÑFÔFÕFÔFÐ.ÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF°-ÑFÔFÐFÕFÔF°-ÑFÔFÐFÐFÕFÔFÐ2FÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFrU   N)r„   r…   r†   r‡   r£   rÂ   rˆ   rU   rS   rŠ   rŠ   –   sA   € € € € € ØqÐqð#Eð #Eð #EðJ'Gð 'Gð 'Gð 'Gð 'GrU   rŠ   c                  ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestAntiPrematureExitInterlockuz   Kiá»ƒm thá»­ rÃ o cháº¯n cáº¥m thoÃ¡t sá»›m: Loáº¡i bá»� 100% hiá»‡n tÆ°á»£ng Ä‘Ã¡nh 1 quÃ¡i rá»“i káº¿t luáº­n map clear.c           
     ó®
  — t          ¦   «         }t          dddd|¬¦  «        }t          dd|¬¦  «        }t          j        dt          j        ¬¦  «        }|                     d	d	d
dd¬¦  «         |                     |d	d	d
¬¦  «         |                     dd	ddd¬¦  «         |                     |dd	d¬¦  «         t          d¦  «        D ](}|                     d	|dz  z   d	ddd|dz  z   ¬¦  «         Œ)|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d¬ ¦  «        \  }}d!}||u }|s—t          j        d"|fd#||f¦  «        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}}d(}||k    }|s—t          j        d)|fd*||f¦  «        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}}|                     |d,d	d¬¦  «        }|j        }t(          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        t(          ¦  «        rt          j        t(          ¦  «        nd/t          j        |¦  «        d0œz  }d1d2|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }t(          j        }||k    }|sòt          j        d3|fd4||f¦  «        d.t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd.t          j        |¦  «        d/t          j        ¦   «         v st          j        t(          ¦  «        rt          j        t(          ¦  «        nd/t          j        |¦  «        d0œz  }d1d2|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}dS )5uî   Ká»‹ch báº£n thá»±c táº¿ cá»§a pháº£n há»“i User:
        NhÃ¢n váº­t Ä‘Ã¡nh 1 bÃ£i quÃ¡i á»Ÿ cá»­a map, Ä‘i vÃ²ng vÃ²ng Ä‘áº¡t Ä‘á»§ 1200u, Ä‘á»©ng yÃªn 25s, quÃ¡ 90s:
        Báº®T BUá»˜C KHÃ”NG Ä�Æ¯á»¢C Káº¾T LUáº¬N MAP CLEAR!
        ç     €V@r}   ç     À’@r/   ©Úmin_duration_secr�   Úmin_traverse_unitsra   Údensity_heatmap©r�   ra   rË   rŽ   r�   r   r8   gš™™™™™©?ç      @©Úpos_xÚpos_yr   Úcoverage_ratior   r´   g     €[@r   g{®Gáz´?rl   é   ç      i@r~   g      .@r   rm   ©z@%(py2)s
{%(py2)s = %(py0)s.total_distance_traversed
} >= %(py5)sÚ	evaluatorr#   r'   r(   Ng     ÀW@©Úelapsed_secr   FrX   rb   r]   rd   re   r&   Ú r    )z%(py0)s == %(py3)srg   g     P”@r’   rµ   r   r”   r3   r4   )ú!=)zO%(py2)s
{%(py2)s = %(py0)s.mode
} != %(py6)s
{%(py6)s = %(py4)s.MAP_COMPLETED
})r   r   r   r™   rš   r›   Úupdate_telemetryrœ   ÚrangeÚtotal_distance_traversedr;   r<   r=   r>   r?   r@   rA   rB   Úevaluate_clearr�   r   rž   ÚMAP_COMPLETED)rH   r"   rÕ   r¡   r¢   ÚsteprI   rJ   rK   rL   rM   r]   rg   rO   rs   rµ   rP   rQ   rR   s                      rS   ÚCtest_rejects_single_monster_at_entrance_even_with_distance_and_timezbTestAntiPrematureExitInterlock.test_rejects_single_monster_at_entrance_even_with_distance_and_timeë   sJ  € õ
 (Ñ)Ô)ˆÝ%Ø!Ø Ø%Ø Ø#ð
ñ 
ô 
ˆ	õ +Ø Ø Ø#ð
ñ 
ô 
ˆõ ”h˜µb´hÐ?Ñ?Ô?ˆð 	×"Ò"¨°eÈ1Ð]aÐknÐ"ÑoÔoÐoØ×'Ò'¨¸eÈeÐcdÐ'ÑeÔeÐeð 	×"Ò"¨°eÈ1Ð]aÐkoÐ"ÑpÔpÐpØ×'Ò'¨¸eÈeÐcdÐ'ÑeÔeÐeõ ˜!‘H”Hð 	Oð 	OˆDØ×&Ò&¨U°T¸E±\Ñ-AÈÐ^_Ðptð  Cð  FJð  MNñ  FNñ  NÐ&ñ  Oô  Oð  Oð  OØÔ1Ð;°VÐ;Ð1°VÒ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Ð;Õ;Ô;Ð1Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð '×5Ò5À$ÐPTÐ5ÑUÔUÑˆ
�Fð #Ð"ˆz˜UÐ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆz˜UÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"˜UÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÐˆv˜Š|ÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×2Ò2°;ÈÐZ_ÐopÐ2ÑqÔqˆØŒ}ÐCÕ 2Ô 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ˆxÑCÔCÐCÕCÔCˆxÑCÔCÐCÐCÕCÔCˆ}ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCÕ 2ÑCÔCÐCÕCÔCÕ 2Ñ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ØŒ}Ð@Õ 2Ô @Ð@ˆ}Ð @Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@ˆ}Ð @Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Ð@Õ@Ô@ˆ}Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Ð@Õ@Ô@Ð @Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@rU   c                ó$  — t          d¬¦  «        }t          dddd|¬¦  «        }t          dd|¬¦  «        }t          j        d	t          j        ¬
¦  «        }g d¢}d}d}t          |¦  «        D ]‰\  }\  }	}
|                     |	|
d||¬¦  «         |                     ||	|
d¬¦  «         |dz  }|dz  }|                     |	dz   |
dz   d||¬¦  «         |                     ||	dz   |
dz   d¬¦  «         |dz  }ŒŠ|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}||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dddd ¬¦  «         |                     d d ¬!¦  «        \  }}d"}||u }|s—t          j        d#|fd$||f¦  «        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}}d)}||v }|s—t          j        d*|fd+||f¦  «        t          j        |¦  «        d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,d-œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}}d.}||v }|s—t          j        d*|fd+||f¦  «        t          j        |¦  «        d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,d-œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}}d/}||v }|s—t          j        d*|fd+||f¦  «        t          j        |¦  «        d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,d-œz  }d'd(|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}}d|j        j        _        d|j        _        d0„ |j        _        |                     |ddd¬¦  «        }|j        }t6          j        }||k    }|sòt          j        d1|fd2||f¦  «        d3t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd3t          j        |¦  «        d4t          j        ¦   «         v st          j        t6          ¦  «        rt          j        t6          ¦  «        nd4t          j        |¦  «        d5œz  }d6d7|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}d8}|j        }||v }|sªt          j        d*|fd9||f¦  «        t          j        |¦  «        d3t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd3t          j        |¦  «        d:œz  }dd|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}x}}dS );u˜  Ká»‹ch báº£n hoÃ n táº¥t báº£n Ä‘á»“ chuáº©n chá»‰nh:
        - Tuáº§n tra qua 5 bÃ£i quÃ¡i khÃ¡c nhau, tiÃªu diá»‡t tá»•ng cá»™ng 22 quÃ¡i váº­t.
        - QuÃ£ng Ä‘Æ°á»�ng Ä‘áº¡t > 1200u.
        - Ä�á»™ phá»§ sÆ°Æ¡ng mÃ¹ Minimap Ä‘áº¡t 82% (>= 80%).
        - Thá»�i gian trong map 115s (>= 90s).
        -> Cáº£ MapClearEvaluator vÃ  FrontierExplorationEngine cÃ¹ng cÃ´ng nháº­n hoÃ n táº¥t map!
        r   r`   rÆ   r}   rÇ   r/   rÈ   rÌ   rŽ   r�   ))r   r   )r5   ç     Àb@)r¹   rÓ   )g     �Š@g     Àr@)g     0‘@g      y@)g     •@r³   rl   r|   rÎ   r´   rÍ   r   rm   rÔ   rÕ   r#   r'   r(   Nr   ro   r"   )z;%(py2)s
{%(py2)s = %(py0)s.cleared_packs_count
} >= %(py5)sg     à•@r³   g�Âõ(\�ê?g     À\@rÖ   TrX   rb   r]   rd   re   r&   u    Minimap Ä‘Ã£ má»Ÿ sÆ°Æ¡ng Ä‘áº¡tr)   rf   rg   rh   z>= 80%z>= 1200uc                ó   — d S )Nrˆ   )Úfs    rS   r²   zTTestAntiPrematureExitInterlock.test_legitimate_full_clear_pipeline.<locals>.<lambda>U  s   € À€ rU   r    )zO%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.MAP_COMPLETED
}rµ   r   r”   r3   r4   u   Ä�áº¡t Ä‘á»™ phá»§ sÆ°Æ¡ng mÃ¹r—   r+   )r   r   r   r™   rš   r›   rq   rÚ   rœ   rÜ   r;   r<   r=   r>   r?   r@   rA   rB   r:   r\   rÝ   Únav_adapterÚexplorerrÑ   Úfog_explorerÚprocess_fullscreen_framer�   r   rÞ   rg   )rH   r"   rÕ   r¡   r¢   Ú	waypointsÚtÚcovru   ÚwxÚwyrI   rJ   rK   rL   rM   r]   rg   rO   rs   rN   rµ   rP   rQ   rR   s                            rS   Ú#test_legitimate_full_clear_pipelinezBTestAntiPrematureExitInterlock.test_legitimate_full_clear_pipeline  s–	  € õ (¸$Ð?Ñ?Ô?ˆÝ%Ø!Ø Ø%Ø Ø#ð
ñ 
ô 
ˆ	õ +Ø Ø Ø#ð
ñ 
ô 
ˆõ ”h˜µb´hÐ?Ñ?Ô?ˆð
ð 
ð 
ˆ	ð
 ˆØˆÝ$ YÑ/Ô/ð 
	ð 
	‰KˆA‰x��Bà×&Ò&¨R°rÈÐ[^ÐhiÐ&ÑjÔjÐjØ×+Ò+¨KÀ"ÈrÐabÐ+ÑcÔcÐcØ�‰HˆAØ�4‰KˆCð ×&Ò&¨R°$©Y¸bÀ4¹iÐWXÐilÐvwÐ&ÑxÔxÐxØ×+Ò+¨KÀ"ÀtÁ)ÐVXÐ[_ÑV_ÐopÐ+ÑqÔqÐqØ�‰IˆAˆAàÔ1Ð;°VÐ;Ð1°VÒ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Õ;Ô;ˆyÑ;Ô;Ð;Ð;Õ;Ô;Ð1Ñ;Ô;Õ;Ô;°VÑ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ØÔ(Ð-¨AÐ-Ð(¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð(¨AÐ-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Õ-Ô-ˆwÑ-Ô-Ð-Ð-Õ-Ô-Ð(Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆwÑ/Ô/Ð/Õ/Ô/ˆwÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð 	×"Ò"¨°uÈAÐ^bÐlqÐ"ÑrÔrÐrØ&×5Ò5À%ÐQVÐ5ÑWÔWÑˆ
�Fà!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø1Ð;Ð1°VÐ;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð1°VÐ;Ñ;Ô;Õ;Ô;Ð1Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;°VÑ;Ô;Ð;Õ;Ô;°VÑ;Ô;Ð;Ð;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;ØÐ!ˆx˜6Ð!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆx˜6Ð!Ñ!Ô!Õ!Ô!ˆxÑ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!˜6Ñ!Ô!Ð!Õ!Ô!˜6Ñ!Ô!Ð!Ð!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÐ#ˆz˜VÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆz˜VÐ#Ñ#Ô#Õ#Ô#ˆzÑ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜VÑ#Ô#Ð#Õ#Ô#˜VÑ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ð 6:ˆÔÔ#Ô2Ø-1ˆÔÔ*Ø6D°nˆÔÔ3à×2Ò2°;ÈÐZ_ÐopÐ2ÑqÔqˆØŒ}Ð@Õ 2Ô @Ð@ˆ}Ð @Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@ˆ}Ð @Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Õ@Ô@ˆxÑ@Ô@Ð@Ð@Õ@Ô@ˆ}Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Õ@Ô@Õ 2Ñ@Ô@Ð@Ð@Õ@Ô@Ð @Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø/ÐB°8´?ÐBÐ/°?ÐBÐBÐBÐBÕBÔBÐBÐBÐBÐBÐ/°?ÐBÑBÔBÕBÔBÐ/ÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔB°8ÑBÔBÐBÕBÔB°8ÑBÔBÐBÐBÕBÔB°?ÑBÔBÐBÐBÑBÐBÐBÐBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBÐBÐBÐBÐBrU   N)r„   r…   r†   r‡   rà   rî   rˆ   rU   rS   rÄ   rÄ   è   sL   € € € € € ð Eð  Eð,Að ,Að ,Að\@Cð @Cð @Cð @Cð @CrU   rÄ   c                  óŽ   — e Zd ZdZej                             ej         	                    e
¦  «         d¬¦  «        d„ ¦   «         ZdS )ÚTestPerformanceOnRealArtifactsuH   Kiá»ƒm thá»­ thá»�i gian thá»±c thi trÃªn áº£nh chá»¥p game thá»±c táº¿.u-   Artifact áº£nh thá»±c táº¿ khÃ´ng tá»“n táº¡i)rg   c                óT  — ddl m} t          j        |                     t
          ¦  «        ¦  «        }t          dd¬¦  «        }|                     |ddd¬¦  «         g }t          d¦  «        D ]Z}t          j
        ¦   «         }|                     |d	d	d¬¦  «        }|                     t          j
        ¦   «         |z
  d
z  ¦  «         Œ[t          t          j        |¦  «        ¦  «        }t          d|d›d�¦  «         d}	||	k     }
|
s±t          j        d|
fd||	f¦  «        dt#          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }t          j        d|d›d�¦  «        dz   d|iz  }t-          t          j        |¦  «        ¦  «        ‚dx}
}	|j        }
t2          j        t2          j        t2          j        t2          j        f}|
|v }|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 )ug   Xá»­ lÃ½ khung hÃ¬nh thá»±c táº¿ 1080p pháº£i hoÃ n táº¥t trong Tier 2 budget (< 35ms, tá»©c > 28 FPS).r   )ÚImager}   r/   rŒ   r   r´   é
   râ   g     @�@z9
[PERF] FrontierExplorationEngine process_frame latency: z.2fz msg     €A@)ú<)z%(py0)s < %(py3)sÚavg_latencyrd   zLatency u,    ms vÆ°á»£t quÃ¡ ngÃ¢n sÃ¡ch Tier 2 35.0 ms!z
>assert %(py5)sr&   Nr)   )z,%(py2)s
{%(py2)s = %(py0)s.mode
} in %(py5)srµ   r#   r'   r(   )ÚPILrò   r™   ÚarrayÚopenÚREAL_CAPTURE_PATHr   rœ   rÛ   ÚtimeÚperf_counterÚappendrr   ÚmeanÚprintr;   r<   r=   r>   r?   r@   Ú_format_assertmsgrA   rB   r�   r   rž   r    rÁ   rÀ   )rH   rò   Ú	frame_arrr¡   Ú	latenciesÚ_Út0rµ   rõ   rO   rI   rs   rL   rJ   rK   rM   s                   rS   Ú-test_process_frame_latency_under_tier2_budgetzLTestPerformanceOnRealArtifacts.test_process_frame_latency_under_tier2_budget_  s~  € ð 	ÐÐÐÐÐÝ”H˜UŸZšZÕ(9Ñ:Ô:Ñ;Ô;ˆ	Ý*¸4ÐTUÐVÑVÔVˆð 	×'Ò'¨	¸EÈEÐabÐ'ÑcÔcÐcð ˆ	Ý�r‘”ð 	Bð 	BˆAÝÔ"Ñ$Ô$ˆBØ×6Ò6°yÈ5Ð[`ÐpqÐ6ÑrÔrˆHØ×Ò�dÔ/Ñ1Ô1°BÑ6¸&Ñ@ÑAÔAÐAÐAå�BœG IÑ.Ô.Ñ/Ô/ˆÝÐ_È;Ð_Ð_Ð_Ð_Ñ`Ô`Ð`Ø!Ðkˆ{˜TÒ!ÐkÐkÐkÕkÔkÐkÐkÐkÐkˆ{˜TÐkÑkÔkÐkÕkÔkÑkÔkÐkÐkÕkÔkˆ{ÑkÔkÐkÕkÔkˆ{ÑkÔkÐkÐkÕkÔk˜TÑkÔkÐkÐkÑkÐkÕkÔkÐ#k¨kÐ#kÐ#kÐ#kÐ#kÑkÔkÐkÑkÐkÐkÐkÑkÐkÕkÕkÔkÐkÑkÔkÑkÔkÐkÐkÐkÐkÐkØŒ}ð 	
ÝÔ/ÝÔ,ÝÔ(ÝÔ*ð	!
ð 	
ˆ}ð !
ð 
ð 	
ð 	
ð 	
õ 	
ì
ð	
ð 	
ð 	
ð 	
ˆ}ð !
ð 	
ñ 	
ô 	
ð 	
õ 	
ô
 
ñ	
ô 	
ð 	
ð 	
õ 	
ì
ð ñ 	
ô 	
ð 	
õ 	
ô
 
ð ñ 	
ô 	
ð 	
ð 	
õ 	
ô
 
ð ñ 	
ô 	
õ 	
ô
 
ð!
ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ì
ð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
rU   N)r„   r…   r†   r‡   ÚpytestÚmarkÚskipifÚosÚpathÚexistsrù   r  rˆ   rU   rS   rð   rð   \  s]   € € € € € ØRÐRà„[×Ò˜BœGŸNšNÐ+<Ñ=Ô=Ð=ÐFuÐÑvÔvð
ð 
ñ wÔvð
ð 
ð 
rU   rð   )!r‡   Ú
__future__r   Úbuiltinsr=   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter;   r  rú   Únumpyr™   r  Ú9src.assistant_tool.navigation.frontier_exploration_enginer   r   r   Ú1src.assistant_tool.navigation.map_clear_evaluatorr   Ú5src.assistant_tool.navigation.monster_density_heatmapr   r	   Ú-src.assistant_tool.vision.boss_arena_detectorr
   r   r   r   rù   r   rŠ   rÄ   rð   rˆ   rU   rS   ú<module>r     sí  ððð ð$ #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð
 PÐ OÐ OÐ OÐ OÐ Oðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð _Ð ðe2ð e2ð e2ð e2ð e2ñ e2ô e2ð e2ðPOGð OGð OGð OGð OGñ OGô OGð OGðdqCð qCð qCð qCð qCñ qCô qCð qCðh
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
rU   