§
    îÈ­j_  ã                   ót   — d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlmZmZmZmZmZ d„ Zd„ Zd„ Zd„ ZdS )	uÄ  Unit Tests for OCR Coordinate Contract & Optical Perception (Doc 48 / Doc 50 / Rule 5).
========================================================================================
Kiá»ƒm thá»­ cÃ¡c báº¥t biáº¿n kiáº¿n trÃºc cáº£m biáº¿n quang há»�c:
- INV-OCR-PORTAL-POS: find_portal_screen_pos tráº£ vá»� tá»�a Ä‘á»™ há»£p lá»‡ náº±m trong ranh giá»›i mÃ n hÃ¬nh.
- INV-OCR-MAP-DEVICE: find_map_device_screen_pos Ä‘á»‹nh vá»‹ chÃ­nh xÃ¡c Map Device trong Hideout.
- INV-OCR-ATLAS-UI: is_atlas_ui_open phÃ¢n Ä‘á»‹nh chÃ­nh xÃ¡c giá»¯a Hideout thÆ°á»�ng vÃ  giao diá»‡n Atlas/World Map.
- INV-LOADING-SCREEN-GATE: is_loading_screen phÃ¢n biá»‡t chuáº©n xÃ¡c giá»¯a mÃ n hÃ¬nh táº£i vÃ  tráº¡ng thÃ¡i trong game.
é    N)ÚImage)Úfind_portal_screen_posÚfind_map_device_screen_posÚis_atlas_ui_openÚis_loading_screenÚfind_portal_label_by_ocrc                  óÎ  — d} t           j                             | ¦  «        �rt          | ¦  «        }d}||u }|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}t           j                             |¦  «        �rt          |¦  «        }d}||u }|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 d
S )ud   Kiá»ƒm tra Ä‘á»™ chÃ­nh xÃ¡c cá»§a bá»™ cáº£m biáº¿n mÃ n hÃ¬nh táº£i trÃªn dá»¯ liá»‡u thá»±c táº¿.zDcaptures/pipeline_run/20260918_132025_748_STAGE2_MAP_DEVICE_VIEW.pngT©Úis©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py6)sr   Úloading_capture©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8Nú0captures/reconnect/RECONNECT_SUCCESS_HIDEOUT.pngFÚingame_capture)ÚosÚpathÚexistsr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r   s          ú:C:\Projects\AutoPOE2\tests\test_ocr_coordinate_contract.pyÚ'test_loading_screen_perception_contractr(      sŒ  € à\€OÝ	„w‡~‚~�oÑ&Ô&ñ :Ý  Ñ1Ô1Ð9°TÐ9Ð1°TÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð1°TÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9Õ Ñ9Ô9Ð9Õ9Ô9Õ Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 Ñ9Ô9Ð9Õ9Ô9 Ñ9Ô9Ð9Ð9Õ9Ô9Ð1Ñ9Ô9Õ9Ô9°TÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9àG€NÝ	„w‡~‚~�nÑ%Ô%ñ :Ý  Ñ0Ô0Ð9°EÐ9Ð0°EÐ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð0°EÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9Õ Ñ9Ô9Ð9Õ9Ô9Õ Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9 Ñ9Ô9Ð9Õ9Ô9 Ñ9Ô9Ð9Ð9Õ9Ô9Ð0Ñ9Ô9Õ9Ô9°EÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð:ð :ó    c            	      óä  — ddg} | D �]g}t           j                             |¦  «        �rDt          j        |¦  «        }|j        \  }}t          |¦  «        \  }}d}||k    }||k    }	|r|	sòt          j        d||	fd|||f¦  «        t          j	        |¦  «        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  }
t          j        d	|› d
|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}	d}||k    }||k    }	|r|	sòt          j        d||	fd|||f¦  «        t          j	        |¦  «        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  }
t          j        d|› d
|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}	�ŒidS )uJ   Kiá»ƒm tra find_map_device_screen_pos trÃªn áº£nh Hideout thá»±c nghiá»‡m.r   ú!captures/cycle110_live_status.pngr   ©ú<=r-   ©z%(py1)s <= %(py4)sz%(py4)s <= %(py5)sÚpos_xÚw©r   Úpy4Úpy5zpos_x õ    vÆ°á»£t ngoÃ i giá»›i háº¡n ú
>assert %(py7)sÚpy7NÚpos_yÚhzpos_y )r   r   r   r   ÚopenÚsizer   r   r   r   r   r   r   Ú_format_assertmsgr    r!   )Ú
test_filesÚpÚimgr0   r8   r/   r7   Ú@py_assert0r"   Ú@py_assert3Ú@py_format6Ú@py_format8s               r'   Ú#test_map_device_screen_pos_contractrC   "   sá  € ð 	;Ø+ð€Jð ð Uñ UˆÝŒ7�>Š>˜!ÑÔñ 	UÝ”*˜Q‘-”-ˆCØ”8‰DˆAˆqÝ5°aÑ8Ô8‰LˆE�5ØÐT�1˜’?ÐT˜ ’?ÐTÐTÐTÐTÐTÕTÔTÐTÐTÐTÐTÐT�1˜ ÐTÑTÔTÕTÔT�1Ñ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ÔTÐTÕTÔT ÑTÔTÐTÐTÐTÐTÑTÐTÕTÔTÐ$T¨UÐ$TÐ$TÐQRÐ$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�1˜’?ÐT˜ ’?ÐTÐTÐTÐTÐTÕTÔTÐTÐTÐTÐTÐT�1˜ ÐTÑTÔTÕTÔT�1Ñ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ÔTÐTÕTÔT ÑTÔTÐTÐTÐTÐTÑTÐTÕTÔTÐ$T¨UÐ$TÐ$TÐQRÐ$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ùðUð Ur)   c            	      óþ  — g d¢} | D �]t}t           j                             |¦  «        �rQt          j        |¦  «        }|j        \  }}|dz  |dz  }}t          |||¬¦  «        \  }}d}	|	|k    }
||k    }|
r|sòt          j        d|
|fd|	||f¦  «        t          j	        |	¦  «        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  }t          j        d|› d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}d}	|	|k    }
||k    }|
r|sòt          j        d|
|fd|	||f¦  «        t          j	        |	¦  «        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  }t          j        d|› d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}
}�ŒvdS )u:   Kiá»ƒm tra find_portal_screen_pos trÃªn áº£nh thá»±c táº¿.)zcaptures/after_portal_click.pngr+   zHcaptures/pipeline_run/20260917_182433_164_STAGE4_HIDEOUT_PORTAL_VIEW.pngg      ¤@g     €–@)Úscale_xÚscale_yr   r,   r.   r/   r0   r1   zportal pos_x r4   r5   r6   Nr7   r8   zportal pos_y )r   r   r   r   r9   r:   r   r   r   r   r   r   r   r;   r    r!   )r<   r=   r>   r0   r8   ÚsxÚsyr/   r7   r?   r"   r@   rA   rB   s                 r'   Útest_portal_screen_pos_contractrI   1   sû  € ðð ð €Jð
 ð \ñ \ˆÝŒ7�>Š>˜!ÑÔñ 	\Ý”*˜Q‘-”-ˆCØ”8‰DˆAˆqØ˜‘Z  V¡�ˆBÝ1°!¸RÈÐLÑLÔL‰LˆE�5ØÐ[�1˜’?Ð[˜ ’?Ð[Ð[Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[Ð[�1˜ Ð[Ñ[Ô[Õ[Ô[�1Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[˜Ñ[Ô[Ð[Õ[Ô[˜Ñ[Ô[Ð[Ð[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[ Ñ[Ô[Ð[Õ[Ô[ Ñ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Ô[Ð$[°EÐ$[Ð$[ÐXYÐ$[Ð$[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ØÐ[�1˜’?Ð[˜ ’?Ð[Ð[Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[Ð[�1˜ Ð[Ñ[Ô[Õ[Ô[�1Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[˜Ñ[Ô[Ð[Õ[Ô[˜Ñ[Ô[Ð[Ð[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[ Ñ[Ô[Ð[Õ[Ô[ Ñ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Ô[Ð$[°EÐ$[Ð$[ÐXYÐ$[Ð$[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ùð\ð \r)   c                  óz  — ddg} | D �]2}t           j                             |¦  «        �rt          |¦  «        }d}||u }|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}}�Œ4dS )ud   Kiá»ƒm tra nháº­n diá»‡n giao diá»‡n Atlas Ä‘Ã³ng khi nhÃ¢n váº­t Ä‘ang á»Ÿ Hideout bÃ¬nh thÆ°á»�ng.r   r+   Fr
   r   r   r=   r   r   r   N)r   r   r   r   r   r   r   r   r   r   r    r!   )r<   r=   r"   r#   r$   r%   r&   s          r'   Útest_atlas_ui_open_contractrK   B   se  € ð 	;Ø+ð€Jð ð 0ñ 0ˆÝŒ7�>Š>˜!ÑÔñ 	0Ý# AÑ&Ô&Ð/¨%Ð/Ð&¨%Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/Õ#Ñ/Ô/Ð/Õ/Ô/Õ#Ñ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ AÑ/Ô/Ð/Õ/Ô/ AÑ/Ô/Ð/Ð/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ùð0ð 0r)   )Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   r   ÚpytestÚPILr   Úsrc.common.vision_ocrr   r   r   r   r   r(   rC   rI   rK   © r)   r'   ú<module>rU      sá   ððð ð € € € € € € € € € € € € €	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð:ð :ð :ðUð Uð Uð\ð \ð \ð"0ð 0ð 0ð 0ð 0r)   