
    
3jy:                        S SK r S SKrS SKrS SKJrJr  SSKJr  SSK	J
r
  SSKJr  SSKJrJr  SSKJr  S	S
KJrJr  S	SKJrJrJr  SSKJr  \" 5       (       a  S SKr\R6                  " \5      rS rS rS r  SS\S\S\!\"\!   -  S\#S\RH                  S\RJ                  S-  4S jjr& " S S\5      r' " S S\5      r( " S S\5      r)g)    N)AutoTokenizerUMT5EncoderModel   )
FrozenDict)ClassifierFreeGuidance)AutoencoderKLWan)is_ftfy_availablelogging)VideoProcessor   )ModularPipelineBlocksPipelineState)ComponentSpec
InputParamOutputParam   )HeliosModularPipelinec                     [         R                  " U 5      n [        R                  " [        R                  " U 5      5      n U R	                  5       $ N)ftfyfix_texthtmlunescapestriptexts    e/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/modular_pipelines/helios/encoders.pybasic_cleanr   &   s3    ==D==t,-D::<    c                 V    [         R                  " SSU 5      n U R                  5       n U $ )Nz\s+ )resubr   r   s    r   whitespace_cleanr$   ,   s$    66&#t$D::<DKr   c                 .    [        [        U 5      5      n U $ r   )r$   r   r   s    r   prompt_cleanr&   2   s    K-.DKr   text_encoder	tokenizerpromptmax_sequence_lengthdevicedtypec                 $   U=(       d    U R                   n[        U[        5      (       a  U/OUnU Vs/ s H  n[        U5      PM     nnU" USUSSSSS9nUR                  UR
                  pU	R                  S5      R                  SS9R                  5       n
U " UR                  U5      U	R                  U5      5      R                  nUR                  XTS9n[        X5       VVs/ s H
  u  plUS	U PM     nnn[        R                  " U Vs/ s HJ  n[        R                  " XfR                  X6R!                  S5      -
  UR!                  S5      5      /5      PML     snSS9nXR
                  R#                  5       4$ s  snf s  snnf s  snf )
a  Encode text prompts into T5 embeddings for Helios.

Args:
    text_encoder: The T5 text encoder model.
    tokenizer: The tokenizer for the text encoder.
    prompt: The prompt or prompts to encode.
    max_sequence_length: Maximum sequence length for tokenization.
    device: Device to place tensors on.
    dtype: Optional dtype override. Defaults to `text_encoder.dtype`.

Returns:
    A tuple of `(prompt_embeds, attention_mask)` where `prompt_embeds` is the encoded text embeddings and
    `attention_mask` is a boolean mask.

max_lengthTpt)paddingr.   
truncationadd_special_tokensreturn_attention_maskreturn_tensorsr   r   dim)r,   r+   N)r,   
isinstancestrr&   	input_idsattention_maskgtsumlongtolast_hidden_stateziptorchstackcat	new_zerossizebool)r'   r(   r)   r*   r+   r,   utext_inputstext_input_idsmaskseq_lensprompt_embedsvs                r   get_t5_prompt_embedsrN   7   sj   , '\''E#FC00fXfF'-.v!l1ovF.&"K '00+2L2LDwwqz~~!~$))+H !2!26!:DGGFOL^^M!$$5$@M'*='CD'CtqQrU'CMDKKZghZgUVA{{#6#BAFF1INO	PZghnoM 4499;;;+ /  Ehs   F(FAFc                       \ rS rSrSr\S\4S j5       r\S\\	   4S j5       r
\S\\   4S j5       r\S\\   4S j5       r\S 5       r\R$                  " 5       S	\S
\S\4S j5       rSrg)HeliosTextEncoderSteph   heliosreturnc                     g)NzNText Encoder step that generates text embeddings to guide the video generation selfs    r   description!HeliosTextEncoderStep.descriptionk   s    _r   c           
      v    [        S[        5      [        S[        5      [        S[        [	        SS05      SS9/$ )Nr'   r(   guiderguidance_scaleg      @from_configconfigdefault_creation_method)r   r   r   r   r   rV   s    r   expected_components)HeliosTextEncoderStep.expected_componentso   sB     .*:;+}5&!#3S"9:(5		
 		
r   c                     [         R                  " S5      [         R                  " S5      [         R                  " S5      /$ )Nr)   negative_promptr*   )r   templaterV   s    r   inputsHeliosTextEncoderStep.inputs|   s:     ) 12 56
 	
r   c                 Z    [         R                  " S5      [         R                  " S5      /$ )NrL   negative_prompt_embeds)r   re   rV   s    r   intermediate_outputs*HeliosTextEncoderStep.intermediate_outputs   s+       1  !9:
 	
r   c                 >   U b2  [        U [        [        45      (       d  [        S[	        U 5       35      eUb2  [        U[        [        45      (       d  [        S[	        U5       35      eU b  Ub  [        U [        5      (       a  U /OU n[        U[        5      (       a  U/OUn[	        U5      [	        U5      La$  [        S[	        U5       S[	        U 5       S35      e[        U5      [        U5      :w  a$  [        S[        U5       S[        U5       S35      eg g g )	Nz2`prompt` has to be of type `str` or `list` but is z;`negative_prompt` has to be of type `str` or `list` but is z?`negative_prompt` should be the same type to `prompt`, but got z != .z!`negative_prompt` has batch size z, but `prompt` has batch size zT. Please make sure that passed `negative_prompt` matches the batch size of `prompt`.)r7   r8   list
ValueErrortype	TypeErrorlen)r)   rd   prompt_listneg_lists       r   check_inputs"HeliosTextEncoderStep.check_inputs   s2   j#t&E&EQRVW]R^Q_`aa&z/CQU;/W/WZ[_`o[pZqrss/"=&0&=&=6(6K,6,L,L(RaHK X6UVZ[jVkUl mV~Q(  ;3x=0 7H GK() *33  1 #>r   
componentsstatec                 *   U R                  U5      nUR                  nUR                  nUR                  nUR                  nU R                  XE5        [        UR                  UR                  UUUS9u  Ul	        nS Ul
        UR                  (       am  U=(       d    Sn[        U[        5      (       a$  [        U[        5      (       a  [        U5      U/-  n[        UR                  UR                  UUUS9u  Ul
        nU R!                  X#5        X4$ )N)r'   r(   r)   r*   r+    )get_block_stater)   rd   r*   _execution_deviceru   rN   r'   r(   rL   ri   requires_unconditional_embedsr7   rn   r8   rr   set_block_state)	rW   rw   rx   block_stater)   rd   r*   r+   _s	            r   __call__HeliosTextEncoderStep.__call__   s	   **51##%55)==--&2 (<#00 ** 3(
$!1 .2*33-3O&$''J,L,L"%f+0A"A4H'44$..&$751K. 	U0  r   rU   N)__name__
__module____qualname____firstlineno__
model_namepropertyr8   rX   rn   r   ra   r   rf   r   rj   staticmethodru   rA   no_gradr   r   r   __static_attributes__rU   r   r   rP   rP   h   s    J`S ` ` 

T-%8 

 

 
Z( 
 
 
d;&7 
 
  , ]]_#!#8 #! #!S` #! #!r   rP   c                       \ rS rSrSrSr\S\4S j5       r\S\	\
   4S j5       r\S\	\   4S j5       r\S\	\   4S j5       r\R"                  " 5       S	\S
\S\4S j5       rSrg)HeliosImageVaeEncoderStep   zKEncodes an input image into VAE latent space for image-to-video generation.rR   rS   c                      g)NzImage Encoder step that encodes an input image into VAE latent space, producing image_latents (first frame prefix) and fake_image_latents (history seed) for image-to-video generation.rU   rV   s    r   rX   %HeliosImageVaeEncoderStep.description       -	
r   c           	      X    [        S[        5      [        S[        [        SS05      SS9/$ Nvaevideo_processorvae_scale_factor   r]   r^   r   r   r   r   rV   s    r   ra   -HeliosImageVaeEncoderStep.expected_components   8     %!12!!#5q"9:(5	
 	
r   c           
          [         R                  " S5      [         R                  " SSS9[         R                  " SSS9[        SS[        S	S
9[         R                  " S5      /$ )Nimageheight  defaultwidth  num_latent_frames_per_chunk	   +Number of latent frames per temporal chunk.r   	type_hintrX   	generatorr   re   intrV   s    r   rf    HeliosImageVaeEncoderStep.inputs   s`     (#65-I	 ,
 	
r   c                 `    [         R                  " S5      [        S[        R                  SS9/$ )Nimage_latentsfake_image_latentsz&Fake image latents for history seedingr   rX   r   re   rA   TensorrV   s    r   rj   .HeliosImageVaeEncoderStep.intermediate_outputs   s0       1$Jr
 	
r   rw   rx   c                    U R                  U5      nUR                  nUR                  n[        R                  " UR
                  R                  5      R                  SUR
                  R                  SSS5      R                  UR                  UR                  5      nS[        R                  " UR
                  R                  5      R                  SUR
                  R                  SSS5      R                  UR                  UR                  5      -  nUR                  R                  UR                  UR                   UR"                  S9nUR%                  S5      R                  XTR                  S9n	UR'                  U	5      R(                  R+                  UR,                  S9n
X-
  U-  n
UR.                  S-
  UR0                  -  S-   nU	R3                  SSUSS5      nUR'                  U5      R(                  R+                  UR,                  S9nX-
  U-  nUS S 2S S 2SS 2S S 2S S 24   nU
R                  U[        R4                  S9Ul        UR                  U[        R4                  S9Ul        U R;                  X#5        X4$ )Nr         ?r   r   r   r+   r,   r   )r{   r   r|   rA   tensorr_   latents_meanviewz_dimr>   r+   r,   latents_stdr   
preprocessr   r   r   	unsqueezeencodelatent_distsampler   r   vae_scale_factor_temporalrepeatfloat32r   r   r~   )rW   rw   rx   r   r   r+   r   r   r   image_5dr   
min_frames
fake_videofake_latents_fullr   s                  r   r   "HeliosImageVaeEncoderStep.__call__   s>   **51nn-- LL00166q#**:J:JAqRSTWWX[XbXbdgdmdmn 	 ELL)?)?@EEaIYIY[\^_abcffJJ		
 

 **55k&8&8@Q@Q 6 
 ??1%((ii(H 

8,88??+J_J_?`&5D "==AZEiEiilmm
__Q:q!<
JJz2>>EEP[PePeEf.=L.q!RS!Q?$1$4$4F%--$4$X!);)>)>fTYTaTa)>)b&U0  r   rU   Nr   r   r   r   __doc__r   r   r8   rX   rn   r   ra   r   rf   r   rj   rA   r   r   r   r   r   rU   r   r   r   r      s    UJ
S 
 
 	
T-%8 	
 	
 
Z( 
 
 
d;&7 
 
 ]]_"!#8 "! "!S` "! "!r   r   c                       \ rS rSrSrSr\S\4S j5       r\S\	\
   4S j5       r\S\	\   4S j5       r\S\	\   4S j5       r\R"                  " 5       S	\S
\S\4S j5       rSrg)HeliosVideoVaeEncoderStepi   zEncodes an input video into VAE latent space for video-to-video generation.

Produces `image_latents` (first frame) and `video_latents` (remaining frames encoded in chunks).
rR   rS   c                      g)NzVideo Encoder step that encodes an input video into VAE latent space, producing image_latents (first frame) and video_latents (chunked video frames) for video-to-video generation.rU   rV   s    r   rX   %HeliosVideoVaeEncoderStep.description(  r   r   c           	      X    [        S[        5      [        S[        [        SS05      SS9/$ r   r   rV   s    r   ra   -HeliosVideoVaeEncoderStep.expected_components0  r   r   c           
          [        SSSS9[         R                  " SSS9[         R                  " SS	S9[        S
S[        SS9[         R                  " S5      /$ )NvideoTz)Input video for video-to-video generation)requiredrX   r   r   r   r   r   r   r   r   r   r   r   rV   s    r   rf    HeliosVideoVaeEncoderStep.inputs<  s_     w;fg#65-I	 ,
 	
r   c                 `    [         R                  " S5      [        S[        R                  SS9/$ )Nr   video_latentszEncoded video latents (chunked)r   r   rV   s    r   rj   .HeliosVideoVaeEncoderStep.intermediate_outputsK  s-       15<<Mno
 	
r   rw   rx   c           
         U R                  U5      nUR                  nUR                  nUR                  n[        R
                  " UR                  R                  5      R                  SUR                  R                  SSS5      R                  UR                  UR                  5      nS[        R
                  " UR                  R                  5      R                  SUR                  R                  SSS5      R                  UR                  UR                  5      -  nUR                  R                  UR                   UR"                  UR$                  S9n	U	R                  XTR                  S9n	U	R&                  S   n
US-
  S-  S-   nX-  nUS:X  a  [)        SU S	U
 S
U SU 35      eX-  nX-
  nU	S S 2S S 2SS2S S 2S S 24   nUR+                  U5      R,                  R/                  UR0                  S9nUU-
  U-  n/ n[3        U5       Ho  nUUU-  -   nUU-   nU	S S 2S S 2UU2S S 2S S 24   nUR+                  U5      R,                  R/                  UR0                  S9nUU-
  U-  nUR5                  U5        Mq     [        R6                  " USS9nUR                  U[        R8                  S9Ul        UR                  U[        R8                  S9Ul        U R?                  X#5        X4$ )Nr   r   r   r   r      r   zVideo must have at least z frames (got zA frames). Required: (num_latent_frames_per_chunk - 1) * 4 + 1 = (z - 1) * 4 + 1 = r   r5   ) r{   r   r|   r   rA   r   r_   r   r   r   r>   r+   r,   r   r   preprocess_videor   r   r   shapero   r   r   r   r   rangeappendrC   r   r   r   r~   )rW   rw   rx   r   r   r+   r   r   r   r   
num_framesr   
num_chunkstotal_valid_framesstart_framefirst_framer   latents_chunksichunk_start	chunk_endvideo_chunkchunk_latentsr   s                           r   r   "HeliosVideoVaeEncoderStep.__call__R  s   **51nn--&1&M&M# LL00166q#**:J:JAqRSTWWX[XbXbdgdmdmn 	 ELL)?)?@EEaIYIY[\^_abcffJJ		
 

 **;;k&8&8@Q@Q < 
 ii8 [[^
1A5:Q>
-
?+J< 8"| $JJeIffv  xB  wCD 
 (4 5 Aq!A#q!O,

;/;;BB[MbMbBc&5D z"A%J6K#j0I1k)&;Q ABKJJ{3??FFQ\QfQfFgM*\9[HM!!-0 # 		.a8$1$4$4F%--$4$X!$1$4$4F%--$4$X!U0  r   rU   Nr   rU   r   r   r   r      s    
 J
S 
 
 	
T-%8 	
 	
 
Z( 
 
 
d;&7 
 
 ]]_5!#8 5! 5!S` 5! 5!r   r   r   )*r   regexr"   rA   transformersr   r   configuration_utilsr   guidersr   modelsr   utilsr	   r
   r   r   modular_pipeliner   r   modular_pipeline_utilsr   r   r   r   r   
get_loggerr   loggerr   r$   r&   r8   rn   r   r+   r,   rN   rP   r   r   rU   r   r   <module>r      s       8 - - & / - C K K 3  
		H	% !%.<".<.< $s)O.< 	.<
 LL.< ;;.<b^!1 ^!BT! 5 T!nh! 5 h!r   