ó
    ¡ü8j`V  ã                  ó6  • S r SSKJ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Jr  SSKJr  \R$                  " S5      rS	rS
rSrSr\" \" \\-   5      5      \" \" \5      5      :X  d   S5       eSrSrSrSrSrSrSr SS jr!SS jr" " S S\5      r#g)u  BlendshapeDataset â€” loads (audio, cond, target) from data_pipeline.py .npz.

Each .npz contains:
  audio:  (T, 80)  log-mel features at 30 fps
  cond:   (T, 19)  16-dim emotion one-hot + 3-dim VAD per frame
  target: (T, 52)  ARKit blendshape values

Split membership is derived from the JSONL files in data/emotion/
(seed_train_final.jsonl / seed_val.jsonl / seed_test.jsonl).

For daily-split scenarios (per-turn pseudo-scenarios like `daily_007_t2`),
parent membership is checked: if the parent dialogue is in the split's JSONL,
all its per-turn splits belong to that split.

Crops:
  - Sequences longer than `crop_frames`  â†’ random window crop
  - Sequences shorter than `crop_frames` â†’ edge-pad to crop_frames + return
    `valid_length` so the trainer can mask loss to real frames only.
é    )ÚannotationsN)ÚPath)ÚListÚSetÚTuple)Úgaussian_filter1d)ÚDatasetz^(daily_.+)_t(\d+)$)é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é-   é.   é/   é0   é3   )r   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é+   é,   é1   é2   )r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   )r+   r,   r-   r.   r/   r0   r1   r2   zsplit must partition EMOTIONAL)r   r   r   r   r   r   gš™™™™™Ù?r   )r!   r"   r#   r
   r"   ©r   r!   r"   r#   r$   ©r)   r*   c                óš   • U R                  S5      (       a  gU R                  S5      (       a  gU R                  S5      (       a  SU ;   a  gg)NÚlong_Úsolo_Údaily_Ú_tzdaily_-splitÚother)Ú
startswith)Úsids    ÚZ/home/ubuntu/service/kemix-engine/package/face/animasync-face-v3/models/v3_face/dataset.pyÚ	_classifyr>   m   sA   € Ø
‡~�~�g×ÑØØ
‡~�~�g×ÑØØ
‡~�~�h×Ñ D¨C£KØØó    c                ó`   • [         R                  U 5      nU(       a  UR                  S5      $ U $ )uD   Daily-split id â†’ parent dialogue id. Pass through for long_/solo_.r!   )Ú	_SPLIT_REÚmatchÚgroup)r<   Úms     r=   Ú_parent_sidrE   w   s%   € ä�‰˜Ó€AÞˆ1�7‰7�1‹:Ð# Ð#r?   c                  ó´   • \ rS rSr                S	                                   S
S jjrSS jrSS jrSSS jjrSS jrSr	g)ÚBlendshapeDataseté}   Nc                óX  • [        U5      U l        [        U5      U l        [	        U5      U l        [	        U5      U l        Uc  Un[	        U5      U l        XÐl        [        R                  " S[        R                  S9U l        [         H  nU R
                  U R                  U'   M     [         H  nU R                  U R                  U'   M     [         H  nU R                  U R                  U'   M     U R                  b/  [          H%  n[	        U R                  5      U R                  U'   M'     U R
                  S:g  =(       dY    U R                  S:g  =(       dC    U R                  S:g  =(       d-    U R                  S L=(       a    [	        U R                  5      S:g  U l        Uc  S O
[	        U5      U l        ['        U5      U l        [	        U5      U l        SU R*                  -
  U l        [	        U5      U l        [	        U5      U l        [        R2                  " S[&        S9U l        [6         H  nSU R4                  U'   M     [	        U5      U l        [	        U	5      U l        [	        U
5      U l        / U l        U R8                  S:”  a'  U R>                  RA                  SU R8                  45        U R:                  S:”  a'  U R>                  RA                  SU R:                  45        U R<                  S:”  a'  U R>                  RA                  SU R<                  45        X°l!        XÀl"        Uc  S O
[	        U5      U l#        [I        5       n[        U5      RK                  5        nU H-  n[L        RN                  " U5      nURQ                  US	   5        M/     S S S 5        / U l)        [U        U R                  RW                  S
5      5       HF  nURX                  n[[        U5      U;   d  M   U RR                  RA                  U[]        U5      45        MH     g ! , (       d  f       N„= f)Né4   ©Údtypeç      ð?Tç        r3   )r'   r(   r4   Úscenario_idz*.npz)/r   Únpz_dirÚintÚcrop_framesÚfloatÚlipsync_target_gainÚexpression_target_gainÚemotional_mouth_target_gainÚbrow_target_gainÚnpÚonesÚfloat32Ú_target_gainÚPURE_LIPSYNC_CHANNELSÚEMOTIONAL_PURE_CHANNELSÚEMOTIONAL_MOUTH_CHANNELSÚBROW_CHANNELSÚ_gain_activeÚeye_wide_maxÚboolÚ	soft_clipÚsoft_clip_kneeÚ_soft_clip_one_minus_kneeÚsmooth_cond_sigma_emotionÚplosive_damp_targetÚzerosÚ_plosive_damp_maskÚPLOSIVE_DAMP_CHANNELSÚsmooth_target_sigma_browÚsmooth_target_sigma_eye_squintÚsmooth_target_sigma_eye_wideÚ_smooth_groupsÚappendÚbrow_innerup_happy_gainÚbrow_happy_gainÚbrow_surprise_gainÚsetÚopenÚjsonÚloadsÚaddÚentriesÚsortedÚglobÚstemrE   r>   )ÚselfrP   Úsplit_jsonlrR   rT   rU   rV   rg   rk   rl   rm   rp   rq   rW   rr   ra   rc   rd   rf   ÚchÚ	split_idsÚfÚlineÚrowÚpr<   s                             r=   Ú__init__ÚBlendshapeDataset.__init__~   s˜  € ô* ˜G“}ˆŒÜ˜{Ó+ˆÔÜ#(Ð)<Ó#=ˆÔ Ü&+Ð,BÓ&CˆÔ#ð 'Ñ.Ø*@Ð'Ü+0Ð1LÓ+MˆÔ(ð !1Ôô ŸGšG B¬b¯j©jÑ9ˆÔß'ˆBØ$(×$<Ñ$<ˆD×Ñ˜bÓ!ñ (ç)ˆBØ$(×$?Ñ$?ˆD×Ñ˜bÓ!ñ *ç*ˆBØ$(×$DÑ$DˆD×Ñ˜bÓ!ñ +ð × Ñ Ñ,ß#�Ü(-¨d×.CÑ.CÓ(D�×!Ñ! "Ó%ñ $à!×5Ñ5¸Ñ<÷ KØ!%×!<Ñ!<ÀÑ!C÷Kà!%×!AÑ!AÀSÑ!H÷Kð #'×"7Ñ"7¸tÐ"C÷ #JÜ&+¨D×,AÑ,AÓ&BÀcÑ&Ið	 	Ôð &2Ñ%9™TÜ"'¨Ó"5ð 	Ôô
 ˜i›ˆŒÜ# NÓ3ˆÔØ),¨t×/BÑ/BÑ)BˆÔ&ô
 */Ð/HÓ)IˆÔ&Ü#(Ð)<Ó#=ˆÔ ô #%§(¢(¨2´TÑ":ˆÔß'ˆBØ*.ˆD×#Ñ# BÓ'ñ (ô ).Ð.FÓ(GˆÔ%Ü.3Ð4RÓ.SˆÔ+Ü,1Ð2NÓ,OˆÔ)Ø ˆÔØ×(Ñ(¨3Ó.Ø×Ñ×&Ñ&¨¸×9VÑ9VÐ'WÔXØ×.Ñ.°Ó4Ø×Ñ×&Ñ&¨°$×2UÑ2UÐ'VÔWØ×,Ñ,¨sÓ2Ø×Ñ×&Ñ&¨°$×2SÑ2SÐ'TÔUð (?Ô$à.Ôð ,>Ñ+E¡4Ü).Ð/AÓ)Bð 	Ôô
 "›eˆ	Ü�+Ó×#Ñ#Ô%¨Û�Ü—j’j Ó&�Ø—‘˜c -Ñ0Ö1ñ ÷ &ð /1ˆŒÜ˜Ÿ™×)Ñ)¨'Ó2Ö3ˆAØ—&‘&ˆCÜ˜3Ó 9Õ,Ø—‘×#Ñ# S¬)°C«.Ð$9Ö:ò 4÷ &Õ%ús   Í)4PÐ
P)c                ó,   • [        U R                  5      $ )N)Úlenrx   )r|   s    r=   Ú__len__ÚBlendshapeDataset.__len__ý   s   € Ü�4—<‘<Ó Ð r?   c           	     ó¤  • U R                   U   u  p#[        R                  " U R                  U S3-  5      nUS   R	                  [        R
                  5      nUS   R	                  [        R
                  5      nUS   R	                  [        R
                  5      nU R                  S:”  a(  [        US S 2S S24   U R                  SSS	9US S 2S S24'   U R                  (       a7  U R                   H'  u  p‰U H  n
[        US S 2U
4   U	SS
9US S 2U
4'   M     M)     U R                  (       a  XpR                  S S S 24   -  n[        U R                  [           5      nU R                  b£  U R                  (       a’  US:w  aŒ  US S 2[        [        5      4   R!                  SS9n[        R"                  " USS5      nU R$                  S:”  a  [        UU R$                  SS
9nSU-
  XÀR                  U-  -  -   nUS S 2[        4==   U-  ss'   U R&                  bÆ  U R                  (       aµ  US S 2[        [        5      4   R!                  SS9n[        R"                  " USS5      nU R$                  S:”  a  [        UU R$                  SS
9n[(         HK  n
[        U R                  U
   5      nUS:X  a  M#  SU-
  XÀR&                  U-  -  -   nUS S 2U
4==   U-  ss'   MM     U R*                  bŒ  U R*                  S:”  a|  [        R,                  " US S 2S4   US S 2S4   5      n[        R"                  " US-
  S-  SS5      nSU[        U R*                  5      -  -
  n[(         H  n
US S 2U
4==   U-  ss'   M     U R.                  S:”  a  US S 2[0        4   n[        R"                  " U[2        -
  S[2        -
  -  SS5      n[        R,                  " SSU R.                  U-  -
  5      nUS S 2U R4                  4==   US S 2S 4   -  ss'   U R6                  bL  U R6                  S:  a<  [8         H2  n
[        R:                  " US S 2U
4   U R6                  5      US S 2U
4'   M4     U R                  (       d.  U R.                  S:”  d  U R6                  c  U R<                  (       aÏ  U R<                  (       a‰  U R>                  nU R@                  n[        RB                  " UU:„  SU[        RD                  " UU-
  * U-  5      -  -
  U5      n[        R,                  " US5      R	                  [        R
                  5      nO5[        R"                  " USS5      R	                  [        R
                  5      nURF                  S   nUU RH                  :¼  a|  [K        [        RL                  RO                  SUU RH                  -
  S-   5      5      nUUUU RH                  -    nUUUU RH                  -    nUUUU RH                  -    nU RH                  nO_U RH                  U-
  n[        RP                  " USU4S4SS9n[        RP                  " USU4S4SS9n[        RP                  " USU4S4SS9nUn[R        RT                  " U5      [R        RT                  " U5      [R        RT                  " U5      [R        RV                  " U[R        RX                  S9UUS.$ )Nz.npzÚaudioÚcondÚtargetrN   é   r   Únearest)ÚsigmaÚaxisÚmode)r�   r’   rM   r!   )r‘   r)   r*   gš™™™™™¹?gš™™™™™É?)r   r   Úedge)r’   rK   )r‹   rŒ   r�   Úvalid_lengthrO   Úcategory)-rx   rX   ÚloadrP   ÚastyperZ   rf   r   rn   r`   r[   rS   ÚBROW_INNERUP_CHrp   ÚlistÚHAPPY_EMOTION_INDICESÚsumÚcliprk   rq   r_   rr   Úmaximumrg   ÚMOUTH_CLOSE_CHÚPLOSIVE_TRIGGERri   ra   ÚEYE_WIDE_CHANNELSÚminimumrc   rd   re   ÚwhereÚexpÚshaperR   rQ   ÚrandomÚrandintÚpadÚtorchÚ
from_numpyÚtensorÚlong)r|   Úidxr<   ÚcatÚdatar‹   rŒ   r�   Úchsr�   r~   Ú	full_gainÚhappyÚadjustÚfull_gain_chÚeye_wideÚ	wide_rampÚbrow_factorÚmcÚtÚattenÚkÚone_minus_kÚTÚstartr”   r§   s                              r=   Ú__getitem__ÚBlendshapeDataset.__getitem__   s  € Ø—<‘< Ñ$‰ˆÜ�wŠw�t—|‘|¨¨¨T lÑ2Ó3ˆØ�W‘×$Ñ$¤R§Z¡ZÓ0ˆØ�F‰|×"Ñ"¤2§:¡:Ó.ˆØ�h‘×&Ñ&¤r§z¡zÓ2ˆð ×)Ñ)¨CÓ/Ü,¨T²!°S°b°S°&©\Ø48×4RÑ4RØ34¸9ñFˆD’�C�R�C�‰Lð ××Ø"×1Ô1‘
�Û�BÜ$5°fºQÀ¸U±mÈ5Ø<Eñ%G�Fš1˜b˜5“Mó ñ 2ð ××Ø×/Ñ/°²a°Ñ8Ñ8ˆFô ˜$×+Ñ+¬OÑ<Ó=ˆ	Ø×(Ñ(Ñ4Ø×%×%Ø Ó$ØšœDÔ!6Ó7Ð7Ñ8×<Ñ<À!Ð<ÐDˆEÜ—G’G˜E 3¨Ó,ˆEØ×,Ñ,¨sÓ2Ü)¨%Ø15×1NÑ1NØ09ñ;�ð ˜E‘k U×.JÑ.JÈYÑ.VÑ%WÑWˆFØ’1”oÐ%Ó&¨&Ñ0Ó&ð × Ñ Ñ,Ø×%×%ØšœDÔ!6Ó7Ð7Ñ8×<Ñ<À!Ð<ÐDˆEÜ—G’G˜E 3¨Ó,ˆEØ×,Ñ,¨sÓ2Ü)¨%Ø15×1NÑ1NØ09ñ;�÷ $�Ü$ T×%6Ñ%6°rÑ%:Ó;�Ø 3Ó&ÙØ ™+¨×2FÑ2FÈÑ2UÑ)VÑV�Ø’q˜"�u“ Ñ'•ñ $ð ×#Ñ#Ñ/Ø×+Ñ+¨cÓ1Ü—z’z &ª¨B¨¡-°º¸2¸±Ó?ˆHÜŸš ¨D¡°DÑ 8¸#¸sÓCˆIØ 	¬E°$×2IÑ2IÓ,JÑ JÑJˆKß#�Ø’q˜"�u“ Ñ,•ñ $ð ×#Ñ# cÓ)Øšœ>Ð)Ñ*ˆBÜ—’˜œoÑ-°#¼Ñ2GÑHÈ#ÈsÓSˆAÜ—J’J˜s C¨$×*BÑ*BÀQÑ*FÑ$FÓGˆEà’1�d×-Ñ-Ð-Ó.°%º¸4¸±.Ñ@Ó.ð ×ÑÑ(¨T×->Ñ->ÀÓ-Dß'�Ü "§
¢
¨6²!°R°%©=¸$×:KÑ:KÓ L�’q˜"�u“ñ (ð ×× ×!9Ñ!9¸CÓ!?Ø×$Ñ$Ñ0°D·N·NØ�~�~ð ×'Ñ'�Ø"×<Ñ<�ÜŸšØ˜Q‘JØ˜+¬¯ª°¸!±¨}¸{Ñ/JÓ(KÑKÑKØó�ô
 Ÿš F¨CÓ0×7Ñ7¼¿
¹
ÓC‘äŸš ¨¨cÓ2×9Ñ9¼"¿*¹*ÓE�à�L‰L˜‰OˆØ�× Ñ Ó ÜœŸ	™	×)Ñ)¨!¨Q°×1AÑ1AÑ-AÀAÑ-EÓFÓGˆEØ˜% %¨$×*:Ñ*:Ñ":Ð;ˆEØ˜ ¨×(8Ñ(8Ñ 8Ð9ˆDØ˜E E¨D×,<Ñ,<Ñ$<Ð=ˆFØ×+Ñ+‰Là×"Ñ" QÑ&ˆCÜ—F’F˜5 A s 8¨VÐ"4¸6ÑBˆEÜ—6’6˜$ ! S ¨6Ð 2¸Ñ@ˆDÜ—V’V˜F a¨ X¨vÐ$6¸VÑDˆFØˆLô ×%Ò% eÓ,Ü×$Ò$ TÓ*Ü×&Ò& vÓ.Ü!ŸLšL¨¼U¿Z¹ZÑHØØñ
ð 	
r?   c                óÌ   • [         R                  " [        U R                  5      [         R                  S9n[        U R                  5       H  u  nu  pEUS:X  d  M  XU'   M     U$ )uõ   Sample weights for WeightedRandomSampler.

Long_ scenarios get `long_weight`, everything else gets 1.0.
Used to compensate for the 5715 daily-split + 253 solo_ vs only 363
long_ files â€” without this, the model sees ~6% multi-emotion gradient.
rK   r6   )rX   rY   r‡   rx   rZ   Ú	enumerate)r|   Úlong_weightÚweightsÚiÚ_r­   s         r=   Úget_sample_weightsÚ$BlendshapeDataset.get_sample_weights¡  sO   € ô —'’'œ#˜dŸl™lÓ+´2·:±:Ñ>ˆÜ$ T§\¡\Ö2‰KˆA‰x�Ø�g�~Ø(˜“
ñ 3ð ˆr?   c                ób   • 0 nU R                    H  u  p#UR                  US5      S-   X'   M     U$ )Nr   r!   )rx   Úget)r|   ÚcountsrÅ   r­   s       r=   Úcategory_countsÚ!BlendshapeDataset.category_counts®  s3   € ØˆØ—l”l‰FˆAØ Ÿ*™* S¨!Ó,¨qÑ0ˆF‹Kñ #àˆr?   )r`   ri   rn   re   r[   rq   rp   rr   rW   rR   rV   rx   rU   ra   rT   rP   rg   rf   rk   rl   rm   rc   rd   )éð   rM   rM   NrN   rN   rN   rN   NNNNNFgffffffæ?rN   )$rP   r   r}   r   rR   rQ   rT   rS   rU   rS   rV   úfloat | Nonerg   rS   rk   rS   rl   rS   rm   rS   rp   rÎ   rq   rÎ   rW   rÎ   rr   rÎ   ra   rÎ   rc   rb   rd   rS   rf   rS   )ÚreturnrQ   )r¬   rQ   )g      @)rÂ   rS   rÏ   z
np.ndarray)rÏ   Údict)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r„   rˆ   r¾   rÆ   rË   Ú__static_attributes__© r?   r=   rG   rG   }   s  † ð
 Ø%(Ø(+Ø48Ø%(Ø*-Ø03Ø.1Ø04Ø(,Ø)-Ø+/Ø%)ØØ #Ø+.ð'};àð};ð ð};ð ð	};ð
 #ð};ð !&ð};ð &2ð};ð #ð};ð #(ð};ð ).ð};ð ',ð};ð ".ð};ð &ð};ð 'ð};ð )ð};ð  #ð!};ð" ð#};ð$ ð%};ð& $)õ'};ô~!ô_
öB÷r?   rG   )r<   ÚstrrÏ   r×   )$Ú__doc__Ú
__future__r   ru   ÚreÚpathlibr   Útypingr   r   r   ÚnumpyrX   r¨   Úscipy.ndimager   Útorch.utils.datar	   ÚcompilerA   r\   ÚEMOTIONAL_CHANNELSr]   r^   Útuplery   rj   rŸ   rž   rš   r˜   r_   r    r>   rE   rG   rÖ   r?   r=   Ú<module>rã      sÜ   ðñõ& #ã Û 	Ý ß #Ñ #ã Û Ý +Ý $ð �JŠJÐ-Ó.€	ð
Ð ð 	Ð ð"Ð ðÐ ñ ‰VÐ+Ð.FÑFÓGÓHÙ‰VÐ&Ó'Ó(ó)ð KØ*JóKð )ð 1Ð Ø€Ø€ð %Ð Ø€ð  €àÐ ôô$ôu˜õ ur?   