§
    ñÿ®jŸ1  ã                  óÖ   — 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ZddlmZ ddlmZmZmZ ddlmZmZ  G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        ZdS )uÀ  AutoPOE2 - Unit Tests for Perception Prototypes (Doc 69 Â§3.4 / SSoT 2026).
=============================================================================
Kiá»ƒm thá»­ toÃ n diá»‡n 3 cÃ´ng nghá»‡ cáº£m biáº¿n vÃ  khÃ´ng gian báº£n Ä‘á»“ chiáº¿n lÆ°á»£c cá»§a SÆ° Ä‘oÃ n 2:
1. `DirectNavMeshBitsetFusion`:
   - Quáº£n trá»‹ Bitset Ä‘á»‹a hÃ¬nh 64-bit trá»±c tiáº¿p tá»« RAM, xáº£ sÆ°Æ¡ng mÃ¹ Fog of War.
   - A* Bitset Global Routing toÃ n báº£n Ä‘á»“ hoÃ n táº¥t trong < 1.0 ms (tÄƒng tá»‘c x3).
2. `SimdSignatureScannerBridge`:
   - QuÃ©t Ä‘á»“ng loáº¡t 8 Static Roots cá»§a POE2 Client trong < 3.0 ms.
   - QuÃ©t vi sai cá»­a sá»• 16MB tÃ¬m tá»�a Ä‘á»™ XYZ trong < 2.0 ms, loáº¡i bá»� neo tÄ©nh 0x290/0x540.
3. `DynamicLootDensityClusterer`:
   - PhÃ¢n cá»¥m giÃ¡ trá»‹ kinh táº¿ theo máº­t Ä‘á»™ (Chaos/giÃ¢y).
   - Triá»‡t tiÃªu 100% quay Ä‘áº§u nháº·t rÃ¡c (Zero Backtracking).
   - Miá»…n trá»« báº£o vá»‡ tuyá»‡t Ä‘á»‘i cho váº­t pháº©m tá»‘i thÆ°á»£ng (Divine Orb, Mirror, T15+ Waystone).

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Python 3.11 Cold Path Tier 2.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p, tráº§n file < 500 dÃ²ng.
- Rule 5: 100% test case kiá»ƒm thá»­ thá»±c nghiá»‡m trÃªn artifact vÃ  taxonomy tháº­t.
é    )ÚannotationsN)ÚDirectNavMeshBitsetFusion)ÚDynamicLootDensityClustererÚGroundItemInfoÚLootClusterResult)ÚDynamicXyzCandidateÚSimdSignatureScannerBridgec                  ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestDirectNavMeshBitsetFusionuX   Kiá»ƒm thá»­ thuáº­t toÃ¡n há»£p nháº¥t Bitset Ä‘á»‹a hÃ¬nh vÃ  tÃ¬m Ä‘Æ°á»�ng A* < 1ms.c           	     ót  — t          ddd¬¦  «        }|j        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}x}x}x}}|j
        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}x}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        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}x}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
        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }	t          t          j	        |	¦  «        ¦  «        ‚dx}x}x}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}||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}||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S )uS   Kiá»ƒm thá»­ khá»Ÿi táº¡o lÆ°á»›i bitset 128x128 vÃ  cÃ¡c phÃ©p thao tÃ¡c bit O(1).é€   ç      $@©ÚcolsÚrowsÚgrid_to_world_scaleé
   F©Úis)z[%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.is_walkable
}(%(py4)s, %(py6)s)
} is %(py11)sÚfusion©Úpy0Úpy2Úpy4Úpy6Úpy8Úpy11úassert %(py13)sÚpy13N©z[%(py8)s
{%(py8)s = %(py2)s
{%(py2)s = %(py0)s.is_explored
}(%(py4)s, %(py6)s)
} is %(py11)sr   ©ú==)z<%(py2)s
{%(py2)s = %(py0)s.total_walkable_cells
} == %(py5)s©r   r   Úpy5úassert %(py7)sÚpy7Té   )z?%(py2)s
{%(py2)s = %(py0)s.explored_walkable_cells
} == %(py5)s)z%(py0)s == %(py3)sÚgx©r   Úpy3úassert %(py5)sr$   Úgy)r   Úis_walkableÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚis_exploredÚtotal_walkable_cellsÚset_cell_walkableÚset_exploredÚexplored_walkable_cellsÚgrid_to_worldÚworld_to_grid)Úselfr   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert7Ú@py_assert10Ú@py_assert9Ú@py_format12Ú@py_format14Ú@py_assert4Ú@py_format6Ú@py_format8ÚwxÚwyr(   r,   Ú@py_assert2Ú@py_format4s                      ú8C:\Projects\AutoPOE2\tests\test_perception_prototypes.pyÚ+test_bitset_initialization_and_cell_querieszITestDirectNavMeshBitsetFusion.test_bitset_initialization_and_cell_queries,   s"	  € å*°¸#ÐSWÐXÑXÔXˆð Ô!Ð2 "Ð2 bÐ2Ð!Ð! " bÑ)Ô)Ð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ˆvÑ2Ô2Ð2Õ2Ô2ˆvÑ2Ô2Ð2Ð2Õ2Ô2Ð!Ñ2Ô2Õ2Ô2 "Ñ2Ô2Õ2Ô2 bÑ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Ð2Ð2Ð2Ð2Ð2Ð2ØÔ!Ð2 "Ð2 bÐ2Ð!Ð! " bÑ)Ô)Ð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ˆvÑ2Ô2Ð2Õ2Ô2ˆvÑ2Ô2Ð2Ð2Õ2Ô2Ð!Ñ2Ô2Õ2Ô2 "Ñ2Ô2Õ2Ô2 bÑ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Ð2Ð2Ð2Ð2Ð2Ð2ØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð 	× Ò   R¨Ñ.Ô.Ð.ØÔ!Ð1 "Ð1 bÐ1Ð!Ð! " bÑ)Ô)Ð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ˆvÑ1Ô1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Ð1Õ1Ô1Ð!Ñ1Ô1Õ1Ô1 "Ñ1Ô1Õ1Ô1 bÑ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Ð1Ð1Ð1Ð1Ð1ØÔ*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Õ/Ô/ˆvÑ/Ô/Ð/Ð/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð 	×Ò˜B  DÑ)Ô)Ð)ØÔ!Ð1 "Ð1 bÐ1Ð!Ð! " bÑ)Ô)Ð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ˆvÑ1Ô1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Ð1Õ1Ô1Ð!Ñ1Ô1Õ1Ô1 "Ñ1Ô1Õ1Ô1 bÑ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Ð1Ð1Ð1Ð1Ð1ØÔ-Ð2°Ð2Ð-°Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð-°Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆvÑ2Ô2Ð2Õ2Ô2ˆvÑ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ð ×%Ò% b¨"Ñ-Ô-‰ˆˆBØ×%Ò% b¨"Ñ-Ô-‰ˆˆBØˆˆr�RŠxˆˆˆ�Œˆˆˆˆˆr�Rˆ‰Œˆ�Œ‰Œˆˆ�Œˆr‰Œˆ�Œˆr‰Œˆˆ�Œ�R‰Œˆˆ‰ˆˆˆˆˆ‰ˆ��Œˆ‰Œ‰ŒˆˆˆˆˆØˆˆr�RŠxˆˆˆ�Œˆˆˆˆˆr�Rˆ‰Œˆ�Œ‰Œˆˆ�Œˆr‰Œˆ�Œˆr‰Œˆˆ�Œ�R‰Œˆˆ‰ˆˆˆˆˆ‰ˆ��Œˆ‰Œ‰Œˆˆˆˆˆˆˆó    c           	     óÀ  — t          ddd¬¦  «        }t          dd¦  «        D ],}t          dd¦  «        D ]}|                     ||d¦  «         ŒŒ-|                     dd¦  «        \  }}|                     ||d¬	¦  «         |j        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}	x}}
|j        }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        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}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 )uS   Kiá»ƒm thá»­ xáº£ sÆ°Æ¡ng mÃ¹ theo bÃ¡n kÃ­nh táº§m nhÃ¬n nhÃ¢n váº­t (FoV Reveal).é@   r   r   é   é(   Té    g      D@)Úradiusr   r    r   r   r   r   Né"   é   ©ú>)z>%(py2)s
{%(py2)s = %(py0)s.explored_walkable_cells
} > %(py5)sr#   r%   r&   )r   Úranger8   r;   Úreveal_fog_around_world_posr6   r.   r/   r0   r1   r2   r3   r4   r5   r:   )r=   r   ÚyÚxrI   rJ   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   s                    rM   Útest_reveal_fog_around_posz8TestDirectNavMeshBitsetFusion.test_reveal_fog_around_posE   sü  € å*°¸ÐQUÐVÑVÔVˆõ �r˜2‘”ð 	5ð 	5ˆAÝ˜2˜r‘]”]ð 5ð 5�Ø×(Ò(¨¨A¨tÑ4Ô4Ð4Ð4ð5ð ×%Ò% b¨"Ñ-Ô-‰ˆˆBØ×*Ò*¨2¨r¸$Ð*Ñ?Ô?Ð?ð Ô!Ð1 "Ð1 bÐ1Ð!Ð! " bÑ)Ô)Ð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ˆvÑ1Ô1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Ð1Õ1Ô1Ð!Ñ1Ô1Õ1Ô1 "Ñ1Ô1Õ1Ô1 bÑ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Ð1Ð1Ð1Ð1Ð1ØÔ!Ð1 "Ð1 bÐ1Ð!Ð! " bÑ)Ô)Ð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ˆvÑ1Ô1Ð1Õ1Ô1ˆvÑ1Ô1Ð1Ð1Õ1Ô1Ð!Ñ1Ô1Õ1Ô1 "Ñ1Ô1Õ1Ô1 bÑ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Ð1Ð1Ð1Ð1Ð1ØÔ-Ð2°Ð2Ð-°Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð-°Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆvÑ2Ô2Ð2Õ2Ô2ˆvÑ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Ð2rO   c                ó  — t          ddd¬¦  «        }t          dd¦  «        D ]M}|                     ||d¦  «         |                     |dz   |d¦  «         |                     ||dz   d¦  «         ŒN|                     dd¦  «        }|                     dd¦  «        }g }t          d¦  «        D ]0}|                     ||¦  «        \  }}|                     |¦  «         Œ1t          t          j        |¦  «        ¦  «        }	t          d	|	d
›dt          |¦  «        › d�¦  «         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z   d|iz  }t%          t          j        |¦  «        ¦  «        ‚dx}
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  }t          j        d|	d
›d�¦  «        dz   d|iz  }t%          t          j        |¦  «        ¦  «        ‚dx}}
dS )u_   Kiá»ƒm thá»­ thuáº­t toÃ¡n A* trÃªn Bitset toÃ n báº£n Ä‘á»“ pháº£i hoÃ n táº¥t trong < 1.0 ms.r   r   r   r   éi   Tr'   éd   zJ
[PERF] DirectNavMeshBitsetFusion A* Pathfinding latency (Python Tier 2): ú.3fz ms (Path length: ú)rX   ©z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sÚlenÚpath©r   Úpy1r*   r   u'   Ä�Æ°á»�ng Ä‘i A* khÃ´ng Ä‘Æ°á»£c rá»—ngú
>assert %(py8)sr   Ng      @©ú<©z%(py0)s < %(py3)sÚavg_latr)   u"   Thá»�i gian tÃ¬m Ä‘Æ°á»�ng Python u+    ms vÆ°á»£t quÃ¡ ngÃ¢n sÃ¡ch Tier 2 5.0 ms!ú
>assert %(py5)sr$   )r   rZ   r8   r;   Úfind_global_pathÚappendÚfloatÚnpÚmeanÚprintre   r.   r/   r0   r1   r2   r3   Ú_format_assertmsgr4   r5   )r=   r   ÚiÚstart_wÚgoal_wÚ	latenciesÚ_rf   Údur_msrm   rK   r@   rF   Ú@py_format7Ú@py_format9r>   rL   rG   s                     rM   Ú'test_global_pathfinding_sub_millisecondzETestDirectNavMeshBitsetFusion.test_global_pathfinding_sub_millisecondV   s}  € å*°¸#ÐSWÐXÑXÔXˆõ �r˜3‘”ð 	5ð 	5ˆAØ×$Ò$ Q¨¨4Ñ0Ô0Ð0Ø×$Ò$ Q¨¡U¨A¨tÑ4Ô4Ð4Ø×$Ò$ Q¨¨A©¨tÑ4Ô4Ð4Ð4à×&Ò& r¨2Ñ.Ô.ˆØ×%Ò% c¨3Ñ/Ô/ˆð ˆ	Ý�r‘”ð 	%ð 	%ˆAØ!×2Ò2°7¸FÑCÔC‰LˆD�&Ø×Ò˜VÑ$Ô$Ð$Ð$å�œ 	Ñ*Ô*Ñ+Ô+ˆÝð  HÐ\cð  Hð  Hð  HÕ{~ð  @Dñ  |Eô  |Eð  Hð  Hð  Hñ  	Iô  	Ið  	IÝ�4‰yŒyÐH˜2ÐHˆy˜2Š~ÐHÐHÑHÕHÔHÐHÐHÐHÐHˆy˜2ÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH�sÑHÔHÐHÕHÔH�sÑHÔHÐHÐHÐHÕHÔHÑHÔHÐHÐHÕHÔH�4ÑHÔHÐHÕHÔH�4ÑHÔHÐHÐHÕHÔHˆyÑHÔHÕHÔH˜2ÑHÔHÐHÐHÑHÐHÕHÔHÐHÑHÔHÐHÑHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHØÐ{ˆw˜Š}Ð{Ð{Ð{Õ{Ô{Ð{Ð{Ð{Ð{ˆw˜Ð{Ñ{Ô{Ð{Õ{Ô{Ñ{Ô{Ð{Ð{Õ{Ô{ˆwÑ{Ô{Ð{Õ{Ô{ˆwÑ{Ô{Ð{Ð{Õ{Ô{˜Ñ{Ô{Ð{Ð{Ñ{Ð{Õ{Ô{Ð{À7Ð{Ð{Ð{Ð{Ñ{Ô{Ð{Ñ{Ð{Ð{Ð{Ñ{Ð{Õ{Õ{Ô{Ð{Ñ{Ô{Ñ{Ô{Ð{Ð{Ð{Ð{Ð{Ð{Ð{rO   c                óž  — t          ddd¬¦  «        }t          d¦  «        D ]+}t          d¦  «        D ]}|                     ||d¦  «         ŒŒ,t          d¦  «        D ]+}t          d¦  «        D ]}|                     ||d¦  «         ŒŒ,|                     d¬¦  «        }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  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}d„ |D ¦   «         }
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  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}}dS )uP   Kiá»ƒm thá»­ trÃ­ch xuáº¥t cÃ¡c Ã´ mÃ©p biÃªn Frontier tiáº¿p giÃ¡p sÆ°Æ¡ng mÃ¹.rT   r   r   Té   é2   )Úmax_frontiersr   rX   rd   re   Ú	frontiersrg   úassert %(py8)sr   Nc                óB   — g | ]}|d          dk    s|d         dk    ¯|‘ŒS )r   r   r'   © )Ú.0Úpts     rM   ú
<listcomp>zPTestDirectNavMeshBitsetFusion.test_frontier_cells_extraction.<locals>.<listcomp>}   s-   € ÐNÐNÐN °2°a´5¸B²;°;À"ÀQÄ%È2Â+À+˜À+À+À+rO   Úboundary_hits)r   rZ   r8   r9   Úextract_frontier_cellsre   r.   r/   r0   r1   r2   r3   r4   r5   )r=   r   r\   r]   rƒ   rK   r@   rF   r|   r}   rŠ   s              rM   Útest_frontier_cells_extractionz<TestDirectNavMeshBitsetFusion.test_frontier_cells_extractionn   s  € å*°¸ÐQUÐVÑVÔVˆÝ�r‘”ð 	5ð 	5ˆAÝ˜2‘Y”Yð 5ð 5�Ø×(Ò(¨¨A¨tÑ4Ô4Ð4Ð4ð5õ �r‘”ð 	0ð 	0ˆAÝ˜2‘Y”Yð 0ð 0�Ø×#Ò# A q¨$Ñ/Ô/Ð/Ð/ð0ð ×1Ò1ÀÐ1ÑCÔCˆ	Ý�9‰~Œ~Ð! Ð!ˆ~ Ò!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ~ Ð!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�sÑ!Ô!Ð!Õ!Ô!�sÑ!Ô!Ð!Ð!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�9Ñ!Ô!Ð!Õ!Ô!�9Ñ!Ô!Ð!Ð!Õ!Ô!ˆ~Ñ!Ô!Õ!Ô! Ñ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!àNÐN iÐNÑNÔNˆÝ�=Ñ!Ô!Ð% AÐ%Ð! AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð! AÐ%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�sÑ%Ô%Ð%Õ%Ô%�sÑ%Ô%Ð%Ð%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�=Ñ%Ô%Ð%Õ%Ô%�=Ñ%Ô%Ð%Ð%Õ%Ô%Ð!Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%rO   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rN   r^   r~   rŒ   r†   rO   rM   r   r   )   sY   € € € € € ØbÐbðð ð ð23ð 3ð 3ð"|ð |ð |ð0&ð &ð &ð &ð &rO   r   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestSimdSignatureScannerBridgeuJ   Kiá»ƒm thá»­ tÄƒng tá»‘c quÃ©t vi sai chá»¯ kÃ½ nhá»‹ phÃ¢n SIMD cho POE2.c                ór  — t          j        ¦   «         }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S )	u8   Kiá»ƒm thá»­ phÃ¡t hiá»‡n há»— trá»£ pháº§n cá»©ng SIMD.Tr   )z%(py0)s is %(py3)sÚ	supportedr)   r+   r$   N)
r	   Úis_hardware_simd_supportedr.   r/   r0   r1   r2   r3   r4   r5   )r=   r”   rK   r>   rL   rG   s         rM   Útest_simd_hardware_supportz9TestSimdSignatureScannerBridge.test_simd_hardware_support„   sØ   € å.ÔIÑKÔKˆ	Ø Ð ˆy˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆy˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆyÑ Ô Ð Õ Ô ˆyÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð rO   c                óæ  — t          ¦   «         }d}t          t          j                             dd|t          j        ¬¦  «                             ¦   «         ¦  «        }g d¢}t          |j        ¦  «        D ]9\  }}||         }t          |d         ¦  «        }||||t          |¦  «        z   …<   Œ:| 
                    t          |¦  «        d¬¦  «        \  }	}
t          d	|
d
›dt          |	¦  «        › d�¦  «         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t          |	¦  «        › d�¦  «        dz   d|iz  }t)          t          j        |¦  «        ¦  «        ‚dx}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  }t          j        d|
d
›d�¦  «        dz   d |iz  }t)          t          j        |¦  «        ¦  «        ‚dx}}dS )!ut   Kiá»ƒm thá»­ quÃ©t 8 Static Roots trong Ä‘oáº¡n mÃ£ PE giáº£ láº­p hoÃ n táº¥t trong ngÃ¢n sÃ¡ch Tier 2 (< 15.0 ms).i   r   éÿ   )Údtype)i   i P  i   i P i P i P i P i P
 Úpatternl        )Úbase_rvazI
[PERF] SimdSignatureScannerBridge 8 Roots Scan latency (Python Tier 2): rb   z ms (Roots found: z/8)é   r!   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sre   Úresultsrg   u   Chá»‰ tÃ¬m tháº¥y z/8 static rootsri   r   Ng      .@rj   rl   Úduration_msr)   u   Thá»�i gian quÃ©t Python u,    ms vÆ°á»£t quÃ¡ ngÃ¢n sÃ¡ch Tier 2 15.0 ms!rn   r$   )r	   Ú	bytearrayrr   ÚrandomÚrandintÚuint8ÚtobytesÚ	enumerateÚCANONICAL_STATIC_ROOTSre   Úscan_batched_static_rootsÚbytesrt   r.   r/   r0   r1   r2   r3   ru   r4   r5   )r=   ÚscannerÚpe_sizeÚfake_peÚinserted_offsetsrv   ÚrootÚoffÚpatrž   rŸ   rK   r@   rF   r|   r}   r>   rL   rG   s                      rM   Ú*test_batched_static_roots_scanning_sub_3mszITestSimdSignatureScannerBridge.test_batched_static_roots_scanning_sub_3ms‰   sV  € å,Ñ.Ô.ˆð ˆÝ�BœI×-Ò-¨a°°gÅRÄXÐ-ÑNÔN×VÒVÑXÔXÑYÔYˆð bÐaÐaÐÝ  Ô!?Ñ@Ô@ð 	0ð 	0‰GˆAˆtØ" 1Ô%ˆCÝ˜D œOÑ,Ô,ˆCà,/ˆG�C˜#¥ C¡¤™.Ð(Ñ)Ð)ð  '×@Ò@ÅÀwÁÄÐZeÐ@ÑfÔfÑˆ�åð  PÐ[fð  Pð  Pð  Põ  Bð  CJñ  Kô  Kð  Pð  Pð  Pñ  	Qô  	Qð  	QÝ�7‰|Œ|ÐT˜qÐTˆ|˜qÒ ÐTÐTÑTÕTÔTÐTÐTÐTÐTˆ|˜qÐTÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔT�sÑTÔTÐTÕTÔT�sÑTÔTÐTÐTÐTÕTÔTÑTÔTÐTÐTÕTÔT�7ÑTÔTÐTÕTÔT�7ÑTÔTÐTÐTÕTÔTˆ|ÑTÔTÕTÔT˜qÑTÔTÐTÐTÑTÐTÕTÔTÐ"Tµs¸7±|´|Ð"TÐ"TÐ"TÑTÔTÐTÑTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTÐTÐTØ!Ð|ˆ{˜TÒ!Ð|Ð|Ð|Õ|Ô|Ð|Ð|Ð|Ð|ˆ{˜TÐ|Ñ|Ô|Ð|Õ|Ô|Ñ|Ô|Ð|Ð|Õ|Ô|ˆ{Ñ|Ô|Ð|Õ|Ô|ˆ{Ñ|Ô|Ð|Ð|Õ|Ô|˜TÑ|Ô|Ð|Ð|Ñ|Ð|Õ|Ô|Ð#|¸{Ð#|Ð#|Ð#|Ð#|Ñ|Ô|Ð|Ñ|Ð|Ð|Ð|Ñ|Ð|Õ|Õ|Ô|Ð|Ñ|Ô|Ñ|Ô|Ð|Ð|Ð|Ð|Ð|Ð|Ð|rO   c                ó&  — t          ¦   «         }d}t          |¦  «        }d}d}t          j        d||ddd¦  «         d}t          j        d||ddd	¦  «         |                     t          |¦  «        |d
dd¬¦  «        \  }}t          d|d›dt          |¦  «        › 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}
}	d„ |D ¦   «         }||z   }	|	|v}|�s t          j	        d|fd|	|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd d!t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd!d"œz  }d#d$|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	}||z   }	|	|v }|�s t          j	        d%|fd&|	|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd't          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd'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 )(uj   Kiá»ƒm thá»­ quÃ©t vi sai cá»­a sá»• 16MB tÃ¬m tá»�a Ä‘á»™ XYZ trong < 15.0 ms vÃ  loáº¡i trá»« neo tÄ©nh.i   i    i€  z<fffg     8˜@g     ˆ£@g      )Ài�  ç        )g     p—@g      ™@)g     À¢@g     P¤@)g      IÀç      I@)Úmemory_window_16mbÚbase_addressÚexpected_x_rangeÚexpected_y_rangeÚexpected_z_rangezB
[PERF] 16MB Float XYZ Differential Scan latency (Python Tier 2): rb   z ms (Candidates: rc   g      9@rj   rl   rŸ   r)   u   Thá»�i gian quÃ©t 16MB Python u,    ms vÆ°á»£t quÃ¡ ngÃ¢n sÃ¡ch Tier 2 25.0 ms!rn   r$   Nc                ó   — g | ]	}|j         ‘Œ
S r†   )Úaddress)r‡   Úcs     rM   r‰   z\TestSimdSignatureScannerBridge.test_player_16mb_differential_xyz_sub_2ms.<locals>.<listcomp>À   s   € Ð9Ð9Ð9¨˜1œ9Ð9Ð9Ð9rO   )únot in)z"(%(py0)s + %(py1)s) not in %(py4)sÚ	base_addrÚforbidden_offset_290Úcandidate_addrs)r   rh   r   zassert %(py6)sr   ©Úin)z(%(py0)s + %(py1)s) in %(py4)sÚtarget_offset)r	   r    ÚstructÚ	pack_intoÚ!scan_player_16mb_differential_xyzr¨   rt   re   r.   r/   r0   r1   r2   r3   ru   r4   r5   )r=   r©   Úmem_16mb_sizeÚfake_memr½   rÂ   r¾   Ú
candidatesrŸ   rK   r>   rL   rG   r¿   r?   Ú@py_format5r|   s                    rM   Ú)test_player_16mb_differential_xyz_sub_2mszHTestSimdSignatureScannerBridge.test_player_16mb_differential_xyz_sub_2ms    s*  € å,Ñ.Ô.ˆð )ˆÝ˜]Ñ+Ô+ˆàˆ	ð ˆÝÔ˜ ¨=¸&À&È%ÑPÔPÐPð  %ÐÝÔ˜ Ð+?ÀÈÐQTÑUÔUÐUð #*×"KÒ"KÝ$ X™œØ"Ø-Ø-Ø*ð #Lñ #
ô #
Ñˆ
�Kõ 	ð  IÐT_ð  Ið  Ið  IÕvyð  {Eñ  wFô  wFð  Ið  Ið  Iñ  	Jô  	Jð  	JØ!ð  	Bˆ{˜TÒ!ð  	Bð  	Bð  	Bõ  	Bô  	Bð  	Bð  	Bð  	Bð  	Bˆ{˜Tð  	Bñ  	Bô  	Bð  	Bõ  	Bô  	Bñ  	Bô  	Bð  	Bð  	Bõ  	Bô  	Bˆ{ñ  	Bô  	Bð  	Bõ  	Bô  	Bˆ{ñ  	Bô  	Bð  	Bð  	Bõ  	Bô  	B˜Tñ  	Bô  	Bð  	Bð  	Bñ  	Bð  	Bõ  	Bô  	Bð  $BÀKð  $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ð :Ð9¨jÐ9Ñ9Ô9ˆØÐ0Ñ0ÐHÐ0¸ÐHÐHÐHÑHÕHÔHÐHÐHÐHÐHÐ0¸ÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH�	ÑHÔHÐHÕHÔH�	ÑHÔHÐHÐHÐHÕHÔHÑHÔHÐHÐHÕHÔHÐ0ÑHÔHÐHÕHÔHÐ0ÑHÔHÐHÐHÐHÕHÔHÑHÔHÐHÐHÕHÔH¸ÑHÔHÐHÕHÔH¸ÑHÔHÐHÐHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHØ˜MÑ)Ð=Ð)¨oÐ=Ð=Ð=Ñ=Õ=Ô=Ð=Ð=Ð=Ð=Ð)¨oÐ=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=�	Ñ=Ô=Ð=Õ=Ô=�	Ñ=Ô=Ð=Ð=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=˜MÑ=Ô=Ð=Õ=Ô=˜MÑ=Ô=Ð=Ð=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=¨oÑ=Ô=Ð=Õ=Ô=¨oÑ=Ô=Ð=Ð=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=rO   N)r�   rŽ   r�   r�   r–   r°   rÊ   r†   rO   rM   r’   r’   �   sJ   € € € € € ØTÐTð!ð !ð !ð
}ð }ð }ð.">ð ">ð ">ð ">ð ">rO   r’   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestDynamicLootDensityClustereruf   Kiá»ƒm thá»­ thuáº­t toÃ¡n gom cá»¥m máº­t Ä‘á»™ giÃ¡ trá»‹ vÃ  triá»‡t tiÃªu quay Ä‘áº§u nháº·t rÃ¡c.c           	     ó8  — t          dd¬¦  «        }d}d}t          dddd	d
dd¬¦  «        }|                     |g||¦  «        }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  }	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}}|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        }||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á»­ váº­t pháº©m rÃ¡c rÆ¡i phÃ­a sau nhÃ¢n váº­t (ngÆ°á»£c hÆ°á»›ng map) Báº®T BUá»˜C bá»‹ tá»« chá»‘i nháº·t.ç      à?ç       @©Úmin_vds_thresholdÚmin_backtrack_chaos©ç      Y@rÔ   ©ç      ð?r²   ée   zScroll of Wisdomr³   rÔ   r   gü©ñÒMbP?F©Ú	entity_idÚnamer]   r\   ÚrarityÚestimated_chaos_valueÚis_criticalr'   r!   r�   re   rž   rg   r„   r   NTr   ©z7%(py2)s
{%(py2)s = %(py0)s.is_backtracking
} is %(py5)sÚclr#   r%   r&   ©z5%(py2)s
{%(py2)s = %(py0)s.should_pickup
} is %(py5)su   Bá»Ž QUA CHá»�NG QUAY Ä�áº¦UrÀ   ©z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reason
}©rh   r*   r$   )r   r   Úcluster_and_evaluatere   r.   r/   r0   r1   r2   r3   r4   r5   Úis_backtrackingÚshould_pickupÚreason)r=   Ú	clustererÚ
player_posÚprogression_dirÚ
trash_itemrž   rK   r@   rF   r|   r}   rß   r>   r?   rG   rH   Ú@py_assert0s                    rM   Ú!test_rejection_of_backtrack_trashzATestDynamicLootDensityClusterer.test_rejection_of_backtrack_trashÈ   s3  € å/À$Ð\_Ð`Ñ`Ô`ˆ	à#ˆ
à$ˆõ $ØØ#ØØØØ"'Øð
ñ 
ô 
ˆ
ð ×0Ò0°*°¸zÈ?Ñ[Ô[ˆÝ�7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø�QŒZˆð Ô!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔÐ( 5Ð(Ð 5Ð(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð 5Ð(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Õ(Ô(ˆrÑ(Ô(Ð(Ð(Õ(Ô(ÐÑ(Ô(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø-Ð:°´Ð:Ð-°Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð-°Ð:Ñ:Ô:Õ:Ô:Ð-Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°Ñ:Ô:Ð:Õ:Ô:°Ñ:Ô:Ð:Ð:Õ:Ô:°Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:rO   c           	     ó¶  — t          dd¬¦  «        }d}d}t          dddd	d
dd¬¦  «        }|                     |g||¦  «        }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  }	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}}|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 }|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 )$up   Kiá»ƒm thá»­ váº­t pháº©m tá»‘i thÆ°á»£ng (Divine Orb / Mirror) rÆ¡i phÃ­a sau lÆ°ng VáºªN Ä�Æ¯á»¢C NHáº¶T 100%.rÎ   rÏ   rÐ   )ç     @@rî   rÕ   iç  z
Divine Orbg     Àw@rî   é   ç      i@TrØ   r'   r!   r�   re   rž   rg   r„   r   Nr   r   rÞ   rß   r#   r%   r&   )z9%(py2)s
{%(py2)s = %(py0)s.has_critical_item
} is %(py5)srà   u   váº­t pháº©m tá»‘i thÆ°á»£ngrÀ   rá   râ   )r   r   rã   re   r.   r/   r0   r1   r2   r3   r4   r5   rä   Úhas_critical_itemrå   ræ   )r=   rç   rè   ré   Údivine_itemrž   rK   r@   rF   r|   r}   rß   r>   r?   rG   rH   rë   s                    rM   Ú2test_critical_item_override_even_when_backtrackingzRTestDynamicLootDensityClusterer.test_critical_item_override_even_when_backtrackingä   s  € å/À$Ð\_Ð`Ñ`Ô`ˆ	à#ˆ
Ø$ˆõ %ØØØØØØ"'Øð
ñ 
ô 
ˆð ×0Ò0°+°À
ÈOÑ\Ô\ˆÝ�7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø�QŒZˆð Ô!Ð) TÐ)Ð! TÐ)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð! TÐ)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Õ)Ô)ˆrÑ)Ô)Ð)Ð)Õ)Ô)Ð!Ñ)Ô)Õ)Ô) TÑ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØÔ#Ð+ tÐ+Ð# tÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð# tÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆrÑ+Ô+Ð+Õ+Ô+ˆrÑ+Ô+Ð+Ð+Õ+Ô+Ð#Ñ+Ô+Õ+Ô+ tÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÔÐ' 4Ð'Ð 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆrÑ'Ô'Ð'Õ'Ô'ˆrÑ'Ô'Ð'Ð'Õ'Ô'ÐÑ'Ô'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø-Ð:°´Ð:Ð-°Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð-°Ð:Ñ:Ô:Õ:Ô:Ð-Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:°Ñ:Ô:Ð:Õ:Ô:°Ñ:Ô:Ð:Ð:Õ:Ô:°Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:rO   c                óp  — t          d¬¦  «        }d}d}t          dddddd	d
¦  «        t          ddddddd
¦  «        t          ddddddd
¦  «        t          ddddddd
¦  «        g}|                     |||¦  «        }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  }	dd|	iz  }
t          t	          j        |
¦  «        ¦  «        ‚dx}x}}|                     |¦  «        }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}}|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        }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}}dS )0uT   Kiá»ƒm thá»­ gom cÃ¡c mÃ³n Ä‘á»“ trong bÃ¡n kÃ­nh 35u thÃ nh má»™t cá»¥m duy nháº¥t.g     €A@)Úcluster_radiusrÓ   )rÖ   rÖ   r'   z	Chaos Orbrð   rï   rÖ   Fé   zExalted Orbg     @j@g      i@g      4@é   zOrb of Alchemyg     `h@g     àj@gš™™™™™É?zWaystone (Tier 1)g      y@gš™™™™™¹?r!   r�   re   rž   rg   r„   r   N)úis not)z%(py0)s is not %(py3)sÚbestr)   r+   r$   g      5@)ú>=)z9%(py2)s
{%(py2)s = %(py0)s.total_chaos_value
} >= %(py5)sr#   r%   r&   )zK%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.items
})
} == %(py8)s)r   rh   r*   r$   r   zassert %(py10)sÚpy10)r   r   rã   re   r.   r/   r0   r1   r2   r3   r4   r5   Úselect_best_clusterÚtotal_chaos_valueÚitems)r=   rç   rè   ré   rþ   rž   rK   r@   rF   r|   r}   rù   r>   rL   rG   r?   rH   rA   Ú@py_assert6Ú@py_format11s                       rM   Ú test_spatial_clustering_groupingz@TestDynamicLootDensityClusterer.test_spatial_clustering_grouping   s«  € å/¸tÐDÑDÔDˆ	à#ˆ
Ø$ˆõ ˜1˜k¨5°%¸¸CÀÑGÔGÝ˜1˜m¨U°E¸1¸dÀEÑJÔJÝ˜1Ð.°°u¸aÀÀeÑLÔLå˜1Ð1°5¸%ÀÀCÈÑOÔOð
ˆð ×0Ò0°¸
ÀOÑTÔTˆå�7‰|Œ|Ð ˜qÐ ˆ|˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ|˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �7Ñ Ô Ð Õ Ô �7Ñ Ô Ð Ð Õ Ô ˆ|Ñ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð ð ×,Ò,¨WÑ5Ô5ˆØÐˆt˜4ÐÐÐÐÕÔÐÐÐÐˆt˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ%Ð-¨Ð-Ð%¨Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð%¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆtÑ-Ô-Ð-Õ-Ô-ˆtÑ-Ô-Ð-Ð-Õ-Ô-Ð%Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø”:Ð#�s�:‰ŒÐ# !Ð#ˆ !Ò#Ð#Ð#Ñ#Õ#Ô#Ð#Ð#Ð#Ð#ˆ !Ð#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�sÑ#Ô#Ð#Õ#Ô#�sÑ#Ô#Ð#Ð#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�4Ñ#Ô#Ð#Õ#Ô#�4Ñ#Ô#Ð#Ð#Õ#Ô#�:Ñ#Ô#Õ#Ô#ˆÑ#Ô#Õ#Ô# !Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#rO   N)r�   rŽ   r�   r�   rì   ró   r  r†   rO   rM   rÌ   rÌ   Å   sG   € € € € € ØpÐpð;ð ;ð ;ð8;ð ;ð ;ð8$ð $ð $ð $ð $rO   rÌ   )r�   Ú
__future__r   Úbuiltinsr0   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter.   ÚosrÃ   ÚtimeÚnumpyrr   ÚpytestÚ:src.assistant_tool.navigation.direct_navmesh_bitset_fusionr   Ú8src.assistant_tool.pickit.dynamic_loot_density_clustererr   r   r   Ú7src.assistant_tool.vision.simd_signature_scanner_bridger   r	   r   r’   rÌ   r†   rO   rM   ú<module>r     sw  ððð ð( #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€à `Ð `Ð `Ð `Ð `Ð `ðð ð ð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ðU&ð U&ð U&ð U&ð U&ñ U&ô U&ð U&ðpA>ð A>ð A>ð A>ð A>ñ A>ô A>ð A>ðHS$ð S$ð S$ð S$ð S$ñ S$ô S$ð S$ð S$ð S$rO   