§
    |£Èj]A  ã                   ó"  — 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ZddlmZ ddlmZmZ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mZmZmZ ddl Z!	 	 	 	 	 	 	 d$dede"de#dede$de$de#de#defd„Z%dedeeef         fd„Z&d%dede"dede"fd„Z' G d„ d ¦  «        Z(e)d!k    r ej*        ed"d#g¦  «         dS dS )&uI  
=============================================================================
THáº¬P NGÅ¨ NIÃŠN (THE FIFTEEN SPRINGS) - ADVERSARIAL AUDIO CONCAT PROBE (M4)
=============================================================================
Milestone: M4 Gate Verification - Empirical Challenger 1
Focus:
  1. Multi-Shot Mode A vs Mode B Audio Duration Drift & A/V Cut Sync
  2. Silent Clip & Missing Audio Track Resilience (Engine vs Orchestrator Fallback)
  3. Boundary Smoothing 0.000s Duration Loss Invariant
=============================================================================
é    N)ÚPath)ÚDictÚListÚAnyÚ05_Production_Pipeline)ÚAudioContinuityEngineÚ
get_ffmpegÚget_ffprobeç       @é¸  ÚblackTFé€»  é   Úoutput_pathÚdurationÚfreqÚcolorÚ	has_audioÚ
mute_audioÚsample_rateÚchannelsÚreturnc                 ót  — t          ¦   «         }| j                             dd¬¦  «         |ddddd|› d|› �g}	|r�|rL|	                     dddd	|› d
|› �dddddddddddddddt	          |¦  «        dt	          |¦  «        g¦  «         nf|	                     dddd|› d|› d|› �dddddddddddddddt	          |¦  «        dt	          |¦  «        g¦  «         n|	                     g d¢¦  «         |	                     dt	          |¦  «        t	          | ¦  «        g¦  «         t          j        |	dd¬¦  «         | S ) uV   Táº¡o video synthetic siÃªu nháº¹ (160x120, ultrafast) Ä‘á»ƒ cháº¡y probe cá»±c nhanh.T)ÚparentsÚexist_okz-yú-fÚlavfiú-izcolor=c=z:s=160x120:d=zaevalsrc=0:s=ú:d=z-mapz0:vz1:aú-c:vÚlibx264ú-presetÚ	ultrafastú-pix_fmtÚyuv420pz-c:aÚaacz-b:aÚ128kz-arz-aczsine=frequency=z:sample_rate=z
:duration=)z-anr    r!   r"   r#   r$   r%   ú-t)Úcapture_outputÚcheck)r	   ÚparentÚmkdirÚextendÚstrÚ
subprocessÚrun)
r   r   r   r   r   r   r   r   ÚffmpegÚcmds
             úEC:\Projects\KieuStory\tests\test_adversarial_m4_audio_concat_probe.pyÚmake_test_clipr4   "   s¹  € õ ‰\Œ\€FØÔ×Ò T°DÐÑ9Ô9Ð9à�Øˆg�tÐF¨ÐFÐF¸HÐFÐFð€Cð ð Øð 	Ø�JŠJØ�g˜tÐ%O°[Ð%OÐ%OÀXÐ%OÐ%OØ˜˜v uØ˜	 9¨k¸:ÀyØ˜˜v v¨uµc¸+Ñ6FÔ6FÈÍsÐS[É}Ì}ð	ñ ô ð ð ð �JŠJØ�g˜tÐ%k°tÐ%kÐ%kÈ+Ð%kÐ%kÐaiÐ%kÐ%kØ˜˜v uØ˜	 9¨k¸:ÀyØ˜˜v v¨uµc¸+Ñ6FÔ6FÈÍsÐS[É}Ì}ð	ñ ô ð ð ð 	�
Š
ð 
ð 
ð 
ñ 	ô 	ð 	ð ‡J‚J�•c˜(‘m”m¥S¨Ñ%5Ô%5Ð6Ñ7Ô7Ð7Ý„N�3 t°4Ð8Ñ8Ô8Ð8ØÐó    Ú
media_pathc                 óè  — t          ¦   «         }|ddddddt          | ¦  «        g}t          j        |ddd¬¦  «        }t	          j        |j        ¦  «        }|                     d	g ¦  «        }|                     d
i ¦  «        }t          d„ |D ¦   «         d¦  «        }t          d„ |D ¦   «         d¦  «        }t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        |du|r|                     d¦  «        nd|r7t          |                     d|                     dd¦  «        ¦  «        ¦  «        nd|du|r|                     d¦  «        nd|r#t          |                     dd¦  «        ¦  «        nd|r#t          |                     dd¦  «        ¦  «        nd|r7t          |                     d|                     dd¦  «        ¦  «        ¦  «        nddœ
S )uF   PhÃ¢n tÃ­ch chi tiáº¿t container, video vÃ  audio streams qua ffprobe.ú-vÚerrorz-show_entrieszYstream=codec_type,codec_name,sample_rate,channels,duration,nb_frames:format=duration,sizez-ofÚjsonT)r)   Útextr*   ÚstreamsÚformatc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )Ú
codec_typeÚvideoN©Úget©Ú.0Úss     r3   ú	<genexpr>zprobe_file.<locals>.<genexpr>Y   ó8   è è € ÐJÐJ˜1¨1¯5ª5°Ñ+>Ô+>À'Ò+IÐ+I�QÐ+IÐ+IÐ+IÐ+IÐJÐJr5   Nc              3   óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )r?   ÚaudioNrA   rC   s     r3   rF   zprobe_file.<locals>.<genexpr>Z   rG   r5   r   ç        Úsizer   Ú
codec_namer   r   )
Úformat_durationÚ
size_bytesÚ	has_videoÚvideo_codecÚvideo_durationr   Úaudio_codecr   r   Úaudio_duration)r
   r.   r/   r0   r:   ÚloadsÚstdoutrB   ÚnextÚfloatÚint)	r6   Úffprober2   ÚresÚdatar<   ÚfmtÚv_streamÚa_streams	            r3   Ú
probe_filer_   L   sè  € å‰mŒm€Gà��wØÐtØˆv•s˜:‘”ð€Cõ
 Œ.˜¨T¸ÀDÐ
IÑ
IÔ
I€CÝŒ:�c”jÑ!Ô!€DØ�hŠh�y "Ñ%Ô%€GØ
�(Š(�8˜RÑ
 Ô
 €CåÐJÐJ ÐJÑJÔJÈDÑQÔQ€HÝÐJÐJ ÐJÑJÔJÈDÑQÔQ€Hõ ! §¢¨°SÑ!9Ô!9Ñ:Ô:Ý˜#Ÿ'š' &¨!Ñ,Ô,Ñ-Ô-Ø TÐ)Ø5=ÐG�x—|’| LÑ1Ô1Ð1À4ØW_Ðh�% §¢¨Z¸¿ºÀÈSÑ9QÔ9QÑ RÔ RÑSÔSÐSÐehØ TÐ)Ø5=ÐG�x—|’| LÑ1Ô1Ð1À4Ø>FÐM•s˜8Ÿ<š<¨°qÑ9Ô9Ñ:Ô:Ð:ÈAØ8@ÐG•C˜Ÿš Z°Ñ3Ô3Ñ4Ô4Ð4ÀaØW_Ðh�% §¢¨Z¸¿ºÀÈSÑ9QÔ9QÑ RÔ RÑSÔSÐSÐehðð ð r5   ç      à?ú-50dBÚmin_silence_durÚnoise_thresholdc                 óø  — t          ¦   «         }|dt          | ¦  «        dd|› d|› �dddg}t          j        |dd¬	¦  «        }|j        }g }|                     ¦   «         D ]m}d
|v rg|                     d
¦  «        }		 |                     t          |	d                              ¦   «         d         ¦  «        ¦  «         Œ]# t          $ r Y Œiw xY wŒn|r*|d         }
t          | ¦  «        }|d         }||
k    r||
z
  S dS )uQ   Ä�o thá»�i lÆ°á»£ng im láº·ng á»Ÿ cuá»‘i file Ã¢m thanh qua FFmpeg silencedetect.r   ú-afzsilencedetect=noise=r   r   Únullú-T©r)   r;   zsilence_start:é   r   éÿÿÿÿrM   rJ   )r	   r.   r/   r0   ÚstderrÚ
splitlinesÚsplitÚappendrW   Ú
ValueErrorr_   )r6   rb   rc   r1   r2   rZ   rk   Úsilence_startsÚlineÚpartsÚ
last_startÚmetaÚ	total_durs                r3   Údetect_tail_silencerv   j   s;  € å‰\Œ\€Fà�•c˜*‘o”oØÐK oÐKÐK¸/ÐKÐKØˆf�cð€Cõ
 Œ.˜¨T¸Ð
=Ñ
=Ô
=€CØŒZ€Fà€NØ×!Ò!Ñ#Ô#ð ð ˆØ˜tÐ#Ð#Ø—J’JÐ/Ñ0Ô0ˆEðØ×%Ò%¥e¨E°!¬H¯NªNÑ,<Ô,<¸QÔ,?Ñ&@Ô&@ÑAÔAÐAÐAøÝð ð ð Ø�ðøøøð	 $ð ð *Ø# BÔ'ˆ
Ý˜*Ñ%Ô%ˆØÐ*Ô+ˆ	Ø�zÒ!Ð!Ø˜zÑ)Ð)Øˆ3s   Á<A B=Â=
C
Ã	C
c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú!TestAdversarialM4AudioConcatProbeuQ   Táº­p há»£p cÃ¡c probe thá»±c nghiá»‡m Ä‘á»‘i khÃ¡ng kiá»ƒm chá»©ng Milestone M4.c                 óâ  — d}d}||z  }d}g }t          |¦  «        D ]H}|d|dz   › d�z  }t          ||d|dz  z   ¬	¦  «         |                     t          |¦  «        ¦  «         ŒIt	          ¦   «         }	|d
z  }
|	                     |t          |
¦  «        |dd¬¦  «        }d}||u }|s—t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|
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}}t          |
¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t!          |
d¬¦  «        }|dz
  |z  }t#          d ¦  «         t#          d!|d"         d#›d$�¦  «         t#          d%|d&         d#›d$�¦  «         t#          d'|d#›d(|d#›d)�¦  «         d}||z
  }||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-t          j        |¦  «        dœz  }t          j        d.|› d$�¦  «        d/z   d0|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d1z  }|	                     |t          |¦  «        |dd2¬¦  «        }d}||u }|s—t          j        d|fd||f¦  «        d3t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd3t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j        } |¦   «         }|s‹dd4t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd4t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}t          |¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t!          |d¬¦  «        }t'          |d5         |z
  ¦  «        }t'          |d5         |d"         z
  ¦  «        }t#          d6¦  «         t#          d!|d"         d#›d$�¦  «         t#          d7|d5         d#›d$�¦  «         t#          d8|d9›d$�¦  «         t#          d:|d9›d$�¦  «         t#          d'|d#›d$�¦  «         d;}||k     }|s°t          j        d<|fd=||f¦  «        d>t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd>t          j        |¦  «        dœz  }t          j        d?|› d$�¦  «        d@z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}dA}||k     }|s°t          j        d<|fd=||f¦  «        dBt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndBt          j        |¦  «        dœz  }t          j        dC|› d$�¦  «        d@z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}d}||k     }|s°t          j        d<|fd=||f¦  «        dDt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndDt          j        |¦  «        dœz  }t          j        dE|› d$�¦  «        d@z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}dS )FuÏ  
        PROBE 1: Ä�o Ä‘á»™ co rÃºt thá»�i lÆ°á»£ng (duration shrinkage) vÃ  lá»‡ch pha A/V giá»¯a Mode A vÃ  Mode B.
        - Táº¡o 6 shots x 2.0s = 12.0s tá»•ng.
        - Mode B (acrossfade, d=0.5s):
          * Ä�á»™ co rÃºt Ã¢m thanh lÃ½ thuyáº¿t = (6 - 1) x 0.5s = 2.5s!
          * Audio bá»‹ apad Ä‘á»‡m 2.5s cÃ¢m á»Ÿ Ä‘uÃ´i.
          * Ná»™i dung Ã¢m thanh cá»§a shot 6 bá»‹ Ä‘áº©y sá»›m 2.5s so vá»›i hÃ¬nh áº£nh (phÃ¡ vá»¡ cut sync).
        - Mode A (boundary_smoothing, 30ms micro-fade):
          * Ä�á»™ co rÃºt Ã¢m thanh = 0.000s!
          * Ã‚m thanh shot 6 báº¯t Ä‘áº§u chÃ­nh xÃ¡c táº¡i timestamp 10.0s (khá»›p 100% video cut).
          * KhÃ´ng cÃ³ khoáº£ng cÃ¢m nhÃ¢n táº¡o á»Ÿ Ä‘uÃ´i.
        é   r   r`   Úshot_ri   ú.mp4i,  éd   ©r   r   zprobe_mode_b_acrossfade.mp4FÚ
acrossfade©Úcrossfade_durÚnormalize_lufsÚmodeT©Úis©z%(py0)s is %(py3)sÚok_b©Úpy0Úpy3úassert %(py5)sÚpy5NúAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Ú
out_mode_b©r‰   Úpy2Úpy4r   ©z%(py1)s is %(py4)s©Úpy1r‘   úassert %(py6)sÚpy6ç      ð?)rb   z
[PROBE 1 - Mode B Results]:z  Total Video Duration: rQ   ú.3frE   z  Container Duration:   rM   z  Detected Tail Silence: zs (Theoretical shrinkage: zs))ú>=)z%(py0)s >= (%(py2)s - %(py4)s)Útail_silence_bÚexpected_shrinkagezHMode B must have tail silence caused by acrossfade shrinkage! Detected: z
>assert %(py7)sÚpy7z#probe_mode_a_boundary_smoothing.mp4Úboundary_smoothingÚok_aÚ
out_mode_arS   z
[PROBE 1 - Mode A Results]:z  Total Audio Duration: z  Duration Difference:  ú.4fz  A/V Drift:            çš™™™™™¹?©ú<©z%(py0)s < %(py3)sÚduration_diffz&Mode A duration difference too large: ú
>assert %(py5)sgš™™™™™©?Úav_diffzMode A A/V drift too large: Útail_silence_az/Mode A should NOT have tail silence! Detected: )Úranger4   rn   r.   r   Ústitch_with_audio_crossfadeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚexistsr_   rv   ÚprintÚ_format_assertmsgÚabs)ÚselfÚtmp_pathÚ	num_shotsÚshot_durÚtotal_expected_durr�   ÚclipsÚiÚpÚenginerŽ   r‡   Ú@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6Ú@py_assert3Ú@py_format5Úmeta_bÚ@py_assert0Ú@py_format7rš   r›   Ú@py_assert5Ú@py_format8rŸ   rž   Úmeta_ar¨   r¥   r§   s                                  r3   Ú8test_probe_01_mode_a_vs_mode_b_multi_shot_timeline_driftzZTestAdversarialM4AudioConcatProbe.test_probe_01_mode_a_vs_mode_b_multi_shot_timeline_drift‰   s^  € ð ˆ	ØˆØ&¨Ñ1ÐØˆàˆÝ�yÑ!Ô!ð 	!ð 	!ˆAØÐ, 1 Q¡3Ð,Ð,Ð,Ñ,ˆAÝ˜1 x°c¸AÀ¹G±mÐDÑDÔDÐDØ�LŠL�˜Q™œÑ Ô Ð Ð å&Ñ(Ô(ˆð Ð =Ñ=ˆ
Ø×1Ò1ØÝ�
‰OŒOØ'Ø Øð 2ñ 
ô 
ˆð Ðˆt�tˆ|ÐÐÐÕÔÐÐÐÐˆt�tÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔ�tÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ Ð"Ð Ð Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"Ð Ñ"Ô"Õ"Ô"Ð"Ñ"Ô"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"å˜JÑ'Ô'ˆØ�kÔ"Ð* dÐ*Ð" dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ý,¨ZÈÐMÑMÔMˆØ'¨!™m¨}Ñ<ÐåÐ.Ñ/Ô/Ð/ÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐI¨Ð0AÔ)BÐIÐIÐIÐIÑJÔJÐJÝÐr¨.ÐrÐrÐrÐXjÐrÐrÐrÐrÑsÔsÐsØ69ð 	
Ð!3°cÑ!9ð 	
ˆ~Ð!9Ò9ð 	
ð 	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆ~Ð!9ð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð ñ 	
ô 	
ð 	
õ 	
ä 	ð ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð "4ñ 	
ô 	
ð 	
õ 	
ä 	ð "4ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð 7:ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
õ 	
ìð iÐWeÐhÐhÐhñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 Ð EÑEˆ
Ø×1Ò1ØÝ�
‰OŒOØ'Ø Ø%ð 2ñ 
ô 
ˆð Ðˆt�tˆ|ÐÐÐÕÔÐÐÐÐˆt�tÐÑÔÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔ�tÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ Ð"Ð Ð Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"Ð Ñ"Ô"Õ"Ô"Ð"Ñ"Ô"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"å˜JÑ'Ô'ˆØ�kÔ"Ð* dÐ*Ð" dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð" dÐ*Ñ*Ô*Õ*Ô*Ð"Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ý,¨ZÈÐMÑMÔMˆå˜FÐ#3Ô4Ð7IÑIÑJÔJˆÝ�fÐ-Ô.°Ð8HÔ1IÑIÑJÔJˆåÐ.Ñ/Ô/Ð/ÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐH¨Ð0@Ô)AÐHÐHÐHÐHÑIÔIÐIÝÐ=¨Ð=Ð=Ð=Ð=Ñ>Ô>Ð>ÝÐ7¨Ð7Ð7Ð7Ð7Ñ8Ô8Ð8ÝÐ?¨.Ð?Ð?Ð?Ð?Ñ@Ô@Ð@à"Ð]ˆ}˜sÒ"Ð]Ð]Ð]Õ]Ô]Ð]Ð]Ð]Ð]ˆ}˜sÐ]Ñ]Ô]Ð]Õ]Ô]Ñ]Ô]Ð]Ð]Õ]Ô]ˆ}Ñ]Ô]Ð]Õ]Ô]ˆ}Ñ]Ô]Ð]Ð]Õ]Ô]˜sÑ]Ô]Ð]Ð]Ñ]Ð]Õ]Ô]Ð$]È]Ð$]Ð$]Ð$]Ñ]Ô]Ð]Ñ]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]ØÐHˆw˜Š~ÐHÐHÐHÕHÔHÐHÐHÐHÐHˆw˜ÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔHˆwÑHÔHÐHÕHÔHˆwÑHÔHÐHÐHÕHÔH˜ÑHÔHÐHÐHÑHÐHÕHÔHÐH¸gÐ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ÕhÔhˆ~ÑhÔhÐhÕhÔhˆ~ÑhÔhÐhÐhÕhÔh ÑhÔhÐhÐhÑhÐhÕhÔhÐ%hÐWeÐ%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Ðhr5   c           	      óô	  — d}d}||z  }g }t          |¦  «        D ]I}|d|dz   d›d�z  }t          ||d|dz  z   ¬	¦  «         |                     t          |¦  «        ¦  «         ŒJt	          ¦   «         }|d
z  }	|                     |t          |	¦  «        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}}|	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}}t          |	¦  «        }|d         }d}||u }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d         }d }||k    }|slt          j        d!|fd"||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d#         }d$}||k    }|slt          j        d!|fd"||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|d%         }d&}||k    }|slt          j        d!|fd"||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t!          |d'         |z
  ¦  «        }t#          d(|› d)|d'         d*›d+|d,›d-�¦  «         d.}||k     }|s°t          j        d/|fd0||f¦  «        d1t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd1t          j        |¦  «        dœz  }t          j        d2|› d-�¦  «        d3z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}dS )4uÿ   
        PROBE 2: Kiá»ƒm chá»©ng quy mÃ´ lá»›n 10 shots (chuáº©n 10 shots x 1.0s).
        XÃ¡c nháº­n vá»›i 10 shots, Mode A váº«n giá»¯ vá»¯ng 0.000s duration loss,
        trong khi Mode B sáº½ gÃ¢y co rÃºt nghiÃªm trá»�ng (9 x crossfade_dur).
        é
   r—   Úscale_shot_ri   Ú02dr|   i�  é2   r~   zprobe_10_shots_mode_a.mp4g333333Ó?Fr�   r€   Tr„   r†   Úokrˆ   r‹   rŒ   Nr�   Úout_scale_ar�   r   r’   r“   r•   r–   rR   r&   ©ú==©z%(py1)s == %(py4)sr   r   r   r   rS   z-
[PROBE 2 - 10 Shots Scale Mode A]: Expected zs | Actual r˜   zs | Drift = r    rE   r¡   r¢   r¤   Údriftz)10-shot Mode A drift must be < 0.1s, got r¦   )r©   r4   rn   r.   r   rª   r«   r¬   r­   r®   r¯   r°   r±   r²   r³   r_   r¶   r´   rµ   )r·   r¸   r¹   rº   Úexpected_totalr¼   r½   r¾   r¿   rÓ   rÒ   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rt   rÇ   rÈ   r×   s                        r3   Ú;test_probe_02_ten_shot_scale_mode_a_zero_drift_verificationz]TestAdversarialM4AudioConcatProbe.test_probe_02_ten_shot_scale_mode_a_zero_drift_verificationÚ   sO  € ð ˆ	ØˆØ" XÑ-ˆàˆÝ�yÑ!Ô!ð 	!ð 	!ˆAØÐ6¨¨1©Ð6Ð6Ð6Ð6Ñ6ˆAÝ˜1 x°c¸AÀ¹F±lÐCÑCÔCÐCØ�LŠL�˜Q™œÑ Ô Ð Ð å&Ñ(Ô(ˆØÐ!<Ñ<ˆà×/Ò/ØÝ�ÑÔØØ Ø%ð 0ñ 
ô 
ˆð Ðˆr�TˆzÐÐÐÕÔÐÐÐÐˆr�TÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÔ!Ð#Ð!Ð!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆ{Ñ#Ô#Ð#Õ#Ô#ˆ{Ñ#Ô#Ð#Ð#Õ#Ô#Ð!Ñ#Ô#Õ#Ô#Ð#Ñ#Ô#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#å˜+Ñ&Ô&ˆØ�KÔ Ð( DÐ(Ð  DÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø�MÔ"Ð+ eÐ+Ð" eÒ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð" eÐ+Ñ+Ô+Õ+Ô+Ð"Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�MÔ"Ð+ eÐ+Ð" eÒ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð" eÐ+Ñ+Ô+Õ+Ô+Ð"Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�JÔÐ$ 1Ð$Ð 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð 1Ð$Ñ$Ô$Õ$Ô$ÐÑ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$å�DÐ)Ô*¨^Ñ;Ñ<Ô<ˆÝð  O¸~ð  Oð  OÐZ^Ð_oÔZpð  Oð  Oð  Oð  CHð  Oð  Oð  Oð  Oñ  	Pô  	Pð  	PØÐPˆu�sŠ{ÐPÐPÐPÕPÔPÐPÐPÐPÐPˆu�sÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔPˆuÑPÔPÐPÕPÔPˆuÑPÔPÐPÐPÕPÔP�sÑ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ÑPÔPÐPÐPÐPÐPÐPÐPÐPr5   c           	      óR  — t          |dz  ddd¬¦  «        }t          |dz  dd¬¦  «        }t          |d	z  ddd¬
¦  «        }t          |dz  ddd¬¦  «        }t          |¦  «        t          |¦  «        t          |¦  «        t          |¦  «        g}d}t          ¦   «         }|dz  }	|                     |t          |	¦  «        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  }t	          j
        d¦  «        dz   d|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}|	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}}t          |	¦  «        }|d         }d}||u }|slt	          j        d|fd||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }d d!|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d"         }d#}||k    }|slt	          j        d$|fd%||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }d d!|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d&         }d'}||k    }|slt	          j        d$|fd%||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }d d!|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d(         }d)}||k    }|slt	          j        d$|fd%||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }d d!|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|d*         }||z
  }t          |¦  «        }d+}||k     }|�st	          j        d,|fd-||f¦  «        d.t          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nd.t	          j	        |¦  «        d/t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd/t	          j	        |¦  «        t	          j	        |¦  «        d0œz  }d1d2|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}x}}t!          d3|d"         › d4|d&         › d5|d*         d6›d7�¦  «         dS )8u�   
        PROBE 3A: XÃ¡c nháº­n AudioContinuityEngine chá»‘ng chá»‹u hoÃ n háº£o vá»›i clip thiáº¿u stream audio (-an) vÃ  clip cÃ¢m.
        zc1_normal.mp4gš™™™™™é?r   T)r   r   r   zc2_no_audio.mp4F)r   r   zc3_mute.mp4)r   r   r   zc4_normal.mp4ip  gš™™™™™	@zprobe_silent_engine.mp4r¡   r�   r€   r„   r†   Úok_engrˆ   zFAudioContinuityEngine must handle missing audio streams without crash!r¦   rŒ   Nr�   Ú
out_enginer�   r   r’   r“   r•   r–   rR   r&   rÔ   rÖ   r   r   r   r   rM   g      Ð?r¢   )z;%(py6)s
{%(py6)s = %(py0)s((%(py2)s - %(py3)s))
} < %(py9)sr¶   rØ   )r‰   r�   rŠ   r–   Úpy9zassert %(py11)sÚpy11z(
[PROBE 3A - Engine Concat Resilience]: ú zHz stereo, dur=z.2fz
s [PASSED])r4   r.   r   rª   r«   r¬   r­   r®   r¯   r°   rµ   r±   r²   r³   r_   r¶   r´   )r·   r¸   Úc1Úc2Úc3Úc4r¼   rØ   r¿   rÜ   rÛ   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   Úmeta_engrÇ   rÈ   Ú@py_assert4rÉ   Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12s                             r3   Ú:test_probe_03a_engine_silent_and_missing_stream_resiliencez\TestAdversarialM4AudioConcatProbe.test_probe_03a_engine_silent_and_missing_stream_resilience  sã  € õ ˜H Ñ6ÀÈ3ÐZ^Ð_Ñ_Ô_ˆÝ˜HÐ'8Ñ8À3ÐRWÐXÑXÔXˆÝ˜H }Ñ4¸sÈdÐ_cÐdÑdÔdˆÝ˜H Ñ6ÀÈ3ÐZ^Ð_Ñ_Ô_ˆå�R‘”�#˜b™'œ'¥3 r¡7¤7­C°©G¬GÐ4ˆØ ˆå&Ñ(Ô(ˆØÐ 9Ñ9ˆ
Ø×3Ò3ØÝ�
‰OŒOØØØ%ð 4ñ 
ô 
ˆð Ðgˆv˜ˆ~ÐgÐgÐgÕgÔgÐgÐgÐgÐgˆv˜ÐgÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔgˆvÑgÔgÐgÕgÔgˆvÑgÔgÐgÐgÕgÔg˜ÑgÔgÐgÐgÑgÐgÕgÔgÐgÑgÔgÐgÑgÐgÐgÐgÑgÐgÕgÕgÔgÐgÑgÔgÑgÔgÐgÐgÐgÐgÐgØÔ Ð"Ð Ð Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Õ"Ô"ˆzÑ"Ô"Ð"Ð"Õ"Ô"Ð Ñ"Ô"Õ"Ô"Ð"Ñ"Ô"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"å˜jÑ)Ô)ˆØ˜Ô$Ð,¨Ð,Ð$¨Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð$¨Ð,Ñ,Ô,Õ,Ô,Ð$Ñ,Ô,Õ,Ô,¨Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø˜Ô&Ð/¨%Ð/Ð&¨%Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø˜Ô&Ð/¨%Ð/Ð&¨%Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð&¨%Ð/Ñ/Ô/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/¨%Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø˜
Ô#Ð( qÐ(Ð# qÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð# qÐ(Ñ(Ô(Õ(Ô(Ð#Ñ(Ô(Õ(Ô( qÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÐ-Ô.ÐGÐ.°Ñ?ÐG�sÐ?Ñ@Ô@ÐGÀ4ÐGÐ@À4ÒGÐGÐGÑGÕGÔGÐGÐGÐGÐGÐ@À4ÐGÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG�sÑGÔGÐGÕGÔG�sÑGÔGÐGÐGÕGÔGÐ.ÑGÔGÐGÕGÔGÑGÔGÐGÐGÕGÔG°ÑGÔGÐGÕGÔG°ÑGÔGÐGÐGÕGÔGÐ@ÑGÔGÕGÔGÀ4ÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÐGÝð  h¸(À=Ô:Qð  hð  hÐT\Ð]jÔTkð  hð  hð  }Eð  FWô  }Xð  hð  hð  hð  hñ  	iô  	ið  	ið  	ið  	ir5   c                 ó  — t          ¦   «         }|                     dd¦  «        }t          j                             |¦  «        }t          d¦  «         t          d|› �¦  «         t          d|› �¦  «         t          d|› �¦  «         d|v r¸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}}t          ¦   «         }	t          d|	› �¦  «         t          j        }|j        }
 |
|	¦  «        }|sût          j        d¦  «        dz   dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |
¦  «        dt          j	        ¦   «         v st          j
        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}dS )u>  
        PROBE 3B [CRITICAL VULNERABILITY]:
        Kiá»ƒm chá»©ng lá»—i Ä‘Æ°á»�ng dáº«n ffprobe táº¡i production_orchestrator.py:1170.
        Biá»ƒu thá»©c `ffmpeg_exe.replace('ffmpeg', 'ffprobe')` Ä‘Ã£ biáº¿n Ä‘á»•i:
        `ffmpeg-9.0.2-full_buildinfmpeg.exe` thÃ nh `ffprobe-9.0.2-full_buildinfprobe.exe` (khÃ´ng tá»“n táº¡i!).
        Háº­u quáº£: Lá»—i FileNotFoundError bá»‹ nuá»‘t chá»­ng bá»Ÿi `except Exception: has_a = True`,
        khiáº¿n Fallback Concat luÃ´n phÃ¡n Ä‘oÃ¡n clip cÃ³ audio, dáº«n tá»›i crash `:a matches no streams` trÃªn FFmpeg.
        r1   rY   z2
[PROBE 3B - FFprobe Path Vulnerability Analysis]:z  ffmpeg_exe:        z  corrupted_ffprobe: z  Path exists?:      zffmpeg-9.0.2-full_buildFr„   r†   Úis_corrupted_path_existingrˆ   zFEmpirical proof: corrupted_ffprobe points to a non-existent directory!r¦   rŒ   Nz  canonical_ffprobe: z*get_ffprobe() points to a valid executablezd
>assert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}ÚosÚcanonical_ffprobe)r‰   r�   r‘   rŒ   rœ   )r	   Úreplacerí   Úpathr³   r´   r«   r¬   r­   r®   r¯   r°   rµ   r±   r²   r
   )r·   r¸   Ú
ffmpeg_exeÚcorrupted_ffproberì   rÀ   rÁ   rÂ   rÃ   rî   rÄ   Ú@py_assert6rÊ   s                r3   Ú5test_probe_03b_orchestrator_fallback_ffprobe_path_bugzWTestAdversarialM4AudioConcatProbe.test_probe_03b_orchestrator_fallback_ffprobe_path_bug!  s'  € õ  ‘\”\ˆ
Ø&×.Ò.¨x¸ÑCÔCÐÝ%'¤W§^¢^Ð4EÑ%FÔ%FÐ"åÐDÑEÔEÐEÝÐ2 jÐ2Ð2Ñ3Ô3Ð3ÝÐ9Ð&7Ð9Ð9Ñ:Ô:Ð:ÝÐBÐ&@ÐBÐBÑCÔCÐCð %¨
Ð2Ð2Ø16ð Ð-°Ð6ð ð ð õ ìðð ð ð Ð-°ð ñ ô ð õ äñô ð ð õ ìð .ñ ô ð õ äð .ñ ô ð ð õ äð 27ñ ô ð ð ñ ð õ ìð Yñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð õ
 (™MœMÐÝÐ9Ð&7Ð9Ð9Ñ:Ô:Ð:ÝŒwÐ^ˆwŒ~Ð^ˆ~ˆ~Ð/Ñ0Ô0Ð^Ð0Ð^Õ^Ô^Ð2^Ñ^Ô^Ð^Ñ^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�rÑ^Ô^Ð^Õ^Ô^�rÑ^Ô^Ð^Ð^Õ^Ô^ˆwÑ^Ô^Õ^Ô^ˆ~Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^Ð/Ñ^Ô^Ð^Õ^Ô^Ð/Ñ^Ô^Ð^Ð^Õ^Ô^Ð0Ñ^Ô^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^Ð^r5   c           
      óº
  ‡ — t          |dz  dd¬¦  «        }t          |dz  dd¬¦  «        }t          |¦  «        t          |¦  «        g}t          ¦   «         }|dz  }|                     |t          |¦  «        dd	d
¬¦  «         |dz  }|                     |t          |¦  «        dd	d¬¦  «         t	          |¦  «        }t	          |¦  «        }	|d         }
d}|
|z
  }t          |¦  «        }d}||k     }|sÚt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        ndt          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}x}x}x}}|	d         }
d}|
|z
  }t          |¦  «        }d}||k     }|sÚt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        ndt          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}x}x}x}}t          ¦   «         Š dt          dt           dt           dt"          dt           f
ˆ fd„} ||ddd¬ ¦  «        } ||ddd¬ ¦  «        }t%          d!¦  «         t%          d"|d#›d$�¦  «         t%          d%|d#›d&�¦  «         g }
d'}| }||k     }|}|sd(}||z
  }||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  }|
                     |¦  «         |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/t          j        |¦  «        d0œz  }d1d2|iz  }|
                     |¦  «         t          j        |
d3¦  «        i z  }t          j        d4|› d5|› d6�¦  «        d7z   d8|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
x}x}x}x}x}}dS )9uK  
        PROBE 4: Kiá»ƒm chá»©ng tÃ­nh Ä‘á»“ng bá»™ tuyá»‡t Ä‘á»‘i cá»§a lá»�i thoáº¡i / Ã¢m thanh á»Ÿ cuá»‘i timeline.
        - Shot 1 (0.0s - 2.0s): Táº§n sá»‘ tháº¥p 220Hz.
        - Shot 2 (2.0s - 4.0s): Táº§n sá»‘ cao 1000Hz (Ä‘áº¡i diá»‡n cho thoáº¡i quan trá»�ng á»Ÿ shot 2).
        - Trong Mode A: Ã‚m thanh 1000Hz cá»§a Shot 2 Báº®T BUá»˜C báº¯t Ä‘áº§u chÃ­nh xÃ¡c táº¡i timestamp 2.0s (Â±0.03s do micro-fade).
        - Trong Mode B (crossfade=1.0s): Ã‚m thanh 1000Hz bá»‹ kÃ©o vá»� báº¯t Ä‘áº§u táº¡i timestamp 1.0s (sá»›m 1.0s trÆ°á»›c khi chuyá»ƒn cáº£nh video!).
        zdialogue_s1.mp4r   éÜ   r~   zdialogue_s2.mp4iè  zprobe_sync_mode_a.mp4r—   Fr�   r€   zprobe_sync_mode_b.mp4r   rM   g      @r¡   r¢   )z<%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} < %(py10)sr¶   )r‰   r�   r‘   rœ   Úpy10zassert %(py12)sÚpy12NÚ
video_fileÚstartr   r   r   c                 óŽ  •— ‰dt          |¦  «        dt          |¦  «        dt          | ¦  «        dd|› d�ddd	g}t          j        |d
d
¬¦  «        }|j                             ¦   «         D ]Y}d|v rS	 t          |                     d¦  «        d                              ¦   «         d         ¦  «        c S # t          $ r Y ŒUw xY wŒZdS )Nz-ssr(   r   re   zbandpass=f=z:width_type=h:w=50,volumedetectr   rf   rg   Trh   zmean_volume:ri   r   g     ÀXÀ)r.   r/   r0   rk   rl   rW   rm   Ú	Exception)rù   rú   r   r   r2   rZ   rq   r1   s          €r3   Úextract_sample_volumezvTestAdversarialM4AudioConcatProbe.test_probe_04_dialogue_cut_alignment_at_timeline_tail.<locals>.extract_sample_volumeY  sê   ø€ à˜�s 5™zœz¨4µ°X±´ÀÅcÈ*ÁoÄoØÐJ TÐJÐJÐJØ�f˜cðˆCõ
 ”. °TÀÐEÑEÔEˆCØœ
×-Ò-Ñ/Ô/ð ð �Ø! TÐ)Ð)ðÝ$ T§Z¢Z°Ñ%?Ô%?ÀÔ%B×%HÒ%HÑ%JÔ%JÈ1Ô%MÑNÔNÐNÐNÐNøÝ$ð ð ð Ø˜ðøøøð *ð
 �5s   Á2?B4Â4
CÃ Cg333333ó?gš™™™™™Ù?)rú   r   r   z4
[PROBE 4 - Dialogue Cut Alignment at t=1.2s..1.6s]:z7  Mode A (Boundary Smoothing) 1000Hz Volume at t=1.4s: z.1fz dB (Clean separation)z7  Mode B (Acrossfade)         1000Hz Volume at t=1.4s: z dB (Audio leaked prematurely!)g     €A@g      $@)z%(py2)s < -%(py5)sÚ
vol_a_1000)r�   rŒ   z%(py8)sÚpy8)z %(py10)s < (%(py12)s - %(py14)s)Ú
vol_b_1000)r÷   rø   Úpy14z%(py17)sÚpy17ri   z<Mode A must prevent premature audio leak before cut! Vol A: zdB vs Vol B: ÚdBz
>assert %(py20)sÚpy20)r4   r.   r   rª   r_   r¶   r«   r¬   r­   r®   r¯   r°   r±   r²   r	   r   rW   rX   r´   rn   Ú_format_booloprµ   )!r·   r¸   Ús1Ús2r¼   r¿   Úout_aÚout_brË   rÆ   rÁ   rÄ   rÉ   ró   Ú@py_assert9ræ   Ú@py_format11Ú@py_format13rý   rþ   r   rå   rÇ   Ú@py_assert13Ú@py_assert15Ú@py_assert11rÈ   Ú@py_format9Ú@py_format16Ú@py_format18Ú@py_format19Ú@py_format21r1   s!                                   @r3   Ú5test_probe_04_dialogue_cut_alignment_at_timeline_tailzWTestAdversarialM4AudioConcatProbe.test_probe_04_dialogue_cut_alignment_at_timeline_tail>  sº  ø€ õ ˜HÐ'8Ñ8À3ÈSÐQÑQÔQˆÝ˜HÐ'8Ñ8À3ÈTÐRÑRÔRˆå�R‘”�#˜b™'œ'Ð"ˆÝ&Ñ(Ô(ˆàÐ2Ñ2ˆØ×*Ò*¨5µ#°e±*´*ÈCÐ`eð  mAÐ*ñ  	Bô  	Bð  	BàÐ2Ñ2ˆØ×*Ò*¨5µ#°e±*´*ÈCÐ`eÐlxÐ*ÑyÔyÐyå˜EÑ"Ô"ˆÝ˜EÑ"Ô"ˆàÐ+Ô,Ð9¨sÐ9Ð,¨sÑ2Ð9�sÐ2Ñ3Ô3Ð9°cÐ9Ð3°cÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð3°cÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�sÑ9Ô9Ð9Õ9Ô9�sÑ9Ô9Ð9Ð9Õ9Ô9Ð,Ñ9Ô9Õ9Ô9¨sÑ9Ô9Õ9Ô9Ð3Ñ9Ô9Õ9Ô9°cÑ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¨sÐ9Ð,¨sÑ2Ð9�sÐ2Ñ3Ô3Ð9°cÐ9Ð3°cÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð3°cÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�sÑ9Ô9Ð9Õ9Ô9�sÑ9Ô9Ð9Ð9Õ9Ô9Ð,Ñ9Ô9Õ9Ô9¨sÑ9Ô9Õ9Ô9Ð3Ñ9Ô9Õ9Ô9°cÑ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å‘”ˆð	­dð 	½5ð 	ÍEð 	ÕY\ð 	Õafð 	ð 	ð 	ð 	ð 	ð 	ð +Ð*¨5¸ÀcÐPTÐUÑUÔUˆ
Ø*Ð*¨5¸ÀcÐPTÐUÑUÔUˆ
åÐFÑGÔGÐGÝÐnÈ
ÐnÐnÐnÐnÑoÔoÐoÝÐwÈ
ÐwÐwÐwÐwÑxÔxÐxð	
ð 	
˜Tð 	
˜T˜Eð 	
ˆz˜EÒ!ð 	
ð 	
ð 	
ð 	
ð 	
¸tð 	
°*¸tÑ2Cð 	
 ZÐ2CÒ%Cð 	
ð 	
ð 	
ð 	
ñ 	
õ 	
ìð	
ð 	
ð 	
ð 	
ˆz˜Eð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð ñ 	
ô 	
ð 	
õ 	
ä 	ð ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð "ñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ç	‚6ð	
á	„6€6ð	
ð 	
õ 	
ìð	
ð 	
ð 	
ð 	
 ZÐ2Cð 	
ñ 	
ô 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð &0ñ 	
ô 	
ð 	
õ 	
ä 	ð &0ñ 	
ô 	
ð 	
ð 	
ð 	
õ 	
ä	ñ	
ô 	
ð 	
ð 	
õ 	
ìð 3=ñ 	
ô 	
ð 	
õ 	
ä 	ð 3=ñ 	
ô 	
ð 	
ð 	
õ 	
ä 	ð @Dñ 	
ô 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñ 	
ð 	
ð 	
ç	‚6ð	
á	„6€6õ	
ìð	
ð 	
ñ 	
ô 	
ð 	
ñ 	
ð 	
õ 	
ìð sÈ:ÐrÐrÐdnÐrÐrÐrñ	
ô 	
ð 	
ñ 	
ð 	
ð 	
ð 	
ñ 	
ð 	
õ 	
õ 	
ìð	
ñ 	
ô 	
ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r5   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÌ   rÙ   rê   rô   r  © r5   r3   rx   rx   †   sw   € € € € € Ø[Ð[ðOið Oið Oiðb%Qð %Qð %QðNið ið ið@_ð _ð _ð:3
ð 3
ð 3
ð 3
ð 3
r5   rx   Ú__main__r8   z-s)r   r   r   TFr   r   )r`   ra   )+r  Úbuiltinsr­   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter«   rí   Úsysr:   ÚmathÚshutilr/   Úpathlibr   Útypingr   r   r   ÚpytestÚ__file__Úresolver+   ÚPROJECT_ROOTÚPIPELINE_DIRr.   rð   ÚinsertÚaudio_continuity_enginer   r	   r
   Úproduction_orchestratorÚporW   rX   Úboolr4   r_   rv   rx   r  Úmainr  r5   r3   ú<module>r0     su  ðð
ð 
ð € € € € € € € € € € € € €	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€àˆt�H‰~Œ~×%Ò%Ñ'Ô'Ô.Ô5€ØÐ6Ñ6€Ø€3€|ÑÔ˜CœHÐ$Ð$Ø„H‡O‚O�A�s�s˜<Ñ(Ô(Ñ)Ô)Ð)à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ $Ð $Ð $Ð $ð
 ØØØØØØð'ð 'Øð'àð'ð ð'ð ð	'ð
 ð'ð ð'ð ð'ð ð'ð 
ð'ð 'ð 'ð 'ðT˜4ð  D¨¨c¨¤Nð ð ð ð ð<ð  Dð ¸5ð ÐY\ð Ðkpð ð ð ð ð8k
ð k
ð k
ð k
ð k
ñ k
ô k
ð k
ð\ ˆzÒÐØ€F„K�˜4 Ð&Ñ'Ô'Ð'Ð'Ð'ð Ðr5   