
    ig
                        d Z ddlmZ ddlmZmZ ddlZddlm	Z	 ddl
mZmZmZmZmZmZ ddlmZmZmZ dd	lmZ ddZeddfddZd dZdS )!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_vadvad
np.ndarrayreturnfloatc                    t          t          j                            |                     }|t          k     rt
          S |t          k    rt          S t          S )zLPer-query blend weight: neutral favors parametric, extreme favors archetype.)	r   nplinalgnormr   r	   r
   r   r   )r   	magnitudes     N/dataset/kemix-engine/package/face/animasync-face-v3/scripts/compiler/blend.py_dynamic_blend_weightr      sG    binnS))**I***##***##    TemotionOptional[str]presetsdictsigmaapply_lipsync_maskbooloverride_blend_weightOptional[float]c                N   t          |          }t          |          }t          ||| |          }||nt          |          }||z  |d|z
  z  z   }	t	          |	|          }	|rt          |	          }	t          j        |	dd                              t          j	                  S )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_hintr"   Ng      ?g        )
r   r   r   r   r   r   r   clipastypefloat32)
r   r   r    r"   r#   r%   paramarchwouts
             r   compile_blendshapesr0   #   s    * s

C S!!E 3gUKKKD "7!BH]^aHbHbA
!)dcAg&
&C $C
-
-C  & %%73S!!((444r   emotionsList[Optional[str]]vadsc                .   |j         d         }t          |           |k    r"t          dt          |            d|           t          j        |dft          j                  }t          |          D ] }t          | |         ||         |fi |||<   !|S )z-Batch version. vads: (N, 3). Returns (N, 52).r   zemotions length z	 != vads 4   )dtype)shapelen
ValueErrorr   emptyr+   ranger0   )r1   r3   r    kwargsNr/   is          r   compile_batchr?   N   s     	
1A
8}}GCMMGGAGGHHH
(Ar7"*
-
-
-C1XX N N$Xa[$q'7MMfMMAJr   )r   r   r   r   )r   r   r   r   r    r!   r"   r   r#   r$   r%   r&   r   r   )r1   r2   r3   r   r    r!   r   r   )__doc__
__future__r   typingr   r   numpyr   	archetyper   	constantsr   r	   r
   r   r   r   
parametricr   r   r   utilsr   r   r0   r?    r   r   <module>rI      s@   = = " " " " " " ! ! ! ! ! ! ! !     & & & & & &                        
               #-1(5 (5 (5 (5 (5V     r   