o
    Gi57                     @   s   d dl Z d dlmZ d dlmZmZmZ eG dd dZeG dd dZG dd	 d	Z	G d
d dZ
dd Zdd Zdd Zdd ZeZeZeZeZeZeZeZdS )    N)	dataclass)AnyCallableTypec                   @   s    e Zd ZU eegef ed< dS )AttentionProcessorMetadataskip_processor_output_fnN)__name__
__module____qualname__r   r   __annotations__ r   r   L/home/ubuntu/.local/lib/python3.10/site-packages/diffusers/hooks/_helpers.pyr      s   
 r   c                   @   sb   e Zd ZU dZeed< dZeed< dZeed< dZ	e
ed< dZeeef ed< dd	efd
dZdS )TransformerBlockMetadataNreturn_hidden_states_index"return_encoder_hidden_states_indexhidden_stateshidden_states_argument_name_cls_cached_parameter_indicesr   
identifierc                 C   s   |pi }||v r|| S | j d ur|| j |  S | jd u r!tdtt| jjj }|dd  }dd t	|D | _ || j vrJtd| d| j | }|t
|krbtd| dt
| d	|| S )
Nz$Model class is not set for metadata.   c                 S   s   i | ]\}}||qS r   r   ).0iparamr   r   r   
<dictcomp>,   s    zLTransformerBlockMetadata._get_parameter_from_args_kwargs.<locals>.<dictcomp>zParameter 'z4' not found in function signature but was requested.z	Expected z arguments but got .)r   r   
ValueErrorlistinspect	signatureforward
parameterskeys	enumeratelen)selfr   argskwargsr!   indexr   r   r   _get_parameter_from_args_kwargs"   s    



z8TransformerBlockMetadata._get_parameter_from_args_kwargs)r   N)r   r	   r
   r   intr   r   r   strr   r   r   dictr)   r   r   r   r   r      s   
 r   c                   @   L   e Zd Zi ZdZededefddZededefddZ	ed	d
 Z
dS )AttentionProcessorRegistryFmodel_classmetadatac                 C   s   |    || j|< d S N)	_register	_registryclsr/   r0   r   r   r   register<   s   z#AttentionProcessorRegistry.registerreturnc                 C   ,   |    || jvrtd| d| j| S NzModel class z not registered.r2   r3   r   r5   r/   r   r   r   getA      

zAttentionProcessorRegistry.getc                 C      | j rd S d| _ t  d S NT)_is_registered'_register_attention_processors_metadatar5   r   r   r   r2   H      
z$AttentionProcessorRegistry._registerN)r   r	   r
   r3   r@   classmethodr   r   r6   r<   r2   r   r   r   r   r.   5   s    r.   c                   @   r-   )TransformerBlockRegistryFr/   r0   c                 C   s   |    ||_|| j|< d S r1   )r2   r   r3   r4   r   r   r   r6   W   s   z!TransformerBlockRegistry.registerr7   c                 C   r8   r9   r:   r;   r   r   r   r<   ]   r=   zTransformerBlockRegistry.getc                 C   r>   r?   )r@   %_register_transformer_blocks_metadatarB   r   r   r   r2   d   rC   z"TransformerBlockRegistry._registerN)r   r	   r
   r3   r@   rD   r   r   r6   r<   r2   r   r   r   r   rE   P   s    rE   c                  C   s   ddl m}  ddlm} ddlm} ddlm} ddlm	} ddl
m} ddlm} tj| ttd	d
 tj|ttd	d
 tj|ttd	d
 tj|ttd	d
 tj|ttd	d
 tj|ttd	d
 tj|ttd	d
 d S )N   )AttnProcessor2_0)CogView4AttnProcessor)FluxAttnProcessor)HunyuanImageAttnProcessor) QwenDoubleStreamAttnProcessor2_0)WanAttnProcessor2_0)ZSingleStreamAttnProcessor)r   r/   r0   )models.attention_processorrH   (models.transformers.transformer_cogview4rI   $models.transformers.transformer_fluxrJ   ,models.transformers.transformer_hunyuanimagerK   )models.transformers.transformer_qwenimagerL   #models.transformers.transformer_wanrM   'models.transformers.transformer_z_imagerN   r.   r6   r   /_skip_proc_output_fn_Attention_AttnProcessor2_04_skip_proc_output_fn_Attention_CogView4AttnProcessor2_skip_proc_output_fn_Attention_WanAttnProcessor2_00_skip_proc_output_fn_Attention_FluxAttnProcessor?_skip_proc_output_fn_Attention_QwenDoubleStreamAttnProcessor2_08_skip_proc_output_fn_Attention_HunyuanImageAttnProcessor9_skip_proc_output_fn_Attention_ZSingleStreamAttnProcessor)rH   rI   rJ   rK   rL   rM   rN   r   r   r   rA   l   s^   
rA   c                  C   s\  ddl m} m} ddlm} ddlm} ddlm} ddl	m
}m} ddlm}m}m}	m}
 ddlm}m} dd	lm} dd
lm} ddlm} ddlm} ddlm} ddlm} t j!| t"dd dd t j!|t"dd dd t j!|t"dddd t j!|t"dddd t j!|t"dddd t j!|t"dddd t j!|
t"dddd t j!|t"dddd t j!|	t"dddd t j!|t"dddd t j!|t"dd dd t j!|t"dddd t j!|t"dd dd t j!|t"dddd t j!|t"dddd t j!|t"dddd t j!|t"dd dd t j!|t"dddd t j!|t"dd ddd d S )NrG   )BasicTransformerBlockJointTransformerBlock)CogVideoXBlock)BriaTransformerBlock)CogView4TransformerBlock)FluxSingleTransformerBlockFluxTransformerBlock)"HunyuanVideoSingleTransformerBlock.HunyuanVideoTokenReplaceSingleTransformerBlock(HunyuanVideoTokenReplaceTransformerBlockHunyuanVideoTransformerBlock)"HunyuanImageSingleTransformerBlockHunyuanImageTransformerBlock)!Kandinsky5TransformerDecoderBlock)LTXVideoTransformerBlock)MochiTransformerBlock)QwenImageTransformerBlock)WanTransformerBlock)ZImageTransformerBlockr   )r   r   rO   r   visual_embed)r   r   r   )#models.attentionr^   r_   ,models.transformers.cogvideox_transformer_3dr`   $models.transformers.transformer_briara   rQ   rb   rR   rc   rd   -models.transformers.transformer_hunyuan_videore   rf   rg   rh   rS   ri   rj   )models.transformers.transformer_kandinskyrk   #models.transformers.transformer_ltxrl   %models.transformers.transformer_mochirm   rT   rn   rU   ro   rV   rp   rE   r6   r   )r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   r   r   r   rF      s&  											
rF   c                 O   s,   | dd }|d u rt|dkr|d }|S )Nr   r   r<   r$   )r%   r&   r'   r   r   r   r   %_skip_attention___ret___hidden_statesd  s   rz   c                 O   sX   | dd }| dd }|d u rt|dkr|d }|d u r(t|dkr(|d }||fS )Nr   encoder_hidden_statesr   r   ry   )r%   r&   r'   r   r{   r   r   r   =_skip_attention___ret___hidden_states___encoder_hidden_statesk  s   r|   )r   dataclassesr   typingr   r   r   r   r   r.   rE   rA   rF   rz   r|   rW   rX   rY   rZ   r[   r\   r]   r   r   r   r   <module>   s*   @ 9
