§
    95Êj9  ã                   óŽ  — d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
Z
 e	e¦  «                             ¦   «         j        j        Zedz  Z ee¦  «        ej        vr$ej                             d ee¦  «        ¦  «         ddlZ G d„ d¦  «        Z G d„ d¦  «        Z G d	„ d
¦  «        Zedk    r e
j        edg¦  «         dS dS )uR  
=============================================================================
TEST START FRAME STRATEGY & CHARACTER TURNAROUND VIEWS INTEGRATION
=============================================================================
Kiá»ƒm thá»­ tá»± Ä‘á»™ng ma tráº­n Ä‘á»‹nh tuyáº¿n Start Frame:
1. find_character_turnaround_view tÃ¬m Ä‘Ãºng file áº£nh crop trong views/
2. classify_start_frame_strategy phÃ¢n Ä‘á»‹nh chÃ­nh xÃ¡c 4 chiáº¿n lÆ°á»£c:
   - CHARACTER_TURNAROUND_VIEW (Close-up, MCU, Portrait, Entrance cut)
   - GEMINI_BANANA_KEYFRAME (Wide, Establishing, Multi-character, Environment)
   - HEAD_TAIL_PREV_FRAME (Continuous take)
   - TEXT_TO_VIDEO (Text-to-video / Prologue opener)
3. resolve_start_frame_v3 tráº£ vá»� bá»™ 3 giÃ¡ trá»‹ (path, take_type, strategy)
=============================================================================
é    N)ÚPathÚ05_Production_Pipelinec                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú"TestCharacterTurnaroundViewsLookupuC   Kiá»ƒm thá»­ tra cá»©u áº£nh gÃ³c nhÃ¬n Character Turnaround Sheet.c                 ó$  — dD �]}t          j        |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  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}}|j        } |¦   «         }|s£t          j        d
|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d 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        }
|	|
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 )N)Ú	thuy_kieuÚthuy_vanÚ	kim_trongÚ
vuong_quanÚ	vuong_ongÚvuong_baÚdam_tienÚportrait©úis not©z%(py0)s is not %(py3)sÚ	view_path©Úpy0Úpy3u2   KhÃ´ng tÃ¬m tháº¥y portrait view cho nhÃ¢n váº­t: ú
>assert %(py5)sÚpy5u'   File portrait view khÃ´ng tá»“n táº¡i: úC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}©r   Úpy2Úpy4Úviews©Úin©z-%(py1)s in %(py5)s
{%(py5)s = %(py3)s.parts
}©Úpy1r   r   úassert %(py7)sÚpy7©z,%(py1)s in %(py5)s
{%(py5)s = %(py3)s.name
}©ÚpoÚfind_character_turnaround_viewÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationÚexistsÚpartsÚname©ÚselfÚchar_keyr   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert3Ú@py_format5Ú@py_assert0Ú@py_assert4Ú@py_format8s               úMC:\Projects\KieuStory\tests\test_start_frame_strategy_and_turnaround_views.pyÚ#test_find_turnaround_portrait_viewszFTestCharacterTurnaroundViewsLookup.test_find_turnaround_portrait_views!   sŽ  € Øqð 	0ñ 	0ˆHÝÔ9¸(ÀJÑOÔOˆIØ$(Ði�9 DÐ(ÐiÐiÐiÕiÔiÐiÐiÐiÐi�9 DÐiÑiÔiÐiÕiÔiÑiÔiÐiÐiÕiÔi�9ÑiÔiÐiÕiÔi�9ÑiÔiÐiÐiÕiÔi DÑiÔiÐiÐiÑiÐiÕiÔiÐ*iÐ_gÐ*iÐ*iÑiÔiÐiÑiÐiÐiÐiÑiÐiÕiÕiÔiÐiÑiÔiÑiÔiÐiÐiÐiÐiÐiØÔ#Ð\Ð#Ð#Ñ%Ô%Ð\Ð%Ð\Õ\Ô\Ð'\ÐQZÐ'\Ð'\Ñ\Ô\Ð\Ñ\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�9Ñ\Ô\Ð\Õ\Ô\�9Ñ\Ô\Ð\Ð\Õ\Ô\Ð#Ñ\Ô\Õ\Ô\Ð%Ñ\Ô\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\ØÐ-˜iœoÐ-�7˜oÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-�7˜oÐ-Ñ-Ô-Õ-Ô-�7Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-˜iÑ-Ô-Ð-Õ-Ô-˜iÑ-Ô-Ð-Ð-Õ-Ô-˜oÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ/ ¤Ð/�: Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/�: Ð/Ñ/Ô/Õ/Ô/�:Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Õ/Ô/ Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ñ/ð	0ð 	0ó    c                 ó$  — dD �]}t          j        |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  }t          j        d|› �¦  «        dz   d	|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}}|j        } |¦   «         }|s£t          j        d
|› �¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d 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        }
|	|
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 )N)r   r
   r   Úfrontr   r   r   r   u/   KhÃ´ng tÃ¬m tháº¥y front view cho nhÃ¢n váº­t: r   r   u$   File front view khÃ´ng tá»“n táº¡i: r   r   r   r   r    r!   r#   r$   r%   r&   r5   s               rA   Ú test_find_turnaround_front_viewszCTestCharacterTurnaroundViewsLookup.test_find_turnaround_front_views)   s�  € Ø@ð 	-ñ 	-ˆHÝÔ9¸(ÀGÑLÔLˆIØ$(Ðf�9 DÐ(ÐfÐfÐfÕfÔfÐfÐfÐfÐf�9 DÐfÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔf�9ÑfÔfÐfÕfÔf�9ÑfÔfÐfÐfÕfÔf DÑfÔfÐfÐfÑfÐfÕfÔfÐ*fÐ\dÐ*fÐ*fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfØÔ#ÐYÐ#Ð#Ñ%Ô%ÐYÐ%ÐYÕYÔYÐ'YÈiÐ'YÐ'YÑYÔYÐYÑYÐYÕYÔYÑYÔYÐYÐYÕYÔY�9ÑYÔYÐYÕYÔY�9ÑYÔYÐYÐYÕYÔYÐ#ÑYÔYÕYÔYÐ%ÑYÔYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYØÐ-˜iœoÐ-�7˜oÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-�7˜oÐ-Ñ-Ô-Õ-Ô-�7Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-˜iÑ-Ô-Ð-Õ-Ô-˜iÑ-Ô-Ð-Ð-Õ-Ô-˜oÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ,˜iœnÐ,�7˜nÐ,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,�7˜nÐ,Ñ,Ô,Õ,Ô,�7Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô,˜iÑ,Ô,Ð,Õ,Ô,˜iÑ,Ô,Ð,Ð,Õ,Ô,˜nÑ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ñ,ð	-ð 	-rC   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rF   © rC   rA   r   r      s8   € € € € € ØMÐMð0ð 0ð 0ð-ð -ð -ð -ð -rC   r   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚTestStartFrameStrategyMatrixu@   Kiá»ƒm thá»­ ma tráº­n phÃ¢n loáº¡i chiáº¿n lÆ°á»£c Start Frame.c                 óÖ  — ddddœ}t          j        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 }||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 )Nu@   ToÃ n cáº£nh phÃ²ng khÃ¡ch há»� VÆ°Æ¡ng - Wide Establishing Shotu\   Cáº£nh toÃ n phÃ²ng khÃ¡ch trang nghiÃªm, VÆ°Æ¡ng Ã”ng vÃ  VÆ°Æ¡ng BÃ  Ä‘Ã m Ä‘áº¡o trÃ  maizvuong_ong + vuong_ba©Úscene_titleÚmotion_promptÚcharacter_anchorÚep01_scene02_shot01ÚCINEMATIC_CUT©Ú	take_typeÚGEMINI_BANANA_KEYFRAME©ú==©z%(py0)s == %(py3)sÚstratr   úassert %(py5)sr   ©Úis©z%(py0)s is %(py3)sÚvtype©
r'   Úclassify_start_frame_strategyr)   r*   r+   r,   r-   r.   r0   r1   ©r6   Ú	shot_datar[   r`   r8   r9   r:   r;   s           rA   Ú4test_wide_establishing_classified_as_banana_keyframezQTestStartFrameStrategyMatrix.test_wide_establishing_classified_as_banana_keyframe5   sÂ  € à]Ø{Ø 6ð
ð 
ˆ	õ
 Ô7Ð8MÈyÐdsÐtÑtÔt‰ˆˆuØ0Ð0ˆuÐ0Ò0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆuÐ0Ð0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆuÑ0Ô0Ð0Õ0Ô0ˆuÑ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ØÐˆu˜ˆ}ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐrC   c                 óÚ  — ddddœ}t          j        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 )NuF   Cáº­n cáº£nh VÆ°Æ¡ng Ã”ng Ã¢n cáº§n cÄƒn dáº·n (Close-Up VÆ°Æ¡ng Ã”ng)uS   Cáº­n cáº£nh gÆ°Æ¡ng máº·t VÆ°Æ¡ng Ã”ng Ä‘Ã´n háº­u, Ã¡nh máº¯t áº¥m Ã¡p cÄƒn dáº·nr   rO   Úep01_scene02_shot10rT   rU   ÚCHARACTER_TURNAROUND_VIEWrX   rZ   r[   r   r\   r   r   r`   ra   rc   s           rA   Ú/test_close_up_classified_as_turnaround_portraitzLTestStartFrameStrategyMatrix.test_close_up_classified_as_turnaround_portrait?   sÃ  € àcØrØ +ð
ð 
ˆ	õ
 Ô7Ð8MÈyÐdsÐtÑtÔt‰ˆˆuØ3Ð3ˆuÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆuÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ø"Ð"ˆu˜
Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆu˜
Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆuÑ"Ô"Ð"Õ"Ô"ˆuÑ"Ô"Ð"Ð"Õ"Ô"˜
Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"rC   c                 óÚ  — ddddœ}t          j        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 )Nu;   VÆ°Æ¡ng Quan bÆ°á»›c vÃ o bÃ¡i chÃ o (Medium Shot Entrance)uH   VÆ°Æ¡ng Quan bÆ°á»›c vÃ o bÃ¡i chÃ o cha máº¹, phong thÃ¡i thiáº¿u niÃªnr   rO   Úep01_scene02_shot08rT   rU   rh   rX   rZ   r[   r   r\   r   rE   r`   ra   rc   s           rA   Ú,test_entrance_classified_as_turnaround_frontzITestStartFrameStrategyMatrix.test_entrance_classified_as_turnaround_frontI   sÃ  € àXØgØ ,ð
ð 
ˆ	õ
 Ô7Ð8MÈyÐdsÐtÑtÔt‰ˆˆuØ3Ð3ˆuÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆuÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3ØÐˆu˜ÒÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐrC   c                 óÖ  — dddœ}t          j        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  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d 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}}d S )Nu   Tiáº¿p diá»…n chuyá»ƒn Ä‘á»™ngr
   )rP   rR   Úep01_scene07_shot02ÚCONTINUOUS_TAKEz;04_Assets/keyframes/ep01_scene07_shot01/clean_frame_239.jpg)rV   Úresolved_pathÚHEAD_TAIL_PREV_FRAMErX   rZ   r[   r   r\   r   r]   r_   r`   ra   rc   s           rA   Ú,test_continuous_take_classified_as_head_tailzITestStartFrameStrategyMatrix.test_continuous_take_classified_as_head_tailS   sË  € à;Ø +ð
ð 
ˆ	õ Ô7Ø!ØØ'ØWð	
ñ 
ô 
‰ˆˆuð /Ð.ˆuÐ.Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆuÐ.Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆuÑ.Ô.Ð.Õ.Ô.ˆuÑ.Ô.Ð.Ð.Õ.Ô.Ð.Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.ØÐˆu˜ˆ}ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐrC   N)rG   rH   rI   rJ   re   ri   rl   rr   rK   rC   rA   rM   rM   2   sV   € € € € € ØJÐJðð ð ð#ð #ð #ð ð  ð  ðð ð ð ð rC   rM   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestResolveStartFrameV3ContractuC   Kiá»ƒm thá»­ há»£p Ä‘á»“ng tráº£ vá»� cá»§a resolve_start_frame_v3.c                 ó   — t          j        ¦   «         }|                     di ¦  «        }t          j        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}||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}
|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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}
x}x}}d S )Nrg   r   r   Úres_pathr   r\   r   rT   rX   rZ   rV   rh   r[   r   r   )zD%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
})r"   r   r   r$   zassert %(py9)sÚpy9)r'   Úget_all_shotsÚgetÚresolve_start_frame_v3r)   r*   r+   r,   r-   r.   r0   r1   Úlower)r6   Ú	all_shotsÚsdatarv   rV   r[   r8   r9   r:   r;   r>   r?   Ú@py_assert6r@   Ú@py_format10s                  rA   Útest_v3_returns_tuple_of_threez>TestResolveStartFrameV3Contract.test_v3_returns_tuple_of_threee   s�  € ÝÔ$Ñ&Ô&ˆ	Ø—’Ð3°RÑ8Ô8ˆÝ%'Ô%>Ð?TÐV[Ñ%\Ô%\Ñ"ˆ�)˜UØ#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ø+Ð+ˆy˜OÒ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆy˜OÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆyÑ+Ô+Ð+Õ+Ô+ˆyÑ+Ô+Ð+Ð+Õ+Ô+˜OÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ø3Ð3ˆuÐ3Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3ˆuÐ3Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Õ3Ô3ˆuÑ3Ô3Ð3Ð3Õ3Ô3Ð3Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3ØÐ.˜hœnÐ.˜n˜nÑ.Ô.Ð.ˆ{Ð.Ð.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ{Ð.Ð.Ñ.Ô.Õ.Ô.ˆ{Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.˜hÑ.Ô.Ð.Õ.Ô.˜hÑ.Ô.Ð.Ð.Õ.Ô.˜nÑ.Ô.Õ.Ô.Ð.Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.rC   c                 ó¦  — t          j        ¦   «         }|                     di ¦  «                             ¦   «         }d|d<   t          j        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}
}t          |¦  «        }|j        } |¦   «         }|sæd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  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nrg   r   Úturnaround_viewr   r   rv   r   r\   r   r   r   )z%(py1)s in %(py3)s)r"   r   z_assert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py0)s(%(py1)s)
}.exists
}()
}r   )r   r"   r   r   r$   )r'   rx   ry   Úcopyrz   r)   r*   r+   r,   r-   r.   r0   r1   r   r2   )r6   r|   r}   rv   rV   r[   r8   r9   r:   r;   r>   r?   r~   r@   s                 rA   Ú9test_v3_explicit_turnaround_view_resolves_to_cropped_filezYTestResolveStartFrameV3Contract.test_v3_explicit_turnaround_view_resolves_to_cropped_filen   s§  € ÝÔ$Ñ&Ô&ˆ	Ø—’Ð3°RÑ8Ô8×=Ò=Ñ?Ô?ˆØ#-ˆÐÑ Ý%'Ô%>Ð?TÐV[Ñ%\Ô%\Ñ"ˆ�)˜UØ#Ð#ˆx˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆx˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Õ#Ô#ˆxÑ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ØÐ"ˆw˜(Ð"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆw˜(Ð"Ñ"Ô"Õ"Ô"ˆwÑ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Õ"Ô"˜(Ñ"Ô"Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ØÐ%ˆz˜XÐ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%ˆz˜XÐ%Ñ%Ô%Õ%Ô%ˆzÑ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%˜XÑ%Ô%Ð%Õ%Ô%˜XÑ%Ô%Ð%Ð%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ý�H‰~Œ~Ð&ˆ~Ô$Ð&Ð$Ð$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�tÑ&Ô&Ð&Õ&Ô&�tÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�HÑ&Ô&Ð&Õ&Ô&�HÑ&Ô&Ð&Ð&Õ&Ô&ˆ~Ñ&Ô&Õ&Ô&Ð$Ñ&Ô&Õ&Ô&Ð&Ñ&Ô&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&rC   N)rG   rH   rI   rJ   r€   r„   rK   rC   rA   rt   rt   b   s8   € € € € € ØMÐMð/ð /ð /ð'ð 'ð 'ð 'ð 'rC   rt   Ú__main__z-v)rJ   Úbuiltinsr+   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter)   ÚsysÚpathlibr   ÚpytestÚ__file__ÚresolveÚparentÚPROJECT_ROOTÚPIPELINE_DIRÚstrÚpathÚinsertÚproduction_orchestratorr'   r   rM   rt   rG   ÚmainrK   rC   rA   ú<module>r—      sg  ððð ð € € € € € € € € € € € € €
€
€
€
Ø Ð Ð Ð Ð Ð Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€ØÐ6Ñ6€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)à $Ð $Ð $Ð $ð-ð -ð -ð -ð -ñ -ô -ð -ð(-ð -ð -ð -ð -ñ -ô -ð -ð`'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð. ˆzÒÐØ€F„K�˜4Ð Ñ!Ô!Ð!Ð!Ð!ð ÐrC   