
    8jg
                        S r SSKJr  SSKJrJr  SSKrSSKJ	r	  SSK
JrJrJrJrJrJr  SSKJrJrJr  SS	KJr  SS
 jr\SS4             SS jjr        SS jrg)z7Main compiler API: blend parametric + archetype layers.    )annotations)ListOptionalN   )archetype_blend)BLEND_NEUTRAL_THRESHOLDBLEND_NEUTRAL_WEIGHTBLEND_EXTREME_THRESHOLDBLEND_EXTREME_WEIGHTBLEND_DEFAULT_WEIGHT	RBF_SIGMA)parametric_layerapply_conflict_resolutionapply_channel_mask)validate_vadc                    [        [        R                  R                  U 5      5      nU[        :  a  [
        $ U[        :  a  [        $ [        $ )zLPer-query blend weight: neutral favors parametric, extreme favors archetype.)	floatnplinalgnormr   r	   r
   r   r   )vad	magnitudes     Z/home/ubuntu/service/kemix-engine/package/face/animasync-face-v3/scripts/compiler/blend.py_dynamic_blend_weightr      s=    biinnS)*I**##**##    Tc                    [        U5      n[        U5      n[        XXS9nUb  UO
[        U5      nXh-  USU-
  -  -   n	[	        X5      n	U(       a  [        U	5      n	[        R                  " U	SS5      R                  [        R                  5      $ )u  Compute 52 blendshape values for given (emotion, VAD).

Args:
    emotion: emotion family name (e.g. 'joy') for archetype boosting; None → pure VAD
    vad: (3,) in [-1, 1]
    presets: dict of archetype presets
    sigma: RBF bandwidth (archetype layer)
    apply_lipsync_mask: zero out LIPSYNC_ONLY channels
    override_blend_weight: if set, use this instead of dynamic

Returns:
    (52,) float32 in [0, 1]
)emotion_hintsigmag      ?g        )
r   r   r   r   r   r   r   clipastypefloat32)
emotionr   presetsr   apply_lipsync_maskoverride_blend_weightparamarchwouts
             r   compile_blendshapesr*   #   s    * s
C S!E 3gKD "7!BH]^aHbA
)dcAg&
&C $C
-C  %773S!((44r   c                   UR                   S   n[        U 5      U:w  a  [        S[        U 5       SU 35      e[        R                  " US4[        R
                  S9n[        U5       H  n[        X   X   U40 UD6XV'   M     U$ )z-Batch version. vads: (N, 3). Returns (N, 52).r   zemotions length z	 != vads 4   )dtype)shapelen
ValueErrorr   emptyr!   ranger*   )emotionsvadsr#   kwargsNr)   is          r   compile_batchr8   N   s~     	

1A
8}+CM?)A3GHH
((Ar7"**
-C1X$X[$'7MfM Jr   )r   
np.ndarrayreturnr   )r"   zOptional[str]r   r9   r#   dictr   r   r$   boolr%   zOptional[float]r:   r9   )r3   zList[Optional[str]]r4   r9   r#   r;   r:   r9   )__doc__
__future__r   typingr   r   numpyr   	archetyper   	constantsr   r	   r
   r   r   r   
parametricr   r   r   utilsr   r   r*   r8    r   r   <module>rF      s    = " !  &  
    #-1(5(5	(5 (5 	(5
 (5 +(5 (5V!
 
 r   