§
    ë3Êjq)  ã                   óò  — d 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 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ddlmZmZmZ edz  dz  Zedz  d	z  Z edz  d
z  dz  Z!g d¢Z" G d„ d¦  «        Z# G d„ d¦  «        Z$e%dk    r ej&        edg¦  «         dS dS )aº  
=============================================================================
CHALLENGER 2 EMPIRICAL HARNESS: ASSET INVARIANTS & EPISODE ASSEMBLY (M4 ITER 2)
=============================================================================
Milestone: M4 Iteration 2 Gate Verification
Author: Challenger 2 (critic, specialist)

Empirically tests:
1. Invariant: 04_Assets/characters/ has exactly 62 files on disk.
2. Invariant: git status -s 04_Assets/characters/ is strictly empty.
3. Invariant: All 14 core Ep01 portraits exist, are valid PNG, >500kB, correct dimensions.
4. Invariant: All 48 other character portraits are non-empty and valid images.
5. Invariant: 04_Assets/turnaround_sheets/ has exactly 55 files on disk.
6. Invariant: 04_Assets/archive/ep01_legacy_v1/ has exactly 184 .mp4 files and valid legal README.md.
7. Invariant: git diff HEAD -- 04_Assets/characters 04_Assets/archive/ep01_legacy_v1 is strictly empty.
8. Episode Assembly: production_orchestrator assemble_episode_master --check behavior.
9. Episode Assembly: Simulated 10-Scene Feature Master assembly end-to-end with FFmpeg concat and EBU R128 mastering.
=============================================================================
é    N)ÚPath)ÚImageÚ05_Production_Pipeline)ÚAudioContinuityEngineÚ
get_ffmpegÚget_ffprobeÚ	04_AssetsÚ
charactersÚturnaround_sheetsÚarchiveÚep01_legacy_v1))zI01_Main_Protagonists/thuy_kieu_maiden_16yo/thuy_kieu_maiden_16yo_720p.png©i   iÐ  )zK01_Main_Protagonists/thuy_kieu_maiden_16yo/thuy_kieu_maiden_16yo_master.png©i`  i   )zG01_Main_Protagonists/thuy_van_maiden_16yo/thuy_van_maiden_16yo_720p.pngr   )zI01_Main_Protagonists/thuy_van_maiden_16yo/thuy_van_maiden_16yo_master.pngr   )z;01_Main_Protagonists/kim_trong_18yo/kim_trong_18yo_720p.pngr   )z=01_Main_Protagonists/kim_trong_18yo/kim_trong_18yo_master.pngr   )zA02_Vuong_Family_And_Fate/vuong_quan_16yo/vuong_quan_16yo_720p.pngr   )zC02_Vuong_Family_And_Fate/vuong_quan_16yo/vuong_quan_16yo_master.pngr   )z?02_Vuong_Family_And_Fate/vuong_ong_55yo/vuong_ong_55yo_720p.pngr   )zA02_Vuong_Family_And_Fate/vuong_ong_55yo/vuong_ong_55yo_master.pngr   )z=02_Vuong_Family_And_Fate/vuong_ba_50yo/vuong_ba_50yo_720p.pngr   )z?02_Vuong_Family_And_Fate/vuong_ba_50yo/vuong_ba_50yo_master.pngr   )z302_Vuong_Family_And_Fate/dam_tien/dam_tien_720p.pngr   )z502_Vuong_Family_And_Fate/dam_tien/dam_tien_master.pngr   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚTestChallenger2AssetInvariantsz7Empirical verification of asset invariants and hygiene.c                 ó,  — t           j        } |¦   «         }|s•ddt          j        ¦   «         v st	          j        t           ¦  «        rt	          j        t           ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d„ t          j
        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t          |¦  «        › �¦  «        dz   d|iz  }	t          t	          j        |	¦  «        ¦  «        ‚dx}x}}dS )zqAssert at least 125 files exist on disk in unified 04_Assets/characters/ (portraits + turnaround sheets + views).úAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}ÚCHARACTERS_DIR©Úpy0Úpy2Úpy4Nc                 ó$   — g | ]\  }}}|D ]}|‘ŒŒS © r   ©Ú.0ÚrootÚ_ÚfilesÚfs        úBC:\Projects\KieuStory\tests\test_challenger2_m4_empirical_probe.pyú
<listcomp>zdTestChallenger2AssetInvariants.test_01_characters_directory_exact_file_count_125.<locals>.<listcomp>D   s+   € ÐTÐTÐT™>˜4  EÈeÐTÐTÈ�QÐTÐTÐTÐTó    é}   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚ	all_files©r   Úpy1Úpy3Úpy6zExpected at least 125 files in z, found ú
>assert %(py8)sÚpy8)r   ÚexistsÚ@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚosÚwalkr&   Ú_call_reprcompareÚ_format_assertmsg)
ÚselfÚ@py_assert1Ú@py_assert3Ú@py_format5r'   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9s
             r!   Ú1test_01_characters_directory_exact_file_count_125zPTestChallenger2AssetInvariants.test_01_characters_directory_exact_file_count_125A   s  € åÔ$Ð&Ð$Ð$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�~Ñ&Ô&Ð&Õ&Ô&�~Ñ&Ô&Ð&Ð&Õ&Ô&Ð$Ñ&Ô&Õ&Ô&Ð&Ñ&Ô&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØTÐT­R¬Wµ^Ñ-DÔ-DÐTÑTÔTˆ	Ý�9‰~Œ~Ðp Ðpˆ~ Ò$ÐpÐpÑpÕpÔpÐpÐpÐpÐpˆ~ ÐpÑpÔpÐpÕpÔpÑpÔpÐpÐpÕpÔp�sÑpÔpÐpÕpÔp�sÑpÔpÐpÐpÐpÕpÔpÑpÔpÐpÐpÕpÔp�9ÑpÔpÐpÕpÔp�9ÑpÔpÐpÐpÕpÔpˆ~ÑpÔpÕpÔp ÑpÔpÐpÐpÑpÐpÕpÔpÐ&pÍÐ&pÐ&pÕ`cÐdmÑ`nÔ`nÐ&pÐ&pÑpÔpÐpÑpÐpÐpÐpÑpÐpÕpÕpÔpÐpÑpÔpÑpÔpÐpÐpÐpÐpÐpÐpÐpÐpÐpr#   c           
      ó:  — t           D �]\  }}t          |z  }|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}}|j        } |¦   «         }|j        }d}||k    }	|	�st          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }
t          j        d
|                     ¦   «         j        › d|› �¦  «        dz   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}	}t          j        |¦  «        5 }|j        }d}||k    }|sÊt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|› d|j        › �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}|j        }||k    }|søt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d|j        › d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}ddd¦  «         n# 1 swxY w Y   �ŒdS )zKAssert all 14 core portraits are > 500kB, PNG, and match exact resolutions.zCore portrait missing: úC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Ú	full_pathr   Ni ¡ ©ú>©z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stat
}()
}.st_size
} > %(py9)s©r   r   r   r+   Úpy9zCore portrait too small (z): ú
>assert %(py11)sÚpy11ÚPNG©ú==)z.%(py2)s
{%(py2)s = %(py0)s.format
} == %(py5)sÚimg©r   r   Úpy5zExpected PNG format for z, got z
>assert %(py7)sÚpy7)z,%(py2)s
{%(py2)s = %(py0)s.size
} == %(py4)sÚexpected_dimszDimension mismatch for z: z != z
>assert %(py6)sr+   )ÚCORE_EP01_CHARACTERSr   r.   r1   r9   r/   r0   r2   r3   r4   r5   ÚstatÚst_sizer8   r   ÚopenÚformatÚsize)r:   Úrel_pathrU   rF   r;   r<   r=   r?   Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12rQ   r@   Ú@py_format6Ú@py_format8rA   s                    r!   Ú7test_03_core_ep01_characters_size_format_and_dimensionszVTestChallenger2AssetInvariants.test_03_core_ep01_characters_size_format_and_dimensionsG   sé  € å';ð 	vñ 	vÑ#ˆH�mÝ&¨Ñ1ˆIØÔ#ÐKÐ#Ð#Ñ%Ô%ÐKÐ%ÐKÕKÔKÐ'KÀÐ'KÐ'KÑKÔKÐKÑKÐKÕKÔKÑKÔKÐKÐKÕKÔK�9ÑKÔKÐKÕKÔK�9Ñ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Ø”>Ðz�>�>Ñ#Ô#ÐzÐ#Ô+Ðz¨gÐzÐ+¨gÒ5ÐzÐzÑzÕzÔzÐzÐzÐzÐzÐ+¨gÐzÑzÔzÐzÕzÔzÑzÔzÐzÐzÕzÔz�9ÑzÔzÐzÕzÔz�9ÑzÔzÐzÐzÕzÔz�>ÑzÔzÕzÔzÐ#ÑzÔzÕzÔzÐ+ÑzÔzÕzÔz¨gÑzÔzÐzÐzÑzÐzÕzÔzÐ7zÐS\×SaÒSaÑScÔScÔSkÐ7zÐ7zÐpxÐ7zÐ7zÑzÔzÐzÑzÐzÐzÐzÑzÐzÕzÕzÔzÐzÑzÔzÑzÔzÐzÐzÐzÐzÐzÐzÐzÐzÐzÐzÐzÝ”˜IÑ&Ô&ð v¨#Ø”zÐc UÐc�z UÒ*ÐcÐcÐcÕcÔcÐcÐcÐcÐc�z UÐcÑcÔcÐcÕcÔcÑcÔcÐcÐcÕcÔc�sÑcÔcÐcÕcÔc�sÑcÔcÐcÐcÕcÔc�zÑcÔcÕcÔc UÑcÔcÐcÐcÑcÐcÕcÔcÐ,cÀxÐ,cÐ,cÐWZÔWaÐ,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Ðu�x =Ò0ÐuÐuÐuÕuÔuÐuÐuÐuÐu�x =ÐuÑuÔuÐuÕuÔuÑuÔuÐuÐuÕuÔu�sÑuÔuÐuÕuÔu�sÑuÔuÐuÐuÕuÔu�xÑuÔuÐuÕuÔuÑuÔuÐuÐuÕuÔu =ÑuÔuÐuÕuÔu =ÑuÔuÐuÐuÐuÐuÑuÐuÕuÔuÐ2uÈHÐ2uÐ2uÐX[ÔX`Ð2uÐ2uÐfsÐ2uÐ2uÑuÔuÐuÑuÐuÐuÐuÑuÐuÕuÕuÔuÐuÑuÔuÑuÔuÐuÐuÐuÐuÐuðvð vð vñ vô vð vð vð vð vð vð vøøøð vð vð vð vùð		vð 	vs   ÈG-PÐP	ÐP	c           
      óÆ  — t          j        t          ¦  «        D �]Å\  }}}|D �]º}t          |¦  «        |z  }|j        } |¦   «         }|j        }d}	||	k    }
|
sèt          j        d|
fd||	f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}x}
}	|j                             ¦   «         d
k    �rst#          j        |¦  «        5 }g }|j        d         }d}||k    }|}|r|j        d         }d}||k    }|}|�st          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |r`t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}x}x}x}x}}d	d	d	¦  «         n# 1 swxY w Y   �Œ¼�ŒÇd	S )zSAssert every single file among the 125 character files is readable and non-corrupt.r   rG   rI   ÚprJ   zZero-byte file found: rL   rM   Nz.pngé   )z%(py3)s > %(py6)s)r*   r+   z%(py8)sr-   )z%(py11)s > %(py14)s)rM   Úpy14z%(py16)sÚpy16zassert %(py19)sÚpy19)r6   r7   r   r   rW   rX   r1   r8   r/   r0   r2   r3   r9   r4   r5   ÚsuffixÚlowerr   rY   r[   ÚappendÚ_format_boolop)r:   r   r   r   r    re   r;   r<   r?   r]   r^   r_   r`   rQ   r>   r@   Ú@py_assert0Ú@py_assert10Ú@py_assert13Ú@py_assert12rA   rB   Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20s                             r!   Ú)test_04_all_125_character_files_are_validzHTestChallenger2AssetInvariants.test_04_all_125_character_files_are_validQ   s¼  € å œg¥nÑ5Ô5ð 	Cñ 	C‰NˆD�!�UØð Cñ C�Ý˜‘J”J ‘N�Ø”vÐI�v�v‘x”xÐI�xÔ'ÐI¨!ÐIÐ'¨!Ò+ÐIÐIÐIÕIÔIÐIÐIÐIÐIÐ'¨!ÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI�qÑIÔIÐIÕIÔI�qÑIÔIÐIÐIÕIÔI�vÑIÔIÕIÔI�xÑIÔIÕIÔIÐ'ÑIÔIÕIÔI¨!ÑIÔIÐIÐIÑIÐIÕIÔIÐ-IÀaÐ-IÐ-IÑIÔIÐIÑIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIØ”8—>’>Ñ#Ô# vÒ-Ñ-Ýœ A™œð C¨#ØBÐB˜sœx¨œ{ÐB¨QÐB˜{¨QšÐBÐBÐBÐBÐB°3´8¸A´;ÐBÀÐB°;À²?ÐBÐBÐBÐBÑBÕBÔBÐBÐBÐBÐB˜{¨QÐBÑBÔBÕBÔB˜{ÑBÔBÕBÔB¨QÑ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Õ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Ñ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ðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cùñ	Cð	Cð 	Cs   Å>EKËKËKc                 óº  — d„ t          j        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	z   d
|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}dS )zSAssert all 54 turnaround sheets exist within their corresponding character folders.c                 ó,   — g | ]\  }}}|D ]}d |v ¯|‘Œ	ŒS )Úturnaround_sheetr   r   s        r!   r"   z]TestChallenger2AssetInvariants.test_05_turnaround_sheets_unified_presence.<locals>.<listcomp>]   s7   € ÐnÐnÐn™.˜$  5ÈUÐnÐnÈÐVhÐlmÐVmÐVm�AÐVmÐVmÐVmÐVmr#   é6   rO   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr&   Úta_filesr(   z$Expected 54 turnaround files, found r,   r-   N)r6   r7   r   r&   r1   r8   r/   r0   r2   r3   r9   r4   r5   )r:   r|   r>   r?   r@   rA   rB   s          r!   Ú*test_05_turnaround_sheets_unified_presencezITestChallenger2AssetInvariants.test_05_turnaround_sheets_unified_presence[   s`  € ànÐn­B¬GµNÑ,CÔ,CÐnÑnÔnˆÝ�8‰}Œ}ÐZ ÐZˆ} Ò"ÐZÐZÑZÕZÔZÐZÐZÐZÐZˆ} ÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZ�sÑZÔZÐZÕZÔZ�sÑZÔZÐZÐZÐZÕZÔZÑZÔZÐZÐZÕZÔZ�8ÑZÔZÐZÕZÔZ�8ÑZÔZÐZÐZÕZÔZˆ}ÑZÔZÕZÔZ ÑZÔZÐZÐZÑZÐZÕZÔZÐ$ZÍ3ÈxÉ=Ì=Ð$ZÐ$ZÑZÔZÐZÑZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÐZÐZÐZÐZr#   c                 óf  — t           j        } |¦   «         }|s•ddt          j        ¦   «         v st	          j        t           ¦  «        rt	          j        t           ¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚dx}}d„ t          j
        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z   d|iz  }	t          t	          j        |	¦  «        ¦  «        ‚dx}x}}t           dz  }
|
j        } |¦   «         }|s‹ddt          j        ¦   «         v st	          j        |
¦  «        rt	          j        |
¦  «        ndt	          j        |¦  «        t	          j        |¦  «        dœz  }t          t	          j        |¦  «        ¦  «        ‚dx}}|
                     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}||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 }||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S )#zPAssert exactly 184 legacy mp4 files exist and README.md has legal documentation.r   ÚARCHIVE_DIRr   Nc                 ó`   — g | ]+}|                      ¦   «                              d ¦  «        ¯)|‘Œ,S )z.mp4)rk   Úendswith)r   r    s     r!   r"   z_TestChallenger2AssetInvariants.test_06_archive_legacy_ep01_count_and_readme.<locals>.<listcomp>c   s3   € ÐVÐVÐV˜1¸1¿7º7¹9¼9×;MÒ;MÈfÑ;UÔ;UÐV�QÐVÐVÐVr#   é°   rO   r{   r&   Ú	mp4_filesr(   z%Expected 176 legacy mp4 files, found r,   r-   z	README.mdÚreadmezutf-8)Úencodingiè  rG   )z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sÚcontentzassert %(py8)su   NGUYá»„N SÄ¨ SÆ N)Úin)z%(py1)s in %(py3)s)r)   r*   úassert %(py5)srS   Ú031090010018u   Ä�iá»�u 4 khoáº£n 8u
   Ä�iá»�u 14u
   Ä�iá»�u 20u
   Ä�iá»�u 43)r   r.   r/   r0   r1   r2   r3   r4   r5   r6   Úlistdirr&   r8   r9   Ú	read_text)r:   r;   r<   r=   rƒ   r>   r?   r@   rA   rB   r„   r†   rn   Ú@py_format4ra   s                  r!   Ú,test_06_archive_legacy_ep01_count_and_readmezKTestChallenger2AssetInvariants.test_06_archive_legacy_ep01_count_and_readme`   s~  € åÔ!Ð#Ð!Ð!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�{Ñ#Ô#Ð#Õ#Ô#�{Ñ#Ô#Ð#Ð#Õ#Ô#Ð!Ñ#Ô#Õ#Ô#Ð#Ñ#Ô#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ØVÐV¥¤
­;Ñ 7Ô 7ÐVÑVÔVˆ	Ý�9‰~Œ~Ð^ Ð^ˆ~ Ò$Ð^Ð^Ñ^Õ^Ô^Ð^Ð^Ð^Ð^ˆ~ Ð^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�sÑ^Ô^Ð^Õ^Ô^�sÑ^Ô^Ð^Ð^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�9Ñ^Ô^Ð^Õ^Ô^�9Ñ^Ô^Ð^Ð^Õ^Ô^ˆ~Ñ^Ô^Õ^Ô^ Ñ^Ô^Ð^Ð^Ñ^Ð^Õ^Ô^Ð&^ÍcÐR[ÉnÌnÐ&^Ð&^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^å˜{Ñ*ˆØŒ}Ðˆ}ˆ}‰ŒÐˆÐÐÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔˆ}ÑÔÕÔˆÑÔÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ×"Ò"¨GÐ"Ñ4Ô4ˆÝ�7‰|Œ|Ð"˜dÐ"ˆ|˜dÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ|˜dÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�7Ñ"Ô"Ð"Õ"Ô"�7Ñ"Ô"Ð"Ð"Õ"Ô"ˆ|Ñ"Ô"Õ"Ô"˜dÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø"Ð-Ð" gÐ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð" gÐ-Ñ-Ô-Õ-Ô-Ð"Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- gÑ-Ô-Ð-Õ-Ô- gÑ-Ô-Ð-Ð-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-ØÐ(ˆ~ Ð(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆ~ Ð(Ñ(Ô(Õ(Ô(ˆ~Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô( Ñ(Ô(Ð(Õ(Ô( Ñ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ø$Ð/Ð$¨Ð/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð$¨Ð/Ñ/Ô/Õ/Ô/Ð$Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/¨Ñ/Ô/Ð/Õ/Ô/¨Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ØÐ&ˆ|˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜wÐ&Ñ&Ô&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ&ˆ|˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜wÐ&Ñ&Ô&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ&ˆ|˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&ˆ|˜wÐ&Ñ&Ô&Õ&Ô&ˆ|Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r#   c                 ó6  — t          j        g d¢t          t          ¦  «        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        }|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
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }
t          j        d|j                             ¦   «         › �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}	}dS )zBAssert zero diff between HEAD and working copy for legacy archive.)ÚgitÚdiffÚHEADz--z 04_Assets/archive/ep01_legacy_v1T)ÚcwdÚcapture_outputÚtextr   rO   )z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sÚresrR   zassert %(py7)srT   NÚ )z`%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stdout
}.strip
}()
} == %(py9)srJ   z"Unexpected diff found in archive: rL   rM   )Ú
subprocessÚrunÚstrÚPROJECT_ROOTÚ
returncoder1   r8   r/   r0   r2   r3   r4   r5   ÚstdoutÚstripr9   )r:   r•   r;   r@   r<   ra   rb   r?   r]   r^   r_   r`   s               r!   Útest_07_archive_strictly_intactz>TestChallenger2AssetInvariants.test_07_archive_strictly_intactq   s_  € åŒnØMÐMÐMÝ•LÑ!Ô!ØØð	
ñ 
ô 
ˆð Œ~Ð" Ð"ˆ~ Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ~ Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆsÑ"Ô"Ð"Õ"Ô"ˆsÑ"Ô"Ð"Ð"Õ"Ô"ˆ~Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒzÐbˆzÔÐbÐÐÑ!Ô!Ðb RÐbÐ! RÒ'ÐbÐbÐbÕbÔbÐbÐbÐbÐbÐ! RÐbÑbÔbÐbÕbÔbÑbÔbÐbÐbÕbÔbˆsÑbÔbÐbÕbÔbˆsÑbÔbÐbÐbÕbÔbˆzÑbÔbÕbÔbÐÑbÔbÕbÔbÐ!ÑbÔbÕbÔb RÑbÔbÐbÐbÑbÐbÕbÔbÐ)bÈcÌj×N^ÒN^ÑN`ÔN`Ð)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Ðbr#   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rC   rc   rv   r}   r�   rž   r   r#   r!   r   r   >   s…   € € € € € ØAÐAðqð qð qðvð vð vðCð Cð Cð[ð [ð [ð
'ð 'ð 'ð"	cð 	cð 	cð 	cð 	cr#   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú#TestChallenger2EpisodeAssemblyProbezEEmpirical probe of episode assembly logic and loudness normalization.c                 óª  — t          j        dd„ t          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S )zMAssert --check mode runs cleanly without raising and reports accurate status.Úep01c                 ó   — g | ]}d |d›�‘Œ	S ©Ú
ep01_sceneÚ02dr   ©r   Úis     r!   r"   zbTestChallenger2EpisodeAssemblyProbe.test_08_assemble_episode_master_check_mode.<locals>.<listcomp>„   ó$   € ÐBÐBÐB°Ð+ AÐ+Ð+Ð+ÐBÐBÐBr#   rf   é   T)Ú
episode_idÚ	scene_idsÚ
check_onlyN)Úis)z%(py0)s is %(py3)sÚout©r   r*   rˆ   rS   )ÚpoÚassemble_episode_masterÚranger1   r8   r/   r0   r2   r3   r4   r5   )r:   r³   r>   r;   rŒ   ra   s         r!   Ú*test_08_assemble_episode_master_check_modezNTestChallenger2EpisodeAssemblyProbe.test_08_assemble_episode_master_check_mode€   s  € åÔ(ØØBÐBµU¸1¸b±\´\ÐBÑBÔBØð
ñ 
ô 
ˆð Ðˆs�dˆ{ÐÐÐÕÔÐÐÐÐˆs�dÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔ�dÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr#   c                 ó"  — |dz  }t          j        dd„ t          dd¦  «        D ¦   «         t          |¦  «        d¬¦  «        }||k    }|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œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d}dS )zEAssert --dry-run returns target output path without executing FFmpeg.zep01_simulated_feature.mp4r¦   c                 ó   — g | ]}d |d›�‘Œ	S r¨   r   r«   s     r!   r"   zdTestChallenger2EpisodeAssemblyProbe.test_09_assemble_episode_master_dry_run_mode.<locals>.<listcomp>�   r­   r#   rf   r®   T)r¯   r°   Úoutput_pathÚdry_runrO   )z%(py0)s == %(py2)sr³   Úsim_out)r   r   zassert %(py4)sr   N)rµ   r¶   r·   r™   r1   r8   r/   r0   r2   r3   r4   r5   )r:   Útmp_pathr½   r³   r;   Ú@py_format3r=   s          r!   Ú,test_09_assemble_episode_master_dry_run_modezPTestChallenger2EpisodeAssemblyProbe.test_09_assemble_episode_master_dry_run_modeŠ   s6  € àÐ9Ñ9ˆÝÔ(ØØBÐBµU¸1¸b±\´\ÐBÑBÔBÝ˜G™œØð	
ñ 
ô 
ˆð �gŠ~ÐÐÐÕÔÐÐÐÐˆs�gÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÐÕÔÑÔÐÐÕÔ�gÑÔÐÕÔ�gÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐr#   c                 óü  ‡%— t          ¦   «         }g }t          dd¦  «        D ]m}d|d›�}||› d�z  }|dddd	d
ddd	dd|z  › d�ddddddddddddddt          |¦  «        g}t          j        |dd¬¦  «         |                     ||f¦  «         Œn|dz  }t          |¦  «        Š%dd lm}	 |	 	                    d!ˆ%fd"„¬#¦  «        5  t          j        d$d%„ |D ¦   «         t          |¦  «        d¬&¦  «        }
d d d ¦  «         n# 1 swxY w Y   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   d0t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd0t          j        |¦  «        t          j        |¦  «        d1œz  }t'          t          j        |¦  «        ¦  «        ‚d x}}|j        } |¦   «         }|j        }d}||k    }|sÐt          j        d2|fd3||f¦  «        d0t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd0t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d4œz  }d5d6|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}t1          ¦   «         }|d7d8d9d:d;d<t          |¦  «        g}t          j        |ddd¬=¦  «        }t3          j        |j        ¦  «        }|                     d>g ¦  «        }t;          d?„ |D ¦   «         d ¦  «        }t;          d@„ |D ¦   «         d ¦  «        }d }||u}|s¬t          j        d'|fd(||f¦  «        dAt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndAt          j        |¦  «        d*œz  }t          j        dB¦  «        d,z   d-|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}}d }||u}|s¬t          j        d'|fd(||f¦  «        dCt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndCt          j        |¦  «        d*œz  }t          j        dD¦  «        d,z   d-|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}}|j        }dE} ||¦  «        }d}||k    }|sût          j        dF|fdG||f¦  «        dCt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndCt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d4œz  }t          j        dH|                     dE¦  «        › �¦  «        dIz   d6|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}|j        }dJ}d} |||¦  «        }t=          |¦  «        }dK} || k    }!|!�sit          j        dF|!fdL|| f¦  «        dMt          j        ¦   «         v st          j        t<          ¦  «        rt          j        t<          ¦  «        ndMdCt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndCt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        | ¦  «        dNœz  }"t          j        dO|                     dJ¦  «        › �¦  «        dPz   dQ|"iz  }#t'          t          j        |#¦  «        ¦  «        ‚d x}x}x}x}x}x}!} |j        }dR}d} |||¦  «        }t=          |¦  «        }dS} || k    }!|!�sit          j        dF|!fdL|| f¦  «        dMt          j        ¦   «         v st          j        t<          ¦  «        rt          j        t<          ¦  «        ndMdCt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndCt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        | ¦  «        dNœz  }"t          j        dT|                     dR¦  «        › �¦  «        dPz   dQ|"iz  }#t'          t          j        |#¦  «        ¦  «        ‚d x}x}x}x}x}x}!} t?          |                     dUi ¦  «                             dVdW¦  «        ¦  «        }$dX}|$|z
  }tA          |¦  «        }dY}||k     }|�st          j        dZ|fd[||f¦  «        d\t          j        ¦   «         v st          j        t@          ¦  «        rt          j        t@          ¦  «        nd\dVt          j        ¦   «         v st          j        |$¦  «        rt          j        |$¦  «        ndVt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d]œz  }t          j        d^|$› d_�¦  «        dIz   d6|iz  }t'          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}d S )`z^Create 3 lightweight synthetic scene masters and run full episode assembly with normalization.rf   é   r©   rª   z_master_v1.mp4z-yz-fÚlavfiz-iz)testsrc=size=160x120:rate=24:duration=1.0zsine=frequency=i,  z:sample_rate=48000:duration=1.0z-c:vÚlibx264z-presetÚ	ultrafastz-pix_fmtÚyuv420pz-c:aÚaacz-b:aÚ128kz-arÚ48000z-acÚ2T)r“   Úcheckzep01_feature_master_v1.mp4r   Nz,production_orchestrator.resolve_scene_masterc                 ó.   •— ‰                      | ¦  «        S )N©Úget)ÚsidÚ
scene_dicts    €r!   ú<lambda>zpTestChallenger2EpisodeAssemblyProbe.test_10_simulated_end_to_end_episode_assembly_and_loudness.<locals>.<lambda>­   s   ø€ Ð`j×`nÒ`nÐorÑ`sÔ`s€ r#   )Úside_effectr¦   c                 ó   — g | ]
}|d          ‘ŒS )r   r   ©r   Úss     r!   r"   zrTestChallenger2EpisodeAssemblyProbe.test_10_simulated_end_to_end_episode_assembly_and_loudness.<locals>.<listcomp>°   s   € Ð0Ð0Ð0 A˜1˜Qœ4Ð0Ð0Ð0r#   )r¯   r°   r»   Únormalize_final)úis not)z%(py0)s is not %(py3)sÚresultr´   zassemble_episode_master failed!z
>assert %(py5)srS   zFeature master not created: rE   Útarget_featurer   rG   rI   rJ   zassert %(py11)srM   ú-vÚerrorz-show_entrieszAstream=codec_type,codec_name,sample_rate,channels:format=durationz-ofÚjson)r“   r”   rË   Ústreamsc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )Ú
codec_typeÚaudioNrÍ   rÔ   s     r!   ú	<genexpr>zqTestChallenger2EpisodeAssemblyProbe.test_10_simulated_end_to_end_episode_assembly_and_loudness.<locals>.<genexpr>Ã   ó8   è è € ÐNÐN˜q¨q¯uªu°\Ñ/BÔ/BÀgÒ/MÐ/M˜Ð/MÐ/MÐ/MÐ/MÐNÐNr#   c              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )rß   ÚvideoNrÍ   rÔ   s     r!   rá   zqTestChallenger2EpisodeAssemblyProbe.test_10_simulated_end_to_end_episode_assembly_and_loudness.<locals>.<genexpr>Ä   râ   r#   Úv_streamzMaster missing video streamÚa_streamzMaster missing audio streamÚ
codec_namerO   )zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} == %(py9)szExpected aac, got rL   Úsample_ratei€»  )zs%(py11)s
{%(py11)s = %(py0)s(%(py9)s
{%(py9)s = %(py3)s
{%(py3)s = %(py1)s.get
}(%(py5)s, %(py7)s)
})
} == %(py14)sÚint)r   r)   r*   rS   rT   rK   rM   rg   zExpected 48000Hz, got z
>assert %(py16)srh   Úchannelsé   z"Expected 2 channels (stereo), got rZ   Údurationg        g      @g      Ð?)ú<)z;%(py6)s
{%(py6)s = %(py0)s((%(py1)s - %(py3)s))
} < %(py9)sÚabs)r   r)   r*   r+   rK   zExpected ~3.0s duration, got rÕ   )!r   r·   r™   r—   r˜   rl   ÚdictÚunittest.mockÚmockÚpatchrµ   r¶   r1   r8   r/   r0   r2   r3   r9   r4   r5   r.   rW   rX   r   rÜ   Úloadsrœ   rÎ   Únextré   Úfloatrî   )&r:   r¾   ÚffmpegÚscenesr¬   Úsc_idÚsc_pathÚcmdrÙ   rñ   rØ   r>   r;   rŒ   ra   r<   r=   r?   r]   r^   r_   r`   ÚffprobeÚ	probe_cmdÚ	probe_resÚ
probe_datarÝ   ræ   rå   r@   Ú@py_assert6ro   rp   rq   rr   rs   rì   rÐ   s&                                        @r!   Ú:test_10_simulated_end_to_end_episode_assembly_and_loudnessz^TestChallenger2EpisodeAssemblyProbe.test_10_simulated_end_to_end_episode_assembly_and_loudness•   s  ø€ å‘”ˆØˆÝ�q˜!‘”ð 	,ð 	,ˆAØ( Ð(Ð(Ð(ˆEØ EÐ!9Ð!9Ð!9Ñ9ˆGà˜Ø�g˜tÐ%QØ�g˜tÐ%]°s¸1±uÐ%]Ð%]Ð%]Ø˜	 9¨k¸:ÀyØ˜˜v v¨u°g¸uÀcÝ�G‘”ðˆCõ ŒN˜3¨t¸4Ð@Ñ@Ô@Ð@Ø�MŠM˜5 'Ð*Ñ+Ô+Ð+Ð+à!Ð$@Ñ@ˆõ ˜&‘\”\ˆ
Ø$Ð$Ð$Ð$Ð$Ð$à�ZŠZÐFÐTsÐTsÐTsÐTsˆZÑtÔtð 	ð 	ÝÔ/Ø!Ø0Ð0¨Ð0Ñ0Ô0Ý Ñ/Ô/Ø $ð	ñ ô ˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð "ÐDˆv˜TÐ!ÐDÐDÐDÕDÔDÐDÐDÐDÐDˆv˜TÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔDˆvÑDÔDÐDÕDÔDˆvÑDÔDÐDÐDÕDÔD˜TÑ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ØÔ$ÐWÐ$Ð$Ñ&Ô&ÐWÐ&ÐWÕWÔWÐ(WÀ~Ð(WÐ(WÑWÔWÐWÑWÐWÕWÔWÑWÔWÐWÐWÕWÔWˆ~ÑWÔWÐWÕWÔWˆ~ÑWÔWÐWÐWÕWÔWÐ$ÑWÔWÕWÔWÐ&ÑWÔWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWØÔ"Ð0Ð"Ð"Ñ$Ô$Ð0Ð$Ô,Ð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ˆ~Ñ0Ô0Ð0Õ0Ô0ˆ~Ñ0Ô0Ð0Ð0Õ0Ô0Ð"Ñ0Ô0Õ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Ð0õ ‘-”-ˆà�T˜7ØÐ`Ø�6�3˜~Ñ.Ô.ð
ˆ	õ
 ”N 9¸TÈÐTXÐYÑYÔYˆ	Ý”Z 	Ô 0Ñ1Ô1ˆ
Ø—.’. ¨BÑ/Ô/ˆÝÐNÐN GÐNÑNÔNÐPTÑUÔUˆÝÐNÐN GÐNÑNÔNÐPTÑUÔUˆà#ÐBˆx˜tÐ#ÐBÐBÐBÕBÔBÐBÐBÐBÐBˆx˜tÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBˆxÑBÔBÐBÕBÔBˆxÑ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ÔBÑBÔBÐBÐBÐBÐBÐBØ#ÐBˆx˜tÐ#ÐBÐBÐBÕBÔBÐBÐBÐBÐBˆx˜tÐBÑBÔBÐBÕBÔBÑBÔBÐBÐBÕBÔBˆxÑBÔBÐBÕBÔBˆxÑ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ÔBÑBÔBÐBÐBÐBÐBÐBØŒ|Ðe˜LÐeˆ|ˆ|˜LÑ)Ô)Ðe¨UÐeÐ)¨UÒ2ÐeÐeÐeÕeÔeÐeÐeÐeÐeÐ)¨UÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔeˆxÑeÔeÐeÕeÔeˆxÑeÔeÐeÐeÕeÔeˆ|ÑeÔeÕeÔe˜LÑeÔeÕeÔeÐ)ÑeÔeÕeÔe¨UÑeÔeÐeÐeÑeÐeÕeÔeÐ4eÈÏÊÐVbÑIcÔIcÐ4eÐ4eÑeÔeÐeÑeÐeÐeÐeÑeÐeÕeÕeÔeÐeÑeÔeÑeÔeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeÐeØ”<Ðs Ðs¨qÐs�<�< ¨qÑ1Ô1Ðs�sÐ1Ñ2Ô2Ðs°eÐsÐ2°eÒ;ÐsÐsÑsÕsÔsÐsÐsÐsÐsÐ2°eÐsÑsÔsÐsÕsÔsÑsÔsÐsÐsÕsÔs�sÑsÔsÐsÕsÔs�sÑsÔsÐsÐsÐsÕsÔsÑsÔsÐsÐsÕsÔs�8ÑsÔsÐsÕsÔs�8ÑsÔsÐsÐsÕsÔs�<ÑsÔsÕsÔs ÑsÔsÕsÔs¨qÑsÔsÕsÔsÐ1ÑsÔsÕsÔsÐ2ÑsÔsÕsÔs°eÑsÔsÐsÐsÑsÐsÕsÔsÐ=sÐV^×VbÒVbÐcpÑVqÔVqÐ=sÐ=sÑsÔsÐsÑsÐsÐsÐsÑsÐsÕsÕsÔsÐsÑsÔsÑsÔsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsÐsØ”<Ðu 
Ðu¨AÐu�<�< 
¨AÑ.Ô.Ðu�sÐ.Ñ/Ô/Ðu°1ÐuÐ/°1Ò4ÐuÐuÑuÕuÔuÐuÐuÐuÐuÐ/°1ÐuÑuÔuÐuÕuÔuÑuÔuÐuÐuÕuÔu�sÑuÔuÐuÕuÔu�sÑuÔuÐuÐuÐuÕuÔuÑuÔuÐuÐuÕuÔu�8ÑuÔuÐuÕuÔu�8ÑuÔuÐuÐuÕuÔu�<ÑuÔuÕuÔu 
ÑuÔuÕuÔu¨AÑuÔuÕuÔuÐ.ÑuÔuÕuÔuÐ/ÑuÔuÕuÔu°1ÑuÔuÐuÐuÑuÐuÕuÔuÐ6uÐ[c×[gÒ[gÐhrÑ[sÔ[sÐ6uÐ6uÑuÔuÐuÑuÐuÐuÐuÑuÐuÕuÕuÔuÐuÑuÔuÑuÔuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÐuÝ˜Ÿš¨°"Ñ5Ô5×9Ò9¸*ÀcÑJÔJÑKÔKˆØ!ÐV�8˜c‘>ÐV�s�>Ñ"Ô"ÐV TÐVÐ" TÒ)ÐVÐVÑVÕVÔVÐVÐVÐVÐVÐ" TÐVÑVÔVÐVÕVÔVÑVÔVÐVÐVÕVÔV�sÑVÔVÐVÕVÔV�sÑVÔVÐVÐVÐVÕVÔVÑVÔVÐVÐVÕVÔV�8ÑVÔVÐVÕVÔV�8ÑVÔVÐVÐVÕVÔV˜cÑVÔVÕVÔVÐ"ÑVÔVÕVÔV TÑVÔVÐVÐVÑVÐVÕVÔVÐ+VÈ8Ð+VÐ+VÐ+VÑVÔVÐVÑVÐVÐVÐVÑVÐVÕVÕVÔVÐVÑVÔVÑVÔVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVÐVs   Ã0D Ä DÄDN)rŸ   r    r¡   r¢   r¸   rÀ   r   r   r#   r!   r¤   r¤   }   sL   € € € € € ØOÐOðð ð ð	ð 	ð 	ð7Wð 7Wð 7Wð 7Wð 7Wr#   r¤   Ú__main__rÚ   )'r¢   Úbuiltinsr/   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter1   r6   ÚsysrÜ   r—   ÚtempfileÚpathlibr   ÚPILr   ÚpytestÚ__file__ÚresolveÚparentrš   ÚPIPELINE_DIRr™   ÚpathÚinsertÚproduction_orchestratorrµ   Úaudio_continuity_enginer   r   r   r   ÚTURNAROUND_DIRr   rV   r   r¤   rŸ   Úmainr   r#   r!   ú<module>r     sõ  ððð ð( € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€ØÐ6Ñ6€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)à $Ð $Ð $Ð $Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà Ñ+¨lÑ:€Ø Ñ+Ð.AÑA€Ø˜[Ñ(¨9Ñ4Ð7GÑG€ðð ð Ð ð$<cð <cð <cð <cð <cñ <cô <cð <cð~OWð OWð OWð OWð OWñ OWô OWð OWðd ˆzÒÐØ€F„K�˜4Ð Ñ!Ô!Ð!Ð!Ð!ð Ðr#   