
    
3js              	       6   S SK r S SKJr  S SKrS SKrS SKJr  S SKJs  J	r
  SSKJrJr  SSKJr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  SSKJr  SSKJrJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'J(r(  \RR                  " \*5      r+S-S.S jjr,S-S.S jjr-S-S.S jjr.SSSSS\R^                  4S\0S\Rb                  \0-  S\24S jjr3 " S S5      r4 " S S\R                  Rj                  \5      r6 " S S \R                  Rj                  5      r7 " S! S"\Rj                  5      r8 " S# S$\Rj                  5      r9 " S% S&\R                  Rj                  5      r:\ " S' S(\Rj                  5      5       r;\ " S) S*\Rj                  5      5       r< " S+ S,\$\\\\5      r=g)/    N)Any   )ConfigMixinregister_to_config)FromOriginalModelMixinPeftAdapterMixin)apply_lora_scalelogging)maybe_allow_in_graph   )AttentionModuleMixinFeedForward)dispatch_attention_fn)
CacheMixin)TimestepEmbeddingapply_rotary_embget_timestep_embedding)Transformer2DModelOutput)
ModelMixin)AdaLayerNormContinuousAdaLayerNormZeroAdaLayerNormZeroSingleBriaAttentionc                    U R                  U5      nU R                  U5      nU R                  U5      nS =n=pxUb@  U R                  b3  U R	                  U5      nU R                  U5      nU R                  U5      nX4XVXx4$ N)to_qto_kto_vadded_kv_proj_dim
add_q_proj
add_k_proj
add_v_proj	attnhidden_statesencoder_hidden_statesquerykeyvalueencoder_queryencoder_keyencoder_values	            h/home/wildlama/miniconda3/lib/python3.13/site-packages/diffusers/models/transformers/transformer_bria.py_get_projectionsr.      s    IIm$E
))M
"CIIm$E266M6K(T-C-C-O(=>oo&;<(=>u[GG    c                     U R                  U5      R                  SSS9u  p4nS=n=pxUb3  [        U S5      (       a"  U R                  U5      R                  SSS9u  pgnX4XVXx4$ )Nr   dimr   to_added_qkv)to_qkvchunkhasattrr4   r#   s	            r-   _get_fused_projectionsr8   '   sy    M2888CE299M9K(WT>-J-J484E4EF[4\4b4bcdjl4b4m1Mu[GGr/   c                 T    U R                   (       a  [        XU5      $ [        XU5      $ r   )fused_projectionsr8   r.   )r$   r%   r&   s      r-   _get_qkv_projectionsr;   1   s'    %d;PQQD1FGGr/   g     @F      ?Tr3   posthetac           
         U S-  S:X  d   e[        U[        5      (       a  [        R                  " U5      n[        U[        R
                  5      (       a  [        R                  " U5      nX%-  nSU[        R                  " SU SXqR                  S9SU S-   U -  -  -  U-  n[        R                  " X5      nU(       ab  U(       a[  UR                  5       R                  SSS9R                  5       n	UR                  5       R                  SSS9R                  5       n
X4$ U(       a  [        R                  " UR                  5       UR                  5       /SS9R                  5       n	[        R                  " UR                  5       UR                  5       /SS9R                  5       n
X4$ [        R                  " [        R                  " U5      U5      nU$ )	a  
Precompute the frequency tensor for complex exponentials (cis) with given dimensions.

This function calculates a frequency tensor with complex exponentials using the given dimension 'dim' and the end
index 'end'. The 'theta' parameter scales the frequencies. The returned tensor contains complex values in complex64
data type.

Args:
    dim (`int`): Dimension of the frequency tensor.
    pos (`np.ndarray` or `int`): Position indices for the frequency tensor. [S] or scalar
    theta (`float`, *optional*, defaults to 10000.0):
        Scaling factor for frequency computation. Defaults to 10000.0.
    use_real (`bool`, *optional*):
        If True, return real part and imaginary part separately. Otherwise, return complex numbers.
    linear_factor (`float`, *optional*, defaults to 1.0):
        Scaling factor for the context extrapolation. Defaults to 1.0.
    ntk_factor (`float`, *optional*, defaults to 1.0):
        Scaling factor for the NTK-Aware RoPE. Defaults to 1.0.
    repeat_interleave_real (`bool`, *optional*, defaults to `True`):
        If `True` and `use_real`, real part and imaginary part are each interleaved with themselves to reach `dim`.
        Otherwise, they are concateanted with themselves.
    freqs_dtype (`torch.float32` or `torch.float64`, *optional*, defaults to `torch.float32`):
        the dtype of the frequency tensor.
Returns:
    `torch.Tensor`: Precomputed frequency tensor with complex exponentials. [S, D/2]
r   r   r<   )dtypedeviceN   r2   r1   )
isinstanceinttorcharangenpndarray
from_numpyrA   outercosrepeat_interleavefloatsincatpolar	ones_like)r3   r=   r>   use_reallinear_factor
ntk_factorrepeat_interleave_realfreqs_dtypefreqs	freqs_cos	freqs_sin	freqs_ciss               r-   get_1d_rotary_pos_embedr[   7   s   H 7a<<#sll3#rzz""s#EU\\!S!;zzRS_VY]^V^`cffg	i
	 

 KK#E*IIK11!1;AAC	IIK11!1;AAC	##	IIuyy{EIIK8bAGGI	IIuyy{EIIK8bAGGI	## KK 6>	r/   c                       \ rS rSrSrSrS r   SSSS\R                  S\R                  S\R                  S-  S	\R                  S-  S
\R                  4S jjr	Sr
g)BriaAttnProcessory   Nc                 r    [        [        S5      (       d"  [        U R                  R                   S35      eg )Nscaled_dot_product_attentionz; requires PyTorch 2.0. Please upgrade your pytorch version.)r7   FImportError	__class____name__)selfs    r-   __init__BriaAttnProcessor.__init__}   s3    q899!8!8 99tuvv :r/   r$   r   r%   r&   attention_maskimage_rotary_embreturnc           	      ~   [        XU5      u  pgppUR                  SUR                  S45      nUR                  SUR                  S45      nUR                  SUR                  S45      nUR                  U5      nUR	                  U5      nUR
                  b  U	R                  SUR                  S45      n	U
R                  SUR                  S45      n
UR                  SUR                  S45      nUR                  U	5      n	UR                  U
5      n
[        R                  " X/SS9n[        R                  " X/SS9n[        R                  " X/SS9nUb  [        XeSS9n[        XuSS9n[        UUUUU R                  U R                  S9nUR                  SS5      nUR                  UR                   5      nUb|  UR#                  UR$                  S   UR$                  S   UR$                  S   -
  /SS9u  p2UR&                  S   " U5      nUR&                  S   " U5      nUR)                  U5      nX#4$ U$ )	Nr1   rB   r2   )sequence_dim)	attn_maskbackendparallel_configr   r   r   )r;   	unflattenheadsnorm_qnorm_kr   norm_added_qnorm_added_krE   rO   r   r   _attention_backend_parallel_configflattentor@   split_with_sizesshapeto_out
to_add_out)re   r$   r%   r&   rh   ri   r'   r(   r)   r*   r+   r,   s               r-   __call__BriaAttnProcessor.__call__   sC    H\!6H
DE+ TZZ$45mmBR 01TZZ$45E"kk#!!-)33BR8HIM%//TZZ4DEK)33BR8HIM --m<M++K8KII}4!<E))[.A6CII}4!<E'$U1ME"3qIC-$++ 11
 &--a3%((5 ,3@3Q3Q&,,Q/1D1DQ1GJ_JeJefgJh1hiop 4R 40! !KKN=9M KKN=9M$(OO4I$J! 77  r/    NNN)rd   
__module____qualname____firstlineno__rv   rw   rf   rE   Tensorr~   __static_attributes__r   r/   r-   r]   r]   y   s    w /3.2048!8! ||8!  %||	8!
 t+8!  ,,-8! 
8! 8!r/   r]   c                   8  ^  \ rS rSr\r\/r             SS\S\S\S\S\	S\S-  S	\	S-  S
\	S\S\S\	S-  S\	S\	4U 4S jjjr
   SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  4
S jjrSrU =r$ )r      N	query_dimrq   dim_headdropoutbiasr   added_proj_biasout_biasepsout_dimcontext_pre_onlypre_onlyelementwise_affinec                   > [         TU ]  5         X0l        U
b  U
OX2-  U l        Xl        XPl        X@l        U
b  U
OUU l        Xl        Xl	        U
b  X-  OUU l
        X`l        Xpl        [        R                  R                  X9US9U l        [        R                  R                  X9US9U l        [        R                  R%                  XR                  US9U l        [        R                  R%                  XR                  US9U l        [        R                  R%                  XR                  US9U l        U R                  (       d  [        R                  R-                  / 5      U l        U R.                  R1                  [        R                  R%                  U R                  U R                  US95        U R.                  R1                  [        R                  R3                  U5      5        Ub  [        R                  R                  X9S9U l        [        R                  R                  X9S9U l        [        R                  R%                  X`R                  US9U l        [        R                  R%                  X`R                  US9U l        [        R                  R%                  X`R                  US9U l        [        R                  R%                  U R                  XS9U l        Uc  U RA                  5       nU RC                  U5        g )N)r   r   r   )r   )"superrf   head_dim	inner_dimr   use_biasr   r   r   r   rq   r   r   rE   nnRMSNormrr   rs   Linearr   r   r   
ModuleListr|   appendDropoutrt   ru   r    r!   r"   r}   _default_processor_clsset_processor)re   r   rq   r   r   r   r   r   r   r   r   r   r   r   	processorrc   s                  r-   rf   BriaAttention.__init__   s5   " 	 $+$7X=M"")"5w9 0 ,3,?W(U
!2.hh&&xM_&`hh&&xM_&`HHOOI~~DOI	HHOOI~~DOI	HHOOI~~DOI	}}((--b1DKKKuxxt~~t||RZ[\KKuxx//89( % 0 0 0 CD % 0 0 0 CD#hhoo.?VeofDO#hhoo.?VeofDO#hhoo.?VeofDO#hhoodnnioWDO335I9%r/   r%   r&   rh   ri   rj   c                 .   [        [        R                  " U R                  R                  5      R
                  R                  5       5      nSS1nUR                  5        VV	s/ s H  u  pX;  d  M  X;  d  M  UPM     n
nn	[        U
5      S:  a:  [        R                  SU
 SU R                  R                  R                   S35        UR                  5        VVs0 s H  u  pX;   d  M  X_M     nnnU R                  " XX#U40 UD6$ s  sn	nf s  snnf )Nip_adapter_masksip_hidden_statesr   zattention_kwargs z are not expected by z and will be ignored.)setinspect	signaturer   r~   
parameterskeysitemslenloggerwarningrc   rd   )re   r%   r&   rh   ri   kwargsattn_parametersquiet_attn_parametersk_unused_kwargsws               r-   forwardBriaAttention.forward   s     g//0G0GHSSXXZ[!35G H'-||~u~tq9QVWVt~u}!NN#M?2GH`H`HiHiGjj  A $*<<>J>41Q5I$!$>J~~d3HZjuntuu v
 Ks   #D2D9DD-D)r!   r    r"   r   r   r   r   r   rq   r   ru   rt   rs   rr   r   r   r   r}   r   r|   r   r   r   )   @   g        FNTTgh㈵>NNFTNr   )rd   r   r   r   r]   r   _available_processorsrD   rM   boolrf   rE   r   r   r   __classcell__rc   s   @r-   r   r      sC   . (,'+(,#'4&4& 4& 	4&
 4& 4& :4& 4& 4& 4& 4& +4& 4& !4& 4&r 6:.204v||v  %||d2v t+	v
  ,,-v 
v vr/   c                   t   ^  \ rS rSrS\S\\   4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	BriaEmbedNDi  r>   axes_dimc                 :   > [         TU ]  5         Xl        X l        g r   r   rf   r>   r   re   r>   r   rc   s      r-   rf   BriaEmbedND.__init__      
 r/   idsrj   c           
      J   UR                   S   n/ n/ nUR                  5       nUR                  R                  S:H  nU(       a  [        R
                  O[        R                  n[        U5       HS  n[        U R                  U   US S 2U4   U R                  SSUS9u  pUR                  U	5        UR                  U
5        MU     [        R                  " USS9R                  UR                  5      n[        R                  " USS9R                  UR                  5      nX4$ Nr1   mpsT)r>   rU   rR   rV   r2   r{   rM   rA   typerE   float32float64ranger[   r   r>   r   rO   ry   re   r   n_axescos_outsin_outr=   is_mpsrV   irK   rN   rX   rY   s                r-   r   BriaEmbedND.forward      2iikE)'-emm5==vA.a AqD	jj'+'HC NN3NN3  IIg2.11#**=	IIg2.11#**=	##r/   r   r>   rd   r   r   r   rD   listrf   rE   r   r   r   r   r   s   @r-   r   r     :    !c !T#Y !
$5<< $ELL $ $r/   r   c            	       H   ^  \ rS rSr S	S\S\S\S\4U 4S jjjrS rSr	U =r
$ )
BriaTimestepsi)  num_channelsflip_sin_to_cosdownscale_freq_shiftscalec                 ^   > [         TU ]  5         Xl        X l        X0l        X@l        XPl        g r   )r   rf   r   r   r   r   
time_theta)re   r   r   r   r   r   rc   s         r-   rf   BriaTimesteps.__init__*  s,     	(.$8!
$r/   c           	          [        UU R                  U R                  U R                  U R                  U R
                  S9nU$ )N)r   r   r   
max_period)r   r   r   r   r   r   )re   	timestepst_embs      r-   r   BriaTimesteps.forward4  s?    & 00!%!:!:**
 r/   )r   r   r   r   r   )rB   '  )rd   r   r   r   rD   r   rM   rf   r   r   r   r   s   @r-   r   r   )  s:    pu%%26%NS%\_% %	 	r/   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )BriaTimestepProjEmbeddingsi@  c                 b   > [         TU ]  5         [        SSSUS9U l        [	        SUS9U l        g )N   Tr   )r   r   r   r   )in_channelstime_embed_dim)r   rf   r   	time_projr   timestep_embedder)re   embedding_dimr   rc   s      r-   rf   #BriaTimestepProjEmbeddings.__init__A  s6    &dWa
 "3sS`!ar/   c                 d    U R                  U5      nU R                  UR                  US95      nU$ )Nr@   )r   r   ry   )re   timestepr@   timesteps_projtimesteps_embs        r-   r   "BriaTimestepProjEmbeddings.forwardI  s4    1..~/@/@u/@/MNr/   )r   r   )rd   r   r   r   rf   r   r   r   r   s   @r-   r   r   @  s    b r/   r   c                   t   ^  \ rS rSrS\S\\   4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	BriaPosEmbediO  r>   r   c                 :   > [         TU ]  5         Xl        X l        g r   r   r   s      r-   rf   BriaPosEmbed.__init__Q  r   r/   r   rj   c           
      J   UR                   S   n/ n/ nUR                  5       nUR                  R                  S:H  nU(       a  [        R
                  O[        R                  n[        U5       HS  n[        U R                  U   US S 2U4   U R                  SSUS9u  pUR                  U	5        UR                  U
5        MU     [        R                  " USS9R                  UR                  5      n[        R                  " USS9R                  UR                  5      nX4$ r   r   r   s                r-   r   BriaPosEmbed.forwardV  r   r/   r   r   r   s   @r-   r   r   O  r   r/   r   c                   &  ^  \ rS rSr SS\S\S\S\S\4
U 4S jjjr  SS	\R                  S
\R                  S\R                  S\
\R                  \R                  4   S-  S\\\4   S-  S\
\R                  \R                  4   4S jjrSrU =r$ )BriaTransformerBlockim  r3   num_attention_headsattention_head_dimqk_normr   c                 F  > [         TU ]  5         [        U5      U l        [        U5      U l        [        UUUUUSS[        5       US9	U l        [        R                  " USSS9U l
        [        XSS9U l        [        R                  " USSS9U l        [        XSS9U l        g )NFT)	r   r   r   rq   r   r   r   r   r   ư>r   r   zgelu-approximate)r3   dim_outactivation_fn)r   rf   r   norm1norm1_contextr   r]   r$   r   	LayerNormnorm2r   ffnorm2_context
ff_context)re   r3   r  r  r  r   rc   s         r-   rf   BriaTransformerBlock.__init__o  s     	%c*
-c2!!'%"')

	 \\#%TJ
#BTU\\#%TR%#J\]r/   Nr%   r&   tembri   attention_kwargsrj   c                     U R                  XS9u  pgpn
U R                  X#S9u  ppnU=(       d    0 nU R                  " SUUUS.UD6n[        U5      S:X  a  Uu  nnO[        U5      S:X  a  Uu  nnnUR	                  S5      W-  nUU-   nU R                  U5      nUSU	S S 2S 4   -   -  US S 2S 4   -   nU R                  U5      nU
R	                  S5      U-  nUU-   n[        U5      S:X  a  UW-   nUR	                  S5      W-  nUU-   nU R                  U5      nUSUS S 2S 4   -   -  US S 2S 4   -   nU R                  U5      nX/R	                  S5      U-  -   nUR                  [        R                  :X  a  UR                  SS5      nX!4$ )	Nemb)r%   r&   ri   r   r   rB       r   )r  r  r$   r   	unsqueezer  r  r  r  r@   rE   float16clip)re   r%   r&   r  ri   r  norm_hidden_statesgate_msa	shift_mlp	scale_mlpgate_mlpnorm_encoder_hidden_states
c_gate_msac_shift_mlpc_scale_mlp
c_gate_mlpattention_outputsattn_outputcontext_attn_outputip_attn_output	ff_outputcontext_ff_outputs                         r-   r   BriaTransformerBlock.forward  s    HLzzR_zGjDiHW[WiWi! Xj X
T"* ,1r !II 
,"<-
 	
  !Q&/@,K,"#q(?P<K,n ((+k9%3!ZZ6/1yD7I3IJYWXZ^W^M__GG./	&&q)I5	%	1 !Q&)N:M )22158KK 58K K%)%7%78M%N"%?1{STVZSZG[C[%\_jklnrkr_s%s" OO,FG 58L8LQ8ORc8c c &&%--7$9$>$>vu$M!$33r/   )r$   r  r  r  r  r  r  )rms_normr  NN)rd   r   r   r   rD   strrM   rf   rE   r   tupledictr   r   r   r   r   s   @r-   r  r  m  s     tx^^-0^FI^TW^kp^ ^> FJ2664||64  %||64 ll	64
  ell :;dB64 sCx.4/64 
u||U\\)	*64 64r/   r  c                      ^  \ rS rSrSS\S\S\S\4U 4S jjjr  SS\R                  S	\R                  S
\R                  S\	\R                  \R                  4   S-  S\
\\4   S-  S\	\R                  \R                  4   4S jjrSrU =r$ )BriaSingleTransformerBlocki  r3   r  r  	mlp_ratioc                 p  > [         TU ]  5         [        X-  5      U l        [	        U5      U l        [        R                  " XR                  5      U l        [        R                  " SS9U l
        [        R                  " XR                  -   U5      U l        [        5       n[        UUUUSUSSS9U l        g )Ntanh)approximateTr  )r   r   rq   r   r   r   r   r   )r   rf   rD   mlp_hidden_dimr   normr   r   proj_mlpGELUact_mlpproj_outr]   r   r$   )re   r3   r  r  r5  r   rc   s         r-   rf   #BriaSingleTransformerBlock.__init__  s    !#/2*3/			#':':;ww62		#(;(;";SA%'	!'%	
	r/   Nr%   r&   r  ri   r  rj   c                    UR                   S   n[        R                  " X!/SS9nUnU R                  XS9u  pU R	                  U R                  U5      5      n
U=(       d    0 nU R                  " SUUS.UD6n[        R                  " X/SS9nU	R                  S5      n	XR                  U5      -  nXq-   nUR                  [        R                  :X  a  UR                  SS5      nUS S 2S U24   US S 2US 24   pX!4$ )	NrB   r2   r  )r%   ri   r   r  r  r   )r{   rE   rO   r:  r=  r;  r$   r  r>  r@   r  r  )re   r%   r&   r  ri   r  text_seq_lenresidualr  gatemlp_hidden_statesr(  s               r-   r   "BriaSingleTransformerBlock.forward  s    -2215		#8"HaP #'99]9#E  LL7I)JK+1rii 
,-
 
 		;"BJ~~a }}];; 0%--/)..vu=M/<Q=M/NP]^_aman^nPo}$33r/   )r=  r$   r9  r:  r;  r>  )g      @r/  )rd   r   r   r   rD   rM   rf   rE   r   r1  r2  r0  r   r   r   r   r   s   @r-   r4  r4    s    
C 
c 
s 
_d 
 
6 FJ264||4  %||4 ll	4
  ell :;dB4 sCx.4/4 
u||U\\)	*4 4r/   r4  c                     ^  \ rS rSrSrSr\SSSSSS	S
SS/ SQSS4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\R                  S \R                  S!\R                  S\\\4   S-  S"\S#\\R                     \-  4S$ jj5       rS%rU =r$ )'BriaTransformer2DModeli  a  
The Transformer model introduced in Flux. Based on FluxPipeline with several changes:
- no pooled embeddings
- We use zero padding for prompts
- No guidance embedding since this is not a distilled version
Reference: https://blackforestlabs.ai/announcing-black-forest-labs/

Parameters:
    patch_size (`int`): Patch size to turn the input data into small patches.
    in_channels (`int`, *optional*, defaults to 16): The number of channels in the input.
    num_layers (`int`, *optional*, defaults to 18): The number of layers of MMDiT blocks to use.
    num_single_layers (`int`, *optional*, defaults to 18): The number of layers of single DiT blocks to use.
    attention_head_dim (`int`, *optional*, defaults to 64): The number of channels in each head.
    num_attention_heads (`int`, *optional*, defaults to 18): The number of heads to use for multi-head attention.
    joint_attention_dim (`int`, *optional*): The number of `encoder_hidden_states` dimensions to use.
    pooled_projection_dim (`int`): Number of dimensions to use when projecting the `pooled_projections`.
    guidance_embeds (`bool`, defaults to False): Whether to use guidance embeddings.
TrB   r      &         i   NF)   8   rM  r   
patch_sizer   
num_layersnum_single_layersr  r  joint_attention_dimpooled_projection_dimguidance_embedsaxes_dims_ropec                   > [         TU ]  5         X l        U R                  R                  U R                  R
                  -  U l        [        XS9U l        [        U R                  US9U l
        U	(       a  [        U R                  S9U l        [        R                  " U R                  R                  U R                  5      U l        [         R                  R                  U R                  R"                  U R                  5      U l        [        R&                  " [)        U R                  R*                  5       Vs/ s H@  n[-        U R                  U R                  R                  U R                  R
                  S9PMB     sn5      U l        [        R&                  " [)        U R                  R0                  5       Vs/ s H@  n[3        U R                  U R                  R                  U R                  R
                  S9PMB     sn5      U l        [7        U R                  U R                  SSS9U l        [        R                  " U R                  X-  U R                  -  SS	9U l        SU l        g s  snf s  snf )
N)r>   r   )r   r   )r   )r3   r  r  Fr  r  Tr   )r   rf   out_channelsconfigr  r  r   r   	pos_embedr   
time_embedguidance_embedr   r   rQ  context_embedderrE   r   
x_embedderr   r   rO  r  transformer_blocksrP  r4  single_transformer_blocksr   norm_outr>  gradient_checkpointing)re   rN  r   rO  rP  r  r  rQ  rR  rS  rT  
rope_thetar   r   rc   s                 r-   rf   BriaTransformer2DModel.__init__  s     	'884;;;Y;YY$:O44>>^hi"<4>>"ZD "		$++*I*I4>> Z((//$++*A*A4>>R"$-- t{{556 7A %(,(G(G'+{{'E'E
 7	#
 *, t{{<<= >A +(,(G(G'+{{'E'E
 >	*
& /t~~t~~bgmqr		$..*2IDL]L]2]dhi&+#1s   <AI4 AI9r  r%   r&   pooled_projectionsr   img_idstxt_idsguidancereturn_dictrj   c           	         U R                  U5      nUR                  UR                  5      nUb  UR                  UR                  5      nOSnU R                  XAR                  S9nU(       a  XR	                  XqR                  S9-  nU R                  U5      n[        UR                  5      S:X  a  US   n[        UR                  5      S:X  a  US   n[        R                  " Xe4SS9nU R                  U5      n[        U R                  5       H  u  nn[        R                  " 5       (       a*  U R                  (       a  U R                  UUUUUU5      u  p!OU" UUUUS9u  p!U
c  MZ  [        U R                  5      [        U
5      -  n[!        ["        R$                  " U5      5      nXUU-     -   nM     [        U R&                  5       H  u  nn[        R                  " 5       (       a*  U R                  (       a  U R                  UUUUUU5      u  p!OU" UUUUS9u  p!Uc  MZ  [        U R&                  5      [        U5      -  n[!        ["        R$                  " U5      5      nUSS2UR                  S   S2S4   XU-     -   USS2UR                  S   S2S4'   M     U R)                  X5      nU R+                  U5      nU	(       d  U4$ [-        US	9$ )
a  
The [`BriaTransformer2DModel`] forward method.

Args:
    hidden_states (`torch.FloatTensor` of shape `(batch size, channel, height, width)`):
        Input `hidden_states`.
    encoder_hidden_states (`torch.FloatTensor` of shape `(batch size, sequence_len, embed_dims)`):
        Conditional embeddings (embeddings computed from the input conditions such as prompts) to use.
    pooled_projections (`torch.FloatTensor` of shape `(batch_size, projection_dim)`): Embeddings projected
        from the embeddings of input conditions.
    timestep ( `torch.LongTensor`):
        Used to indicate denoising step.
    block_controlnet_hidden_states: (`list` of `torch.Tensor`):
        A list of tensors that if specified are added to the residuals of transformer blocks.
    attention_kwargs (`dict`, *optional*):
        A kwargs dictionary that if specified is passed along to the `AttentionProcessor` as defined under
        `self.processor` in
        [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
    return_dict (`bool`, *optional*, defaults to `True`):
        Whether or not to return a [`~models.transformer_2d.Transformer2DModelOutput`] instead of a plain
        tuple.

Returns:
    If `return_dict` is True, an [`~models.transformer_2d.Transformer2DModelOutput`] is returned, otherwise a
    `tuple` where the first element is the sample tensor.
Nr   r   r   r2   )r%   r&   r  ri   rB   .)sample)r\  ry   r@   rY  rZ  r[  r   r{   rE   rO   rX  	enumerater]  is_grad_enabledr`  _gradient_checkpointing_funcrD   rG   ceilr^  r_  r>  r   )re   r%   r&   rc  r   rd  re  rf  r  rg  controlnet_block_samplescontrolnet_single_block_samplesr  r   ri   index_blockblockinterval_controloutputs                      r-   r   BriaTransformer2DModel.forwardH  s   R 6;;}223{{=#6#67HHx/B/BC''8K8K'LLD $ 5 56K Lw}}"ajGw}}"ajGii*2>>#."+D,C,C"DK$$&&4+F+F7;7X7X!)$$84%} 8="/*?%5	84% (3#&t'>'>#?#F^B_#_ #&rww/?'@#A  -XhIh0i i/ #E2 #,D,J,J"KK$$&&4+F+F7;7X7X!)$$84%} 8="/*?%5	84% /:#&t'E'E#FMlIm#m #&rww/?'@#A !!%:%@%@%C%Es"JK5EU6UVW a!6!<!<Q!?!A3FG/ #L8 m:}-9'v66r/   )r[  r`  rZ  r   r_  rV  rX  r>  r^  rY  r]  r\  )
NNNNNNNTNN)rd   r   r   r   __doc__ _supports_gradient_checkpointingr   rD   r   r   rf   r	   rE   r   
LongTensorr2  r0  r   r1  r   r   r   r   r   s   @r-   rG  rG    s   & (,$ !#"%#%#'%) %$05,5, 5, 	5,
 5,  5, !5, !5,  #5, 5, S	5, 5,n () /3+/%) $ $!%26 !%(,{7||{7  %||{7 "LL	{7
 ""{7 {7 {7 ,,{7 sCx.4/{7 {7 
u||	7	7{7 *{7r/   rG  r   )r$   r   )>r   typingr   numpyrG   rE   torch.nnr   torch.nn.functional
functionalra   configuration_utilsr   r   loadersr   r   utilsr	   r
   utils.torch_utilsr   	attentionr   r   attention_dispatchr   cache_utilsr   
embeddingsr   r   r   modeling_outputsr   modeling_utilsr   normalizationr   r   r   
get_loggerrd   r   r.   r8   r;   r   rD   rH   rM   r[   r]   Moduler   r   r   r   r   r  r4  rG  r   r/   r-   <module>r     ss          B ? . 5 9 6 $ T T 7 ' \ \ 
		H	%HHH ?	?	c	? ?D@! @!FLvEHHOO%9 Lv^$%((// $<BII . $588?? $< Q4299 Q4 Q4h 44 44 44nJ7Z6FH^`j J7r/   