ó
    ¡ü8js?  ã                  óL  • S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	J
r
Jr  SSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SS	KJrJrJrJrJr  SS
KJr  SSKJrJ r J!r!J"r"  \" \#5      RI                  5       RJ                  S   r&\&S-  S-  S-  r'\&S-  S-  S-  r(\&S-  S-  r)\&S-  S-  r*\&S-  S-  r+\&S-  S-  S-  S-  r,\RZ                  " S5      r.S"S jr/S#S jr0\Rb                  " 5       S$S%S jj5       r2 S&       S'S jjr3  S(S jr4S)S jr5S  r6\7S!:X  a  \6" 5         gg)*uY  V3 end-to-end pipeline test:

    text  â†’  KlueTeacher  â†’  (emotion argmax, VAD)  â†’  cond
    audio â†’  mel
                                            â†“
                          V3 face model + locked post-processing
                                            â†“
                            (T, 52) ARKit blendshapes
                                            â†“
                         <sid>_e2e_dataset.json (viewer)

Writes alongside the existing `_dataset` (teacher GT) and `_pred_dataset`
(V3 with GT cond) entries so the viewer dropdown shows all three for
each scenario â€” lets us A/B which step degrades.

Usage:
    PYTHONPATH=. python3 -m models.v3_face.infer_e2e         --ckpt models/v3_face/checkpoints/best_expression.pt         -s long_001 long_100 long_046

    PYTHONPATH=. python3 -m models.v3_face.infer_e2e --all-viewer
é    )ÚannotationsN)ÚPath)ÚDictÚListÚOptional)Úgaussian_filter1d)ÚAutoTokenizer)ÚARKIT_52_NAMES)ÚEMOTION_LABELSÚEMOTION_TO_IDXÚFPSÚmel_featuresÚlookup_audio_for_scenario)ÚKlueTeacherForEmotionVADé   )Úcrisp_mouthÚsmooth_browsÚinject_blinksÚ
load_modelé   ÚcheckpointsÚklue_teacher_clean_ctx2zbest.ptÚ	tokenizerÚdataÚaudio_previewÚ
viewer_e2eÚemotionÚmodelsÚv3_facezbest_expression.ptz^(daily_.+)_t(\d+)$c           
     óN  • [         R                  " XSS9n[        U[        5      (       a  UR	                  S0 5      O0 n[
        R                  " UR	                  SS5      5      nUR                  SSS/05        [        UR	                  SS5      UR	                  S	S
5      UR	                  SS5      S9n[        U5      UR                  R                  R                  :w  a$  UR                  R                  [        U5      5        UR                  U5      R                  5       n[        U[        5      (       a"  UR	                  SUR	                  SU5      5      OUnUR!                  5        VV	s0 s H)  u  p‰UR#                  SS5      R#                  SSS5      U	_M+     nnn	UR%                  USS9u  p«U
(       d  U(       a*  ['        S[        U
5       S[        U5       SU
SS  S35        ['        SUR)                  5       S-  S SU  S[        U5       S35        Xe4$ s  sn	nf )u7  Load the KLUE-RoBERTa emotion+VAD teacher and its tokenizer.

The teacher was trained with 2 extra special tokens added to the base
klue/roberta-base vocab (32000 â†’ 32002). We load the tokenizer first to
determine the actual vocab size, then resize the model's embeddings
before loading the saved state_dict.
F)Úmap_locationÚweights_onlyÚconfigÚ
model_namezklue/roberta-baseÚadditional_special_tokensz[SELF]z[OTHER]Únum_emotionsé   Úvad_dimé   )r$   r&   r(   ÚmodelÚmodel_state_dictzmodule.Ú zmodel.r   )Ústrictz[teacher] state_dict load: z
 missing, z unexpected (first 3 missing: NÚ)z[teacher] loaded g    €„.Aú.1fzM params from z (vocab=)ÚtorchÚloadÚ
isinstanceÚdictÚgetr	   Úfrom_pretrainedÚadd_special_tokensr   ÚlenÚbackboner#   Ú
vocab_sizeÚresize_token_embeddingsÚtoÚevalÚitemsÚreplaceÚload_state_dictÚprintÚ
num_params)Ú	ckpt_pathÚtokenizer_dirÚdeviceÚckptÚcfgr   ÚteacherÚstateÚkÚvÚmissingÚ
unexpecteds               Ú\/home/ubuntu/service/kemix-engine/package/face/animasync-face-v3/models/v3_face/infer_e2e.pyÚload_teacherrN   >   s  € ô �:Š:�iÀ5ÑI€DÜ$.¨t´T×$:Ñ$:ˆ$�(‰(�8˜RÔ
 À€Cô
 ×-Ò-Ø�‰�Ð1Ó2ó€Ið × Ñ Ø	$ x°Ð&;Ð<ôô 'Ø—7‘7˜<Ð)<Ó=Ø—W‘W˜^¨RÓ0Ø—‘˜	 1Ó%ñ€Gô ˆ9ƒ~˜×)Ñ)×0Ñ0×;Ñ;Ó;Ø×Ñ×0Ñ0´°Y³Ô@Ø�j‰j˜Ó ×%Ñ%Ó'€Gô �dœD×!Ñ!ð �H‰H�W˜dŸh™hÐ'9¸4Ó@ÔAØ'+ð 
ð Ÿ™œô(Ú&‘�ð �Y‰Y�y "Ó%×-Ñ-¨h¸¸AÓ>ÀÒAÙ&ð 
ñ (à!×1Ñ1°%ÀÐ1ÐFÑ€GÞ–*ÜÐ+¬C°«L¨>¸Ü�Z“Ð!Ð!?ÀÈÈÀ¸}ÈAðOô 	Pä	Ð˜g×0Ñ0Ó2°3Ñ6°sÐ;¸>È)Èð UÜ˜	“NÐ# 1ð&ô 'àÐÐùó(s   Å10H!c                óž  • S GH"  nX-  nUR                  5       (       d  M  UR                  5        nU H1  n[        R                  " U5      nUS   U :X  d  M$  Us  sSSS5        s  $    SSS5        [        R                  U 5      nU(       d  M�  UR                  5        nU Hv  n[        R                  " U5      nUS   UR                  S5      :X  d  M3  [        UR                  S5      5      nU UR                  S5      U/US   U   /S.s  sSSS5        s  $    SSS5        GM%     g! , (       d  f       NÇ= f! , (       d  f       GMI  = f)z¹Locate a scenario across the three split JSONL files. Returns the
parsed dict; for daily_*_t<i> splits, synthesizes a single-turn scenario
so audio lookup reroutes via _source_* fields.)zseed_train_final.jsonlzseed_val.jsonlzseed_test.jsonlÚscenario_idNr   r   Úturns)rP   Ú_source_scenario_idÚ_source_turn_indicesrQ   )ÚexistsÚopenÚjsonÚloadsÚSPLIT_REÚmatchÚgroupÚint)	ÚsidÚemotion_dirÚfnameÚpÚfÚlineÚrowÚmÚtis	            rM   Úfind_scenariore   i   s  € ô QˆØÑˆØ�x‰x�z‰zÙØ�V‰VŒX˜Û�Ü—j’j Ó&�Ø�}Ñ%¨Õ,Ø‘J÷	 ‹XÙ÷ ô
 �N‰N˜3Óˆßˆ1Ø—‘”˜QÛ�DÜŸ*š* TÓ*�CØ˜=Ñ)¨Q¯W©W°Q«ZÕ7Ü  §¡¨£›_˜à+.Ø34·7±7¸1³:Ø57°DØ&)¨'¡l°2Ñ&6Ð%7ñ	 ñ ÷ “Ù÷ ’ñ Qð, ÷% �Xú÷ —ús/   ²#D+ÁD+Á(D+Â 2D<Ã9D<ÄD<Ä+
D9	Ä<
E	c                óš  • U" USSUSS9R                  U5      nU " US   US   5      nUS   n[        R                  " USS9R                  5       R	                  5       nUR                  SS9R                  5       R	                  5       n	U	 V
s/ s H  n
[        U
   PM     nn
US	   R                  5       R	                  5       nX¸U4$ s  sn
f )
zcRun KlueTeacher on a batch of turn texts. Returns (argmax_emotions,
full_probs (N,16), vads (N,3)).TÚpt)ÚpaddingÚ
truncationÚ
max_lengthÚreturn_tensorsÚ	input_idsÚattention_maskÚemotion_logitséÿÿÿÿ)ÚdimÚvad)r;   r0   ÚsoftmaxÚcpuÚnumpyÚargmaxr   )rG   r   ÚtextsrD   rj   ÚencÚoutÚlogitsÚprobsÚpred_idxÚiÚpred_emotionsÚ	pred_vadss                rM   Úteacher_predictr   †   sÎ   € ñ �E 4°DØ)¸$ñ@ß@BÁÀ6Ã
ð á
�#�kÑ" CÐ(8Ñ$9Ó
:€CØÐ!Ñ"€FÜ�MŠM˜& bÑ)×-Ñ-Ó/×5Ñ5Ó7€EØ�}‰} ˆ}Ð$×(Ñ(Ó*×0Ñ0Ó2€HÙ08Ó9²¨1”^ AÔ&±€MÐ9Ø�E‘
—‘Ó ×&Ñ&Ó(€IØ Ð*Ð*ùò :s   ÂCc                ó¤  • [        U5      n[        R                  " US4[        R                  S9n[        R                  " US4[        R                  S9nSn[	        XU5       HR  u  p‰n
[
        R                  " US5      nSXWXz-   2U4'   [        R                  " U	[        R                  S9XgXz-   & Xz-  nMT     US:”  a_  [        U5      S:”  aP  [        XcSSS9R                  [        R                  5      n[        XSSSS9R                  [        R                  5      n[        R                  " XV/S	S
9R                  [        R                  5      $ )uj  Build per-frame (T, 19) cond from teacher per-turn predictions.
Mirrors data_pipeline.py: hard one-hot emotion + 3-D VAD per turn, then
cross-turn Gaussian smoothing (Ïƒ=30 frames) on both. V3 was trained on
this exact shape of cond signal, so feeding it the same shape (just
with teacher predictions instead of GT labels) is the apples-to-apples
pipeline test.
r'   )Údtyper)   r   ç      ð?r   Únearest)ÚsigmaÚaxisÚmodero   ©r…   )ÚsumÚnpÚzerosÚfloat32Úzipr   r4   Úasarrayr7   r   ÚastypeÚconcatenate)Úper_turn_emotionsÚper_turn_vadsÚturn_TsÚvad_smooth_sigmaÚn_totalÚall_emosÚall_vadsÚcursorÚemorq   ÚTÚidxs               rM   Úbuild_cond_smoothedr›   •   s  € ô �'‹l€GÜ�xŠx˜ "˜¬R¯Z©ZÑ8€HÜ�xŠx˜ !˜¬B¯J©JÑ7€HØ€FÜÐ,¸WÖE‰ˆ�!Ü× Ò   aÓ(ˆØ+.ˆ˜™
Ð" CÐ'Ñ(Ü&(§j¢j°¼B¿J¹JÑ&Gˆ˜™
Ð#Ø‰Šñ	 Fð
 ˜!Ó¤ G£¨qÓ 0Ü$ XØ*+°)ñ=ß=C¹VÄBÇJÁJÓ=Oð 	ä$ XØ*+°)ñ=ß=C¹VÄBÇJÁJÓ=Oð 	ä�>Š>˜8Ð.°RÑ8×?Ñ?ÄÇ
Á
ÓKÐKó    c                óZ  • [        XR                  5      nUc  [        SU  S35        g [        XvR                  5      n/ n	/ n
/ n[        [        US   U5      5       HË  u  nu  pÞUR                  SS5      R                  5       nU(       a  Ub  UR                  5       (       d  MI  [        R                  " [        U5      SSS9u  nn[        U5      S	:  a  M|  [        UU[        S
9nU	R!                  U5        U
R!                  UR"                  S   5        UR!                  U5        MÍ     U(       d  [        SU  S35        g U Vs/ s H  nUS   PM
     nn[%        X4UU5      u  nnn['        UUU
UR(                  S9n[*        R,                  " U	SS9R/                  [*        R0                  5      n[2        R4                  " U5      R7                  S5      R9                  U5      n[2        R4                  " U5      R7                  S5      R9                  U5      n[2        R:                  " 5          U" UU5      R=                  S5      R?                  5       RA                  5       R/                  [*        R0                  5      nS S S 5        URB                  (       a5  [E        WURF                  URH                  URJ                  URL                  S9nURN                  (       a*  [Q        WURR                  URT                  URV                  S9nURX                  (       a   [[        WU UR\                  UR^                  S9n/ n[        [        UUUU5      5       HÃ  u  nu  nnnn [*        R`                  " U 5      SS  S S S2    V!s/ s H  n![b        U!   [e        U U!   5      S.PM     n"n!UR!                  UUUR                  SS5      URg                  5       [i        UR                  S/ SQ5      5      UR                  SS5      UR                  SS5      U"S.5        MÅ     U  S3n#U#S[k        WR"                  S   5      [l        U[*        Rn                  " US5      Rg                  5       S.n$URp                  U# S3-  n%U%Rs                  [t        Rv                  " U$S S!95        URp                  U  S"3-  n&URp                  U# S#3-  n'U'R                  5       (       d  U'Ry                  5       (       a  U'R{                  5         U&R                  5       (       a  U'R}                  U&R~                  5        O[        S$U  S%35        [�        S& [        UU5       5       5      n([        S'U  S(U( S)[        U5       S*UR"                  S    35        U U#U([        U5      S+.$ s  snf ! , (       d  f       GN= fs  sn!f ),Nu     âœ— z: scenario not foundrQ   Útextr,   i€>  T)ÚsrÚmonog      ™@)rŸ   Úfpsr   z: no valid turns)r“   r‡   )Ú	thresholdÚscaleÚpre_smooth_sigmaÚmouth_close_sigma)Ú
min_cutoffÚbetaÚd_cutoff)rP   Úmean_interval_sÚexpressive_capéýÿÿÿro   )ÚlabelÚprobr   Úneutralrq   )r   r   r   Úspeaker)Úturn_idxr   Ú
gt_emotionrq   Úgt_vadrž   r¯   Útop3_emotionsÚ_e2e_dataseté   é   )rP   r¡   Ú
num_framesÚnamesrQ   Úblendshapesz.jsonF)Úensure_asciiz_dataset.mp3z.mp3z  ! z,: teacher mp3 missing; e2e will play silent.c              3  óZ   #   • U  H!  u  pUR                  S S5      U:X  d  M  Sv •  M#     g7f)r   r®   r   N)r4   )Ú.0Útr˜   s      rM   Ú	<genexpr>Ú#predict_and_save.<locals>.<genexpr>  s.   é € ð 9Ò"=™˜Ø—U‘U˜9 iÓ0°CÑ7÷ ‘!Ò"=ùs   ‚+¢	+u     âœ“ z  emotion match Ú/z	  frames=)r\   Únew_baseÚmatchesÚtotal)Are   r]   r@   r   Ú	audio_dirÚ	enumeraterŒ   r4   ÚstriprT   Úlibrosar1   Ústrr7   r   r   ÚappendÚshaper   r›   r“   r‰   r�   rŽ   r‹   r0   Ú
from_numpyÚ	unsqueezer;   Úno_gradÚsqueezers   rt   Úcrispr   Úcrisp_thresholdÚcrisp_scaleÚcrisp_sigmaÚcrisp_mouthclose_sigmaÚbrow_smoothr   Úbrow_min_cutoffÚ	brow_betaÚbrow_d_cutoffÚ
add_blinksr   Úblink_intervalÚblink_expressive_capÚargsortr   ÚfloatÚtolistÚlistr[   r
   ÚroundÚ
viewer_dirÚ
write_textrV   ÚdumpsÚ
is_symlinkÚunlinkÚ
symlink_toÚnamerˆ   ))r\   r*   rF   rG   r   rD   ÚargsÚscenÚaudio_pathsÚ	turn_melsr’   Úvalid_turnsrd   ÚturnÚaprž   ÚwavrŸ   Úmelr½   rv   Ú	pred_emosÚ
pred_probsr~   ÚcondÚaudioÚaudio_tÚcond_tÚpredÚ
turns_metar˜   rq   rz   r|   Útop3rÁ   Úviewer_jsonÚout_jsonÚteacher_mp3Úpred_mp3rÂ   s)                                            rM   Úpredict_and_saverý   ±   s  € ä˜×.Ñ.Ó/€DØ�|Ü��s�eÐ/Ð0Ô1¸$ä+¨D·.±.ÓA€Kà"$€IØ€GØ €KÜ#¤C¨¨W©°{Ó$CÖD‰ˆ‰JˆTØ�x‰x˜ Ó#×)Ñ)Ó+ˆÞ�r‘z¨¯©¯©ÙÜ—,’,œs 2›w¨5°tÑ<‰ˆˆRÜˆs‹8�kÓ!ÙÜ˜3 2¬3Ñ/ˆØ×Ñ˜ÔØ�‰�s—y‘y ‘|Ô$Ø×Ñ˜4Ö ñ Eö Ü��s�eÐ+Ð,Ô-°dá +Ó,¢˜1ˆQˆvŒY¡€EÐ,Ü'6Ø˜E 6ó(Ñ$€Iˆz˜9ô ˜y¨)°WØ04×0EÑ0EñG€Dä�NŠN˜9¨1Ñ-×4Ñ4´R·Z±ZÓ@€Eä×Ò˜uÓ%×/Ñ/°Ó2×5Ñ5°fÓ=€GÜ×Ò˜dÓ#×-Ñ-¨aÓ0×3Ñ3°FÓ;€FÜ	�Š�Ù�W˜fÓ%×-Ñ-¨aÓ0×4Ñ4Ó6×<Ñ<Ó>×EÑEÄbÇjÁjÓQˆ÷ 
ð ‡z‡zÜ˜4¨4×+?Ñ+?Ø!%×!1Ñ!1Ø,0×,<Ñ,<Ø-1×-HÑ-HñJˆð ××Ü˜D¨T×-AÑ-AØ!%§¡¸$×:LÑ:LñNˆà‡‡Ü˜T¨sØ-1×-@Ñ-@Ø,0×,EÑ,EñGˆð €JÜ$-Ü�˜Y¨	°:Ó>ö%@Ñ ˆÑ ˆQ��S˜%ô —Z’Z Ó& r sÐ+©D¨b¨DÒ1ó
â1�ô % QÑ'´°u¸Q±x³ÔAÙ1ð 	ð 
ð 	×ÑØØØŸ%™% 	¨9Ó5Ø—:‘:“<Ü˜1Ÿ5™5 ª	Ó2Ó3Ø—E‘E˜& "Ó%Ø—u‘u˜Y¨Ó+Ø!ñ	
ö 		ñ%@ð" ��lÐ#€HàØÜ˜$Ÿ*™* Q™-Ó(ÜØÜ—x’x  aÓ(×/Ñ/Ó1ñ€Kð �‰ H :¨UÐ!3Ñ3€HØ×ÑœŸ
š
 ;¸UÑCÔDà—/‘/ s e¨<Ð$8Ñ8€KØ�‰ H :¨TÐ!2Ñ2€HØ‡�×Ñ˜H×/Ñ/×1Ñ1Ø�‰ÔØ×Ñ×ÑØ×Ñ˜K×,Ñ,Õ-ä��S�EÐEÐFÔGäñ 9¤# k°9Ô"=ó 9ó 9€Gä	ˆF�3�%Ð'¨ y°´#°kÓ2BÐ1Cð DØ—J‘J˜q‘M�?ð$ô %à HØ¬¨[Ó)9ñ;ð ;ùòO -÷ 
Žüò*
s   ÅVÈ-AVÍ>"V(Ö
V%c                ó$  • U S-  nUR                  5       (       a$  [        R                  " UR                  5       5      OS/ 0nUS    Vs0 s H  oDR	                  S5      U_M     nnU H^  nUS   nUR	                  US    S30 5      nUU/ UR	                  SS5      UR	                  S	/ 5      S
UR	                  SS5      -   S.XW'   M`     [        UR                  5       5      US'   UR                  [        R                  " USSS95        g s  snf )Nzmanifest.jsonÚ	scenariosÚbaserÁ   r\   Ú_datasetÚn_turnsr   Úemotionsz	[V3 e2e] Útext_previewr,   )r   rP   Úvariantsr  r  r  Fr   )rº   Úindent)	rT   rV   rW   Ú	read_textr4   rÞ   Úvaluesrá   râ   )	rà   ÚpredictionsÚmanifest_pathÚmanifestÚsÚseenr_   rÁ   Úteacher_entrys	            rM   Úupdate_manifestr    s  € Ø Ñ0€Mà ×'Ñ'×)Ñ)ô —
’
˜=×2Ñ2Ó4Ô5Ø0;¸RÐ/@ð à&.¨{Ò&;Ó<Ò&; �E‰E�&‹M˜1ÒÑ&;€DÐ<ÛˆØ�Z‘=ˆØŸ™ A e¡H :¨XÐ!6¸Ó;ˆàØ#ØØ$×(Ñ(¨°AÓ6Ø%×)Ñ)¨*°bÓ9Ø'¨-×*;Ñ*;¸NÈBÓ*OÑOñ
ˆ‹ñ ô ! §¡£Ó/€Hˆ[ÑØ×ÑœTŸZšZ¨¸uÈQÑOÕPùò =s   Á
Dc                 óÐ  • [         R                  " 5       n U R                  S[        [        S9  U R                  S[        [
        S9  U R                  S[        [        S9  U R                  S[        [        S9  U R                  S[        [        S9  U R                  S[        [        S9  U R                  SS	S
9  U R                  SSSS S9  U R                  SSSS9  U R                  S[        SSS9  U R                  S[         R                  SS9  U R                  S[        SS9  U R                  S[        SS9  U R                  S[        SS9  U R                  S [        SS9  U R                  S![         R                  SS9  U R                  S"[        S#S9  U R                  S$[        S%S9  U R                  S&[        SS9  U R                  S'[         R                  SS9  U R                  S([        S)S9  U R                  S*[        S+S9  U R                  5       nUR                  (       d"  UR                  (       d  U R                  S,5        UR                  (       a~  / n[!        UR"                  R%                  S-5      5       H;  nUR&                  nS.U;   d  S/U;   a  M  UR)                  US [+        S05      *  5        M=     [-        S1[+        U5       S235        OUR                  n[.        R0                  " UR0                  5      n[-        S3UR2                   35        [5        UR2                  U5      u  pg[-        S4UR6                   35        [9        UR6                  UR:                  U5      u  p‰[-        S55        [-        S6[+        U5       S7UR"                   S835        / n
S9nS9nU H9  n[=        XÖXxX•U5      nU(       d  M  U
R)                  U5        X¾S:   -  nXÎS;   -  nM;     U
(       aG  [?        UR"                  U
5        [-        S<5        [-        S=U S>U S?S@U-  [A        USA5      -  SB SC35        [-        SD5        [-        SE5        [-        SF5        [-        SG5        g )HNz--ckpt)ÚtypeÚdefaultz--teacher_ckptz--tokenizer_dirz--audio_dirz--viewer_dirz--emotion_dirz--devicezcuda:0)r  z-sz--scenariosÚ+)Únargsr  z--all-viewerÚ
store_truez‹Run E2E on every scenario currently curated in data/viewer/. Preserves existing _dataset and _pred_dataset entries; only adds _e2e_dataset.)ÚactionÚhelpz--vad-smooth-sigmaç      >@u;   Cross-turn Gaussian Ïƒ. Default 30 (matches data_pipeline).)r  r  r  z--crispT)r  r  z--crisp-thresholdg333333Ó?z--crisp-scaler‚   z--crisp-sigmagÍÌÌÌÌÌô?z--crisp-mouthclose-sigmaz--brow-smoothz--brow-min-cutoffg       @z--brow-betag{®Gáz„?z--brow-d-cutoffz--add-blinksz--blink-intervalg      @z--blink-expressive-capg      à?z#provide --scenarios or --all-viewerz*_dataset.jsonÚ_pred_datasetr´   r  zall-viewer: z scenarios curatedzLoading V3 from zLoading KlueTeacher from u6   
Pipeline: text â†’ KlueTeacher â†’ V3 â†’ blendshapeszPredicting u    scenarios â†’ Ú
r   rÂ   rÃ   u&   
â”€â”€ teacher argmax accuracy â”€â”€z  matches GT label: rÀ   z  (éd   r   r/   z%)u>   
Done. Each scenario now appears up to 3Ã— in viewer dropdown:z   <sid>_dataset       teacher GTzK  <sid>_pred_dataset  V3 with GT cond (argmax of teacher's training labels)z8  <sid>_e2e_dataset   V3 with KlueTeacher-predicted cond)!ÚargparseÚArgumentParserÚadd_argumentr   ÚDEFAULT_CKPTÚDEFAULT_TEACHER_CKPTÚDEFAULT_TOKENIZER_DIRÚDEFAULT_AUDIO_DIRÚDEFAULT_VIEWER_DIRÚDEFAULT_EMOTION_DIRrÜ   ÚBooleanOptionalActionÚ
parse_argsrÿ   Ú
all_viewerÚerrorÚsortedrà   ÚglobÚstemrÉ   r7   r@   r0   rD   rE   r   Úteacher_ckptrN   rC   rý   r  Úmax)rí   rç   Úsidsr_   r+  rD   r*   rF   rG   r   r	  Útotal_mÚtotal_tr\   Úrs                  rM   Úmainr2  )  sÞ  € Ü	×	 Ò	 Ó	"€BØ‡O�O�H¤4´€OÑ>Ø‡O�OÐ$¬4Ô9M€OÑNØ‡O�OÐ%¬DÔ:O€OÑPØ‡O�O�M¬Ô6G€OÑHØ‡O�O�N¬Ô7I€OÑJØ‡O�O�O¬$Ô8K€OÑLØ‡O�O�J¨€OÑ1Ø‡O�O�D˜-¨s¸D€OÑAØ‡O�O�N¨<ðJð ñ Kð ‡O�OÐ(¬u¸dØVð ñ Xð ‡O�O�I¤h×&DÑ&DÈd€OÑSØ‡O�OÐ'¬e¸S€OÑAØ‡O�O�O¬%¸€OÑ=Ø‡O�O�O¬%¸€OÑ=Ø‡O�OÐ.´UÀC€OÑHØ‡O�O�O¬H×,JÑ,JÐTX€OÑYØ‡O�OÐ'¬e¸S€OÑAØ‡O�O�M¬°t€OÑ<Ø‡O�OÐ%¬E¸3€OÑ?Ø‡O�O�N¬8×+IÑ+IÐSW€OÑXØ‡O�OÐ&¬U¸C€OÑ@Ø‡O�OÐ,´5À#€OÑFØ�=‰=‹?€Dà�>�> $§/§/Ø
�‰Ð6Ô7à‡‡ØˆÜ˜Ÿ™×,Ñ,Ð-=Ó>Ö?ˆAØ—6‘6ˆDØ $Ó&¨.¸DÓ*@ÙØ�K‰K˜Ð/¤ J£Ð/Ð0Ö1ñ	 @ô
 	�œS ›Y˜KÐ'9Ð:Õ;à�~‰~ˆä�\Š\˜$Ÿ+™+Ó&€FÜ	Ð˜TŸY™Y˜KÐ
(Ô)Ü˜DŸI™I vÓ.�J€EÜ	Ð% d×&7Ñ&7Ð%8Ð
9Ô:Ü% d×&7Ñ&7¸×9KÑ9KÈVÓTÑ€Gä	ÐCÔEÜ	ˆKœ˜D›	�{ /°$·/±/Ð1BÀ"Ð
EÔFØ€KØ€GØ€GÛˆÜ˜S¨°yÈ$ÓOˆßˆ1Ø×Ñ˜qÔ!Ø˜‘|Ñ#ˆGØ˜‘zÑ!ŠGñ ö Ü˜Ÿ™¨Ô5ÜÐ7Ô9ÜÐ$ W I¨Q¨w¨ið 8Ø˜‘-¤# g¨q£/Ñ1°#Ð6°bð:ô 	;ä	ÐKÔMÜ	Ð,Ô.Ü	ÐWÔYÜ	ÐDÕFrœ   Ú__main__)rB   r   rC   r   rD   ztorch.device)r\   rÈ   r]   r   ÚreturnúOptional[dict])é€   )rv   ú	List[str])r  )
r�   r7  r‘   ú
np.ndarrayr’   z	List[int]r“   rÜ   r4  r8  )r\   rÈ   r4  r5  )rà   r   r	  z
List[dict])8Ú__doc__Ú
__future__r   r  rV   ÚreÚpathlibr   Útypingr   r   r   rÇ   rt   r‰   r0   Úscipy.ndimager   Útransformersr	   Úscripts.compiler.constantsr
   Úscripts.compiler.data_pipeliner   r   r   r   r   Úmodels.microalbert.teacherr   Úinferr   r   r   r   Ú__file__ÚresolveÚparentsÚPROJECT_ROOTr   r!  r"  r#  r$  r  ÚcompilerX   rN   re   rÍ   r   r›   rý   r  r2  Ú__name__© rœ   rM   Ú<module>rK     sŽ  ðñõ, #ã Û Û 	Ý ß 'Ñ 'ã Û Û Ý +Ý &å 5÷õ õ @÷ó ñ �H‹~×%Ñ%Ó'×/Ñ/°Ñ2€Ø$ }Ñ4Ø1ñ2Ø4=ñ>Ð à%¨Ñ5Ø2ñ3Ø5@ñAÐ à  6Ñ)¨OÑ;Ð Ø! FÑ*¨\Ñ9Ð Ø" VÑ+¨iÑ7Ð Ø˜xÑ'¨)Ñ3ØñØ 4ñ5€ð �:Š:Ð,Ó-€ô(ôVð: ‡‚ƒõ+ó ð+ð" 37ðLØ'1ðLà!*ðLð +0ðLð <FõLð8a;Ø,ôa;ôHQò(GGðT ˆzÓÙ…Fð rœ   