
    oiH                        S SK 7  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r SS	KJrJrJrJrJrJrJr  SSKJr   SSKJrJr  \R8                  R:                  R<                  rS r        S!S\RB                  S\"\#   S\"\RB                     S\"\RH                     S\"\%\RB                        S\"\&   S\"\&   S\"\RH                     4S jjr'SSKJ(r)   S"S jr* " S S\R8                  RV                  5      r, " S S\,5      r- " S S \.5      r/g!   \" \5      r\\" S
5      :  d  \" S\ S35      e GN= f!   \r\r N= f)#   )*)__version__    )
_get_dtypeVersion)dtype_from_config   ) build_sdpa_packed_attention_mask build_xformers_block_causal_maskget_packed_info_from_kwargsN)GemmaAttentionGemmaDecoderLayer
GemmaModelGemmaForCausalLMGemmaRotaryEmbeddingapply_rotary_pos_emb	repeat_kvz4.38z&Unsloth: Your transformers version of z does not support Gemma.
The minimum required version is 4.38.
Try `pip install --upgrade "transformers>=4.38"`
to obtain the latest transformers build, then restart this session.)*_prepare_4d_causal_attention_mask_for_sdpa)GemmaSdpaAttentionGemmaFlashAttention2c           	          UR                   u  p#n[        U R                  U5      n[        U R                  U5      n[	        USS9nXV-  n[        U R
                  XVS S 2S S 2S U24   S9nU$ )Ntanh)approximate)out)shapefast_linear_forward	gate_projup_projtorch_nn_functional_gelu	down_proj)selfXbsz_hdgateupdowns           N/home/james-whalen/.local/lib/python3.13/site-packages/unsloth/models/gemma.pyfast_geglu_inferencer*   @   sk     JCB t~~q1D	T\\1	-B#D?DJD t~~taCRCi=IDK    hidden_statescausal_maskattention_maskposition_idspast_key_valueoutput_attentions	use_cachepadding_maskc	                    U(       a  [        U S5      (       a  [        R                  U R                  R                  R
                  [        R                  SS9nUn[        U R                  X5      nU R                  " SUUUUUUUUS.U
D6u  pnX-  nUn[        U R                  X5      n[        U R                  U5      nX-  nOeUn[        U R                  USS9nU R                  " SUUUUUUUUS.U
D6u  pnX-   nUn[        U R                  USS9nU R                  U5      nX-   nU4nU(       a  X4-  nU(       a  X4-  nU$ )N_flag_for_generationzcuda:0dtypedevice)r,   r-   r.   r/   r0   r1   r2   r3   T)gemma )hasattrtorchemptyinput_layernormweightr   float32"fast_rms_layernorm_inference_gemma	self_attnpost_attention_layernormr*   mlpfast_rms_layernorm)r!   r,   r-   r.   r/   r0   r1   r2   r3   argskwargs
out_weightresidualself_attn_weightspresent_key_valueoutputss                   r)   GemmaDecoderLayer_fast_forwardrM   R   s    W$  [[  ''--u}}x ! 


 !:  -
 ?Cnn 
?
)%+'+ 1!'
?
 
?
;*; 	! !:))=
 -TXX}E! *  -
 ?Cnn 
?
)%+'+ 1!'
?
 
?
;*; !0 !*))=$
 / 0G''''Nr+   )sqrtc                   ^  [        U 4S j[        [        5       5       5      nUS S 2S T R                  24   nT R                  R                  U5      nUR                  [        [        T R                  5      5      5      nU[        R                  [        T R                  R                  5      UR                  S9-  nUR                  u  pn
US   S   R                  S   nUS:w  a  [!        UX4UU5      n/ n[#        T R                  R$                  5       H  u  p['        USS5      n[)        XU5      u  psUn[+        UR,                  XvU   5      n[/        UR0                  UX-   UU[3        UR0                  S5      (       + S9u  nnUU-  nUn[+        UR4                  UXo   5      n[7        UR8                  U5      nUU-  nUR;                  U5        M     [+        T R                  R<                  XvW   5      n[?        UU/ / S	9$ )
Nc              3      >#    U  Hf  n[         R                  TR                  R                  S    R                  R
                  [         R                  [         R                  U5      S9v   Mh     g7f)r   r6   N)r<   
empty_likemodellayersr>   r?   r@   r8   ).0xr!   s     r)   	<genexpr>4GemmaModel_fast_forward_inference.<locals>.<genexpr>   s\       %A 	JJa 0077MM\\!_ 	 	

 %s   A.A1)r7   r   r   _per_layer_device_indexpaged_attention)r,   r0   r/   r.   
do_prefill)last_hidden_statepast_key_valuesr,   
attentions) tuplerangeDEVICE_COUNTmax_seq_lengthrR   embed_tokenstor   r   configr<   tensor	math_sqrthidden_sizer7   r   r   	enumeraterS   getattrmove_to_devicerA   r>   %LlamaAttention_fast_forward_inferencerB   r;   rC   r*   rD   appendnormBaseModelOutputWithPast)r!   	input_idsr]   r/   r.   rG   out_weightsr,   r#   q_lenr%   seq_lennext_decoder_cacheidxdecoder_layerdevice_indexrI   rK   s   `                 r)   !GemmaModel_fast_forward_inferencerx      s+      |$ K !2t22223IJJ++I6M!$$Z0A$++0N%OPM U\\$++))*M4G4G "  M #((NCa #))"-G
axCL	
 '

(9(9:}.GK&4'
# !:))=l:S
 ,Q##),1'+$]%<%<>OPP,
(( 	! :22%

 -]->->N!!!"34; ;< 7

L(AM #),	 r+   c                   V   ^  \ rS rSr     SU 4S jjrS rS	S jrS	S jrS rSr	U =r
$ )
GemmaFixedRotaryEmbedding   c                 `  > [         TU ]  5         Ubk  UR                  n[        US5      (       a  UR                  OSn[        USS 5      nUc"  [        UR                  UR                  -  5      nSnUR                  nXl
        X l	        X0l        [        SU R                  5      U l        S /[        -  U l        S /[        -  U l        [#        [        5       HC  nU R%                  U R                  [&        R)                  U5      [&        R+                  5       S9  ME     [&        R-                  S[&        R.                  R1                  5       [&        R+                  5       S9U l        [&        R-                  S[&        R.                  R1                  5       [&        R+                  5       S9U l        g )	Npartial_rotary_factor      ?head_dimcudai   rs   r8   r7   r   r8   r7   )super__init__
rope_thetar;   r}   rj   intrh   num_attention_headsmax_position_embeddingsdimbasemincurrent_rope_sizera   multi_gpu_cos_cachedmulti_gpu_sin_cachedr`   _set_cos_sin_cacher<   r8   get_default_dtyper=   r   current_device
cos_cached
sin_cached)r!   r   r   r   r8   re   r}   	__class__s          r)   r   "GemmaFixedRotaryEmbedding.__init__   su    	$$D 6#:;; ,, "
 &*d3C{6--1K1KKMF&,&D&D#'>$	!$Xt/K/K!L%)F\$9!%)F\$9! L)F##00f-//1 $  *  ++

113U=T=T=V & 
  ++

113U=T=T=V & 
r+   c                    Xl         SU R                  -  [        R                  U R                  S-  [        R                  SS9R                  5       -  nU R                  U-  n[        R                  U R                   S[        R                  S9R                  5       nUS   US S S S 24   -  nUR                  S5      n[        R                  Xw4SS	9nUR                  5       R                  US
S9n	UR                  5       R                  US
S9n
XR                  UR                  '   XR                  UR                  '   X4$ Ng       @r	   cpur6   r   ).Nr   )r   T)r8   non_blocking)r   r   r<   arangeint64floatr   squeezecatcosrd   sinr   indexr   r!   rs   r8   r7   freq_exponents	timescale	positionsradians_newembr   r   s              r)   r   ,GemmaFixedRotaryEmbedding._set_cos_sin_cache(  s    ") .LLQeLLRRT
 II~-	LL""UEKK ! 

%' 	  	*YtT1}-EE!))!,ii2"i=ggillF4l@ggillF4l@25!!&,,/25!!&,,/xr+   c                     Ub3  X0R                   :  a$  U R                  X1R                  UR                  S9  UR                  R                  nU R
                  U   S U U R                  U   S U 4$ )Nr   )r   r   r8   r7   r   r   r   )r!   rU   r/   rs   rw   s        r)   forward!GemmaFixedRotaryEmbedding.forward@  st    7-C-C#C##gRSRYRY#Zxx~~ %%l3HW=%%l3HW=
 	
r+   c                     Uc  [         R                  R                  5       nU R                  U   U R                  U   4$ N)r<   r   r   r   r   )r!   rs   rw   s      r)   
get_cached$GemmaFixedRotaryEmbedding.get_cachedL  sB     ::446L((68Q8Q9
 
 	
r+   c                    X R                   ::  a  g [        R                  " US-  5      S-  U l         [        [        5       H;  nU R                  U R                   [        R                  U5      UR                  S9  M=     g )Ni    r   )	r   mathceilr`   ra   r   r<   r8   r7   )r!   rU   rs   r8   s       r)   extend_rope_embedding/GemmaFixedRotaryEmbedding.extend_rope_embeddingS  sg    ,,,!%7T>!:T!AL)F##&&f1Eqww $  *r+   )r   r   r   r   r   r   r   r   )N   '  NN)NN)__name__
__module____qualname____firstlineno__r   r   r   r   r   __static_attributes____classcell__r   s   @r)   rz   rz      s3     "&,
\0


 r+   rz   c                   B   ^  \ rS rSrSr      SU 4S jjrS rSrU =r$ )&GemmaFixedLinearScalingRotaryEmbeddingi^  z[LlamaRotaryEmbedding extended with linear scaling. Credits to the Reddit user /u/kaiokendevc                 4   > XPl         [        TU ]	  UUUUUS9  g )N)r   r   r   r8   re   )scaling_factorr   r   )r!   r   r   r   r8   r   re   r   s          r)   r   /GemmaFixedLinearScalingRotaryEmbedding.__init__d  s,     -&= 	 	
r+   c                    Xl         SU R                  -  [        R                  U R                  S-  [        R                  SS9R                  5       -  nU R                  U-  n[        R                  U R                   S[        R                  S9R                  5       nX`R                  -  nUS   US S S S 24   -  nUR                  S5      n[        R                  Xw4SS	9nUR                  5       R                  US
S9n	UR                  5       R                  US
S9n
XR                  UR                  '   XR                  UR                  '   X4$ r   )r   r   r<   r   r   r   r   r   r   r   r   rd   r   r   r   r   r   s              r)   r   9GemmaFixedLinearScalingRotaryEmbedding._set_cos_sin_cachev  s-    ") .LLQeLLRRT
 II~-	LL""UEKK ! 

%' 	  3 33		*YtT1}-EE!))!,ii2"i=ggillF4l@ggillF4l@25!!&,,/25!!&,,/xr+   )r   r   )Nr   r   Nr~   N)	r   r   r   r   __doc__r   r   r   r   r   s   @r)   r   r   ^  s)    e "&
$ r+   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)FastGemmaModeli  c                     [        S[        [        [        S9u  pU b(  [	        U[        5       5        [        U 5      [        l        [        [        l	        [        [        l	        [        [        l	        [        [        l	        [        [        l	        [!        ["        5      [$        l	        [&        [(        l	        [+        [$        5        SS Kn[        UR.                  R0                  R2                  l        g )Nr9   )
model_namerope_modulescaled_rope_moduleattention_moduler   )patch_linear_scalingrz   r   r   execglobalsevalr   LlamaAttention_fast_forwardr   r   r   rM   r   LlamaModel_fast_forwardr   CausalLM_fast_forwardrx   r   PeftModel_fast_forwardPeftModelForCausalLM!fix_prepare_inputs_for_generation(transformers.models.gemma.modeling_gemmamodelsr9   modeling_gemmar   )	init_namefunctiontransformerss      r)   	pre_patchFastGemmaModel.pre_patch  s    2 3!G-	
	  79%&*9oN#!<%@"'B$$B!4
#8-$
  (>$)*:; 	8 & 	!!00E 	r+   c                    [        XSS9u  pSSKJn  U R                  5        H5  u  p4SU;   d  SU;   a  UR	                  S5        M$  UR	                  S5        M7     U R                  5        H;  u  p5[        XR5      (       d  M  [        US5      (       a  M*  UR                  Ul	        M=     SS K
n[        S	5       H1  nUR                  5         [        R                  R                  5         M3     X4$ )
NF)downcast_roper   )GemmaRMSNormz.lora_A.z.lora_B.Tvariance_epsilon   )patch_model_and_tokenizerr   r   named_parametersrequires_grad_named_modules
isinstancer;   epsr   gcr`   collectr<   r   empty_cache)rR   	tokenizerr   nameparammoduler   r$   s           r)   
post_patchFastGemmaModel.post_patch  s     5e
 	J !113KDT!Z4%7$$T*$$U+	 4 "//1LD&// v'9::

 + 2 	qAJJLJJ""$  r+   r:   N)r   r   r   r   staticmethodr   r   r   r:   r+   r)   r   r     s)     B &  & r+   r   )NNNNFFNr   )0llama_utilsr   unsloth_zoo.utilsr   r   unsloth_zoo.hf_utilsr   utils.packingr
   r   r   r   r   r   r   r   r   r   r   r   transformers_versionImportError%transformers.modeling_attn_mask_utilsr   r   r   r<   nn
functionalgelur   r*   TensorOptionalBlockDiagonalCausalMask
LongTensorTupleboolrM   rN   rg   rx   Modulerz   r   FastLlamaModelr   r:   r+   r)   <module>r     s     1 2 
 
  &
* !88..33 * 6:-1/348(- %/3L<<L 12L U\\*	L
 5++,L U5<<01L  ~L ~L 5++,L^ # K`e eP/-F /dJ ^ J Y
"#7876?245I4J KR S
 	
 3$*')s   D D? "D<?E