o
    ±§°ir  ã                   @  s®   d Z ddlmZ ddlZddlm  mZ ddl	Z	ddl
mZ ddlZddlZddlmZ ddlmZmZ d d!dd„Zd d"dd„Zd#dd„Zd$dd„Zd$dd„Zd$dd„ZdS )%z"Tests for raw-tar recovery loader.é    )ÚannotationsN)ÚPath©Úpolish_segment)Úload_recover_segmentsÚreplay_segment_idé€>  ÚsrÚintÚreturnú
np.ndarrayc                 C  s€   d}t jd|t| | ƒdd}dt  dt j d | ¡  t j¡}dD ]}t||  ƒ}|td	|  ƒ }|||…  d
9  < q#|S )zJCreate a long deterministic signal with silence valleys for stable splits.g      :@r   F)Úendpointg      Ð?é   éÜ   )g       @g      0@g      à?g-Cëâ6?)ÚnpÚlinspacer
   ÚsinÚpiÚastypeÚfloat32)r	   Ú
duration_sÚtÚaudioÚsilence_at_sÚstartÚend© r   ú5/home/ubuntu/transcripts/tests/test_recover_loader.pyÚ_make_split_audio   s   $r   Útmp_pathr   Úvideo_idÚstrÚsegment_namer   c                 C  sR   | | }|d }|j ddd |d  t |ddœ¡¡ || }t |||¡ |S )NÚsegmentsT)ÚparentsÚexist_okzmetadata.jsonÚte)r    Úlanguage)ÚmkdirÚ
write_textÚjsonÚdumpsÚsfÚwrite)r   r    r"   r   r	   Ú	video_dirÚsegments_dirÚraw_pathr   r   r   Ú_write_raw_video   s   r1   r0   Úlistc                 C  s   dd„ t | ƒD ƒS )Nc                 S  s   g | ]}|j js|‘qS r   )Ú	trim_metaÚ	discarded©Ú.0Úsegr   r   r   Ú
<listcomp>*   s    z#_valid_children.<locals>.<listcomp>r   )r0   r   r   r   Ú_valid_children)   s   r9   c                 C  sZ  d}d}t | ||tƒ ƒ}t|ƒ}t|ƒ}d}||k}|sat d|fd||f¡dt ¡ v s1t t¡r6t 	t¡nddt ¡ v sBt |¡rGt 	|¡ndt 	|¡t 	|¡dœ }d	d
|i }	t
t |	¡ƒ‚d  } }}g }
|d d… D ]%}|
 t|jj|jj|jjƒd|jj› d|jj› dddddddœ	¡ qo|
d d }t| ||
|hd}|j}g }||k}|sãt d|fd||f¡dt ¡ v sÄt |¡rÉt 	|¡ndt 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}|j}|g}||k}|s,t d|fd||f¡dt ¡ v st |¡rt 	|¡ndt 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}|j}||v }|st d|fd ||f¡d!t ¡ v sSt |¡rXt 	|¡nd!dt ¡ v sft |¡rkt 	|¡ndt 	|¡d"œ }d#d$|i }t
t |¡ƒ‚d  }}d%d&„ |jD ƒ}|g}||k}|sºt d|fd'||f¡t 	|¡t 	|¡d(œ }d#d$|i }t
t |¡ƒ‚d  } }}|jd) }|j}d*}||k}|søt d|fd+||f¡t 	|¡t 	|¡t 	|¡d,œ }d	d
|i }	t
t |	¡ƒ‚d  } } }}|j}|s)d-dt ¡ v st |¡rt 	|¡ndt 	|¡d.œ }t
t |¡ƒ‚d }d S )/NÚvideo_split_testzSPEAKER_00_0000_0.00-26.00.flacé   ©ú>=©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚvalid©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8r   ztext-ztagged-r&   gÍÌÌÌÌÌì?ÚneutralÚconversationalÚnormalÚ )	Úsegment_fileÚtranscriptionÚtaggedÚdetected_languageÚquality_scoreÚspeaker_emotionÚspeaker_styleÚspeaker_paceÚspeaker_accenté   rL   )Útarget_segment_ids©ú==©z6%(py2)s
{%(py2)s = %(py0)s.missing_tx_ids
} == %(py5)sÚresult©rB   Úpy2Úpy5úassert %(py7)sÚpy7©z6%(py2)s
{%(py2)s = %(py0)s.matched_tx_ids
} == %(py5)s©Úin)z:%(py0)s in %(py4)s
{%(py4)s = %(py2)s.replayed_regen_ids
}Ú	target_id©rB   r\   Úpy4úassert %(py6)srE   c                 S  s   g | ]}|j ‘qS r   )rL   r5   r   r   r   r8   R   s    zEtest_recover_loader_matches_requested_split_child.<locals>.<listcomp>)z%(py1)s == %(py4)s)rC   re   r   ztext-1)z<%(py3)s
{%(py3)s = %(py1)s.gemini_transcription
} == %(py6)s)rC   rD   rE   ú3assert %(py2)s
{%(py2)s = %(py0)s.extra_regen_ids
}©rB   r\   )r1   r   r9   r?   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚappendr   r3   Úoriginal_fileÚ	was_splitÚsplit_indexr   Úmissing_tx_idsÚmatched_tx_idsÚreplayed_regen_idsr#   Úgemini_transcriptionÚextra_regen_ids)r   r    Úparent_filer0   r@   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9Útx_rowsr7   rc   rZ   Ú@py_assert1Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_format5Ú@py_assert0Ú@py_format3r   r   r   Ú1test_recover_loader_matches_requested_split_child-   sF   ®ý
óüŠ’¦v€Zrˆ   c                 C  sô  d}d}t | ||tƒ ƒ}t|ƒ}|s/dddt ¡ v st |¡r$t |¡ndi }tt 	|¡ƒ‚t
|d jj|d jj|d jjƒ}|› d}|ddd	d
dœ|ddd	d
dœg}t| ||ƒ}	|	j}
||
v }|s¦t d|fd||
f¡dt ¡ v szt |¡rt |¡nddt ¡ v s‹t |	¡rt |	¡ndt |
¡dœ }dd|i }tt 	|¡ƒ‚d  }}
|	j}
||
v }|sôt d|fd||
f¡dt ¡ v sÈt |¡rÍt |¡nddt ¡ v sÙt |	¡rÞt |	¡ndt |
¡dœ }dd|i }tt 	|¡ƒ‚d  }}
d S )NÚvideo_missing_testzSPEAKER_00_0001_0.00-26.00.flaczassert %(py0)srB   r@   r   Ú_split99Úrealr&   çš™™™™™é?©rL   rM   rN   rO   rP   Úmissingra   )z6%(py0)s in %(py4)s
{%(py4)s = %(py2)s.matched_tx_ids
}Úreal_idrZ   rd   rf   rE   )z6%(py0)s in %(py4)s
{%(py4)s = %(py2)s.missing_tx_ids
}Úfake_id)r1   r   r9   rk   rl   ri   rm   rn   ro   rp   r   r3   rr   rs   rt   r   rv   rj   ru   )r   r    rz   r0   r@   Ú@py_format1r   r   r€   rZ   r‚   r   r…   r~   r   r   r   Ú>test_recover_loader_reports_historical_id_missing_after_replayX   s6   >


ý
ûûøœ r’   c                 C  sj  d}d}t | ||tƒ ƒ}t|ƒ}t|ƒ}d}||k}|sat d|fd||f¡dt ¡ v s1t t¡r6t 	t¡nddt ¡ v sBt |¡rGt 	|¡ndt 	|¡t 	|¡dœ }d	d
|i }	t
t |	¡ƒ‚d  } }}t|d jj|d jj|d jjƒdddddœg}
t| ||
tƒ dd}|j}g }||k}|sÉt d|fd||f¡dt ¡ v sªt |¡r¯t 	|¡ndt 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}|j}g }||k}|st d|fd||f¡dt ¡ v sðt |¡rõt 	|¡ndt 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}|j}g }||k}|sWt d|fd||f¡dt ¡ v s8t |¡r=t 	|¡ndt 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}|j}|s†ddt ¡ v sqt |¡rvt 	|¡ndt 	|¡dœ }t
t |¡ƒ‚d }|j}|s±ddt ¡ v sœt |¡r¡t 	|¡ndt 	|¡dœ }t
t |¡ƒ‚d }d S )NÚvideo_replay_all_testzSPEAKER_00_0002_0.00-26.00.flacr   r<   r>   r?   r@   rA   rF   rG   r   Úkeptr&   rŒ   r   T)rV   Úreplay_all_tx_parentsrW   )z0%(py2)s
{%(py2)s = %(py0)s.segments
} == %(py5)srZ   r[   r^   r_   r`   rY   z6assert %(py2)s
{%(py2)s = %(py0)s.replayed_regen_ids
}rh   rg   )r1   r   r9   r?   ri   rj   rk   rl   rm   rn   ro   rp   r   r3   rr   rs   rt   r   Úsetr#   rv   ru   rw   ry   )r   r    rz   r0   r@   r{   r|   r}   r~   r   r€   rZ   r   r‚   rƒ   r„   r‡   r   r   r   Ú:test_recover_loader_replays_all_parents_when_targets_empty~   s8   ®


ý÷ÿûŠŒVZr—   )r   )r	   r
   r   r   )r   r   r    r!   r"   r!   r   r   r	   r
   r   r   )r0   r   r   r2   )r   r   )Ú__doc__Ú
__future__r   Úbuiltinsrk   Ú_pytest.assertion.rewriteÚ	assertionÚrewriteri   r*   Úpathlibr   Únumpyr   Ú	soundfiler,   Úsrc.audio_polishr   Úvalidations.recover_loaderr   r   r   r1   r9   rˆ   r’   r—   r   r   r   r   Ú<module>   s    "


+&