
    oi$                         S SK JrJrJrJrJrJrJrJr  S SK	r	S SK
Jr  SSKJrJr  SSKJrJrJr  S r \S\	R(                  S\	R(                  4S	 j5       rS
 r S r S r S r \R4                  " \5        S r \R4                  " \5        g)    )AnyListOptionalTupleUnionDictSetCallableN   )TEMPORARY_PATCHEStorch_compile)patch_functionKWARGS_TYPEraise_errorc                       SS K n U R                  R                  R                    S n [        U R                  R                  R                  SUSS9  g ! [         a  n[        SU5      s S nA$ S nAff = f)Nr   z#timm.layers.conv_bn_act.ConvNormActc                 |   UR                   nUR                  [        R                  5      n[        R                  " S[        R                  SS9   U R                  U5      nS S S 5        U R                  U5      n[        U SS 5      nUb  U R                  U5      nUR                  U5      $ ! , (       d  f       NQ= f)NcudaTdevice_typedtypeenabledaa)	r   totorchfloat32autocastconvbngetattrr   )selfx	old_dtyper   s       _/home/james-whalen/.local/lib/python3.13/site-packages/unsloth_zoo/temporary_patches/gemma3n.pyforward1patch_Gemma3nConvNormAct_forward.<locals>.forward#   s    GG	DD^^&%--SWX		!A YGGAJT4&>
AttI YXs   B--
B;r$   T	fullgraph)timm.layers.conv_bn_actlayersconv_bn_actConvNormAct	Exceptionr   r   )timmer$   s      r#    patch_Gemma3nConvNormAct_forwardr/      si    E&++
	 	4;;**66	7X\]  E@!DDEs   $A 
A5A0*A50A5r!   returnc                     U R                  UR                  5       5      U R                  R                  5       -  nUR                  U5      $ )N)_normfloatweighttype_as)r    r!   outputs      r#   Gemma3nRMSNorm_forwardr7   3   s9     ZZ	"T[[%6%6%88F>>!    c                  X    SS K n SSK Jn    SS[        [
        R                     S[        [
        R                     S[
        R                  4S jjn [        U R                  R                  R                  R                  SUS	S
9  g ! [         a  n[        SU5      s S nA$ S nAff = f)Nr   )Gemma3nMultimodalEmbedderz2timm.layers.multimodal_embedder.MultimodalEmbedder	input_idsinputs_embedsr0   c                    US L US L-  (       a  [        S5      eUb  [        U R                  U5      nO3U R                  XR                  -
  5      n[        U R
                  U5      nUR                  nUR                  [        R                  5      n[        R                  " S[        R                  SS9   U R                  U5      nS S S 5        WR                  U5      n[        U R                  U5      $ ! , (       d  f       N5= f)Nz:You must specify exactly one of input_ids or inputs_embedsr   Tr   )
ValueErrorr7   soft_embedding_norm	embeddingvocab_offsethard_embedding_normr   r   r   r   r   embedding_projectionembedding_post_projection_norm)r    r;   r<   emb_normhard_embr"   emb_norm_projs          r#   !Gemma3nMultimodalEmbedder_forwardRpatch_Gemma3nMultimodalEmbedder_forward.<locals>.Gemma3nMultimodalEmbedder_forwardA   s    
 -t";<YZZ$-d.F.FVH~~i2C2C&CDH-d.F.FQHNN	;;u}}-^^&%--SWX 55h?M Y%((3%d&I&I=YY	 YXs   6C77
Dr$   Tr&   NN),transformers.models.gemma3n.modeling_gemma3nr:   r,   r   r   r   
LongTensorTensorr   modelsgemma3nmodeling_gemma3n)transformersr:   r.   rH   s       r#   'patch_Gemma3nMultimodalEmbedder_forwardrR   :   s    T;Z 1504ZE,,-Z  -Z 
	Z* 	<&&..??YY[d  gH  VZ  [5  TOQRSSTs   
B	 	
B)B$B)$B)c                      SS K n SSK Jn  S[        R
                  S[        R
                  4S jn [        U R                  R                  R                  R                  SUSS	9  g ! [         a  n[        SU5      s S nA$ S nAff = f)
Nr   Gemma3nTextAltUpzGemma3nTextAltUp.predicthidden_statesr0   c                    U R                   R                  nUR                  U5      nXR                  R                     n[        U R                  U5      U R                   -  nU R                  U5      n[        R                  " UR                  5       5      R                  U5      nU R                  (       ap  U R                  R                  bY  U R                  R                  R                   R#                  U R                  R                  * U R                  R                  5        U R                  U5      R$                  " / UR&                  S S QU R                  R(                  PU R                  R(                  P76 R+                  SSSS5      n[        R,                  " UR+                  SSSS5      U5      nUR+                  SSSS5      nX-  nUR/                  5       R                  U5      $ )Nr   r         )router_input_scaler   r   configaltup_active_idxr7   router_normmodality_routerr   tanhr3   r5   trainingaltup_coef_clipprediction_coefsr4   dataclamp_reshapeshapealtup_num_inputspermutematmul
contiguous)	r    rV   	new_dtyper!   router_inputsrouted
modalities	all_coefspredictionss	            r#   predict/patch_Gemma3nTextAltUp_predict.<locals>.predictb   s   ++11	%((3++667.t/?/?CdF]F]]%%m4ZZ/77:
==T[[88D!!((--44dkk6Q6Q5QSWS^S^SnSno !!*-W i &&s+i-1[[-I-IiKO;;KgKgiWQ1a  	 ll=#8#8Aq!#DiP!))!Q15$%%'//>>r8   rr   Tr&   )
rK   rU   r,   r   r   rM   r   rN   rO   rP   )rQ   rU   r.   rr   s       r#   patch_Gemma3nTextAltUp_predictrt   [   sv    :;Q?U\\ ?ell ?. 	<&&..??PPR[]drvw7  :5q99:s   
A' '
B1B<BBc                       [        5         [        5         [        5         g ! [         a  n [	        SU 5      s S n A $ S n A ff = f)N patch_Gemma3nConv_Embed_forwards)r/   rR   rt   r,   r   )r.   s    r#   rv   rv   }   s:    B(*/1&( B=qAABs   ! 
A<AAc                  <    SS K n SSK Jn  [	        US5      (       a>  [        U R                  R                  R                  R                  SUR                  SS9  [	        US5      (       a>  [        U R                  R                  R                  R                  SUR                  SS9  [	        US5      (       a?  [        U R                  R                  R                  R                  SUR                  SS9  g g ! [         a  n[        SU5      s S nA$ S nAff = f)	Nr   rT   rU   rr   Tr&   correctscale_corrected_output)rK   rU   r,   r   hasattrr   rN   rO   rP   rr   rx   ry   )rQ   rU   r.   s      r#    patch_Gemma3nTextAltUp_functionsr{      s   2;Q ++|**22CCTTV_aqayay  HL  	M++|**22CCTTV_aqayay  HL  	M!9::|**22CCTTVn  qA  qX  qX  fj  	k ;  2-q112s   
C; ;
DDDDc            
      x    SS K n SSK Jn    SS[        R
                  S[        R                  S[        [        R                     S[        [        R                     4S jjn [        U R                  R                  R                  R                  S	US
S9  g ! [         a  n[        SU5      s S nA$ S nAff = f)Nr   )Gemma3nModelz"Gemma3nModel.get_place_holder_maskr;   r<   image_featuresaudio_featuresc           	         Uc  X R                  5       " [        R                  " U R                  R                  [        R
                  UR                  S95      :H  nUR                  S5      nUU R                  5       " [        R                  " U R                  R                  [        R
                  UR                  S95      :H  R                  S5      nO0XR                  R                  :H  nXR                  R                  :H  nUR                  5       nUR                  S5      R                  U5      R                  UR                  5      nUbR  X%   R                  5       UR                  5       :w  a.  [        SU SUR                  S   UR                  S   -   35      eUR                  5       nUR                  S5      R                  U5      R                  UR                  5      nUbR  X&   R                  5       UR                  5       :w  a.  [        SU SUR                  S   UR                  S   -   35      eXV4$ )z
Obtains multimodal placeholdr mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
equal to the length of multimodal features. If the lengths are different, an error is raised.
)r   devicerX   z6Image features and image tokens do not match: tokens: z, features r   r   z6Audio features and image tokens do not match: tokens: )get_input_embeddingsr   tensorr\   image_token_idlongr   allaudio_token_idsum	unsqueeze	expand_asr   numelr>   rg   )	r    r;   r<   r~   r   special_image_maskspecial_audio_maskn_image_tokensn_audio_tokenss	            r#   get_placeholder_maskEpatch_Gemma3nModel_get_placeholder_mask.<locals>.get_placeholder_mask   sX    !.2K2K2MT[[77uzzR_RfRfg3 " "4!7!7!;,,.LL!;!;5::VcVjVjk c"g  "+kk.H.H!H!*kk.H.H!H+//1/99"=GGVYYZgZnZno%-*K*Q*Q*SWeWkWkWm*mHHXXcdrdxdxyzd{  M  S  S  TU  V  eV  dW  X  ,//1/99"=GGVYYZgZnZno%-*K*Q*Q*SWeWkWkWm*mHHXXcdrdxdxyzd{  M  S  S  TU  V  eV  dW  X  "55r8   r   relaxed)match_levelrJ   )rK   r}   r,   r   r   rL   FloatTensorr   r   rN   rO   rP   )rQ   r}   r.   r   s       r#   'patch_Gemma3nModel_get_placeholder_maskr      s    D;M 7;6:(6##(6 (((6 !!2!23	(6
 !!2!23(6R 	<&&..??LLNdfz  IR  S[  D?CCDs   
B 
B9#B4.B94B9)typingr   r   r   r   r   r   r	   r
   r   torch.nnnncommonr   r   utilsr   r   r   r/   rM   r7   rR   rt   rv   r{   appendr    r8   r#   <module>r      s   " J I I   4 ^(  ELL U\\  [> x@ B k    9 :1Sd    @ Ar8   