
    
3j"                        S SK Jr  S SKJr  S SK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Jr  S	S
KJr  S	SKJr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  \R>                  " \ 5      r!\ " S S\5      5       r" " S S\\\\
5      r#g)    )	dataclass)AnyN)nn   )ConfigMixinregister_to_config)PeftAdapterMixin)
BaseOutputapply_lora_scalelogging   )AttentionMixin)
PatchEmbedPixArtAlphaTextProjection)Transformer2DModelOutput)
ModelMixin)AdaLayerNormSingleRMSNorm)SanaTransformerBlock   )zero_modulec                   :    \ rS rSr% \\R                     \S'   Srg)SanaControlNetOutput$   controlnet_block_samples N)	__name__
__module____qualname____firstlineno__tupletorchTensor__annotations____static_attributes__r       f/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/models/controlnets/controlnet_sana.pyr   r   $   s    #ELL11r&   r   c            &         ^  \ rS rSrSrSS/rSS/r\                 S'S\S	\S-  S
\S\S\S\S-  S\S-  S\S-  S\S\	S\	S\
S\S\S\
S\	S\S-  SS4$U 4S jjj5       r\" S5           S(S\R                  S\R                  S\R                  S\R                  S \	S!\R                  S-  S"\R                  S-  S\\\4   S-  S#\
S\\R                  S$4   \-  4S% jj5       rS&rU =r$ ))SanaControlNetModel)   Tr   r   patch_embednormNin_channelsout_channelsnum_attention_headsattention_head_dim
num_layersnum_cross_attention_headscross_attention_head_dimcross_attention_dimcaption_channels	mlp_ratiodropoutattention_biassample_size
patch_sizenorm_elementwise_affinenorm_epsinterpolation_scalereturnc                   > [         TU ]  5         U=(       d    UnX4-  n[        UUUUUUUb  SOS S9U l        [	        U5      U l        [        U	US9U l        [        USSS9U l	        [        R                  " [        U5       Vs/ s H  n[        UUUUUUUUUUU
S9PM     sn5      U l        [        R                  " / 5      U l        [!        [        R"                  " UU5      5      U l        [        ['        U R                  5      5       H@  n[        R"                  " UU5      n[!        U5      nU R                  R)                  U5        MB     SU l        g s  snf )	Nsincos)heightwidthr:   r-   	embed_dimr=   pos_embed_type)in_featureshidden_sizegh㈵>T)epselementwise_affine)r7   r2   r3   r4   r8   r;   r<   r6   F)super__init__r   r+   r   
time_embedr   caption_projectionr   caption_normr   
ModuleListranger   transformer_blockscontrolnet_blocksr   Linearinput_blocklenappendgradient_checkpointing)selfr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   	inner_dim_controlnet_block	__class__s                        r'   rJ   SanaControlNetModel.__init__.   sb   * 	#2{'<	 &!# 3':'F8D
 -Y7";HXfo"p#I4DQ #%-- z* +A %'&#.G-E(;#1,C%' +#
( "$r!2&ryyI'FGs42234A!yyI>*+;<""))*:; 5
 ',#7s   Eattention_kwargshidden_statesencoder_hidden_statestimestepcontrolnet_condconditioning_scaleencoder_attention_maskattention_maskreturn_dict.c
                    UbB  UR                   S:X  a2  SUR                  UR                  5      -
  S-  nUR                  S5      nUbB  UR                   S:X  a2  SUR                  UR                  5      -
  S-  nUR                  S5      nUR                  u  ppU R
                  R                  nX-  X-  nnU R                  U5      nXR                  U R                  UR                  UR                  5      5      5      -   nU R                  X:UR                  S9u  nnU R                  U5      nUR                  U
SUR                  S   5      nU R                  U5      nSn[        R                  " 5       (       aC  U R                  (       a2  U R                    H!  nU R#                  UUUUUUUU5      nUU4-   nM#     O'U R                    H  nU" UUUUUUU5      nUU4-   nM     Sn[%        UU R&                  5       H  u  nnU" U5      nUU4-   nM     U Vs/ s H  nUU-  PM
     nnU	(       d  U4$ [)        US9$ s  snf )Nr   r   g     )
batch_sizehidden_dtyper   )r   )ndimtodtype	unsqueezeshapeconfigr:   r+   rS   rK   rL   viewrM   r"   is_grad_enabledrV   rP   _gradient_checkpointing_funcziprQ   r   )rW   r^   r_   r`   ra   rb   rc   rd   r]   re   rg   num_channelsrA   rB   ppost_patch_heightpost_patch_widthembedded_timestepblock_res_samplesblockcontrolnet_block_res_samplesblock_res_samplerZ   samples                           r'   forwardSanaControlNetModel.forwardx   s   . %.*=*=*B
  ."3"3M4G4G"HHHTN+55a8N "-2H2M2MQR2R&'*@*C*CMDWDW*X&X\d%d"%;%E%Ea%H" 3@2E2E/
&KK"".4k5:+((7%(8(89I9I/J\J\]j]p]pJq9r(ss&*oo-:M:M '6 '
## !% 7 78M N 5 : ::r=K^K^_aKb c $ 1 12G H   ""t'B'B00 $ A A!")*%$	! %68H$H! 1 00 %!")*%$! %68H$H! 1 (*$256GI_I_2`../0@A+GK[J]+]( 3a So'oRn1C(CRn$'o022#=YZZ (ps   I)rM   rL   rQ   rV   rS   r+   rK   rP   )    r   F   r         p   i  i 	  g      @g        Fr   r   Fgư>N)g      ?NNNT)r   r   r   r     _supports_gradient_checkpointing_no_split_modules _skip_layerwise_casting_patternsr   intfloatboolrJ   r   r"   r#   
LongTensordictstrr   r!   r   r~   r%   __classcell__)r[   s   @r'   r)   r)   )   s+   '+$/>(5v'>$ #%#%"$02/2*. $$(-*.%G,G, DjG, !	G,
  G, G, $':G, #&*G, !4ZG, G, G, G, G, G, G,  "&!G," #G,$ !4Z%G,& 
'G, G,R () %(6:.226 [[||[[  %||[[ ""	[[
 [[ "[[ !&t 3[[ t+[[ sCx.4/[[ [[ 
u||S 	!$<	<[[ *[[r&   r)   )$dataclassesr   typingr   r"   r   configuration_utilsr   r   loadersr	   utilsr
   r   r   	attentionr   
embeddingsr   r   modeling_outputsr   modeling_utilsr   normalizationr   r   transformers.sana_transformerr   
controlnetr   
get_loggerr   loggerr   r)   r   r&   r'   <module>r      sx    "    B ' : : & > 7 ' 7 @ # 
		H	% 2: 2 2k[*nkCS k[r&   