Ë
    ÜÓ^j0}  ã                   ó^  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZmZmZmZmZmZmZ ddlmZ  ej2                  e«      Zdad„ Z G d„ dej<                  j>                  «      Z d'd„Z!d'd„Z" G d„ dejF                  «      Z$ G d„ dejF                  «      Z% G d„ de«      Z&e G d„ de«      «       Z' ed¬«      e G d„ de«      «       «       Z( ed¬«      e G d„ d e«      «       «       Z)e G d!„ d"e'«      «       Z* ed#¬«       G d$„ d%e'e
«      «       Z+g d&¢Z,y)(zPyTorch RWKV model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚGenerationMixin)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚis_bitsandbytes_availableÚis_kernels_availableÚis_ninja_availableÚis_torch_cuda_availableÚloggingé   )Ú
RwkvConfigc                 ód   — t        «       st        d«      ‚ddlm}  |dd¬«      a| t        _        y )NzFkernels is not installed, please install it with `pip install kernels`r   )Ú
get_kernelzkernels-community/rwkvr   )Úversion)r   ÚImportErrorÚintegrations.hub_kernelsr   Úrwkv_cuda_kernelÚmax_seq_length)Úcontext_lengthr   s     úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/rwkv/modeling_rwkv.pyÚload_wkv_cuda_kernelr   -   s.   € äÔ!ÜÐbÓcÐcå6á!Ð":ÀAÔFÐØ&4ÔÕ#ó    c                   ó0   — e Zd Zedd„«       Zedd„«       Zy)ÚRwkvLinearAttentionNc                 óê  — |j                  «       \  }}}	|t        j                  kD  r t        d|› dt        j                  › d�«      ‚||	z  t	        |	d«      z  dk7  rt        d|› d|	› dt	        |	d«      › d	�«      ‚|j
                  | _        |j                  j                  d
k7  sK|j                  j                  d
k7  s2|j                  j                  d
k7  s|j                  j                  d
k7  rt        d«      ‚t        j                  |j                  «       j                  «       «       }|j
                  t        j                  k(  r0|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }|j                  «       }t        j                  |t        j                  ¬«      }
|s|�æ|€Vt        j                   ||	dt        j"                  |j                  t        j                  ¬«      }|d d …d d …dfxx   dz  cc<   nBt        j$                  |D �cg c]  }|j'                  d«      ‘Œ c}d¬«      j                  «       }|j
                  t        j(                  k(  rt        j*                  }nt        j,                  } ||||||
|«       nI|j
                  t        j(                  k(  rt        j.                  nt        j0                  } ||||||
«       | j3                  |||||
«       |�4t        j4                  |dd¬«      D �cg c]  }|j7                  d«      ‘Œ }}|
j9                  | j                  «      |fS c c}w c c}w )NzCannot process a batch with z+ tokens at the same time, use a maximum of z with this model.é    r   zThe product of batch size (z) and hidden size (z") needs to be a round multiple of ú.ÚcudazUCalling the CUDA kernel for wkv attention requires all tensors to be on CUDA devices.©Úmemory_formatr   )ÚdtypeÚdevicer%   é   ç±¡*ÓÎÒG)Údim)Úsizer   r   Ú
ValueErrorÚminr&   Úinput_dtyper'   ÚtypeÚtorchÚexpÚfloatÚ
contiguousÚfloat16Ú
empty_likeÚcontiguous_formatÚzerosÚfloat32ÚcatÚ	unsqueezeÚbfloat16Úforward_with_state_bf16Úforward_with_stateÚforward_bf16ÚforwardÚsave_for_backwardÚchunkÚsqueezeÚto)ÚctxÚ
time_decayÚ
time_firstÚkeyÚvalueÚstateÚreturn_stateÚ
batch_sizeÚseq_lenÚhidden_sizeÚoutputÚsÚforward_funcs                r   r?   zRwkvLinearAttention.forward9   sì  € à+.¯8©8«:Ñ(ˆ
�G˜[ØÔ%×4Ñ4Ò4ÜØ.¨w¨iÐ7bÜ#×2Ñ2Ð3Ð3DðFóð ð ˜Ñ#¤c¨+°rÓ&:Ñ:¸aÒ?ÜØ-¨j¨\Ð9LÈ[ÈMð ZÜ" ;°Ó3Ð4°Að7óð ð
 Ÿ)™)ˆŒð ×Ñ×"Ñ" fÒ,Ø× Ñ ×%Ñ%¨Ò/Ø�z‰z�‰ &Ò(Ø�|‰|× Ñ  FÒ*äÐtÓuÐuä—i‘i 
× 0Ñ 0Ó 2× =Ñ =Ó ?Ó@Ð@ˆ
Ø�9‰9œŸ™Ò%Ø#×)Ñ)Ó+ˆJØ—)‘)“+ˆCØ—K‘K“MˆEØ×*Ñ*Ó,ˆ
Ø�n‰nÓˆØ× Ñ Ó"ˆä×!Ñ! #´U×5LÑ5LÔMˆÙ˜5Ð,Øˆ}ÜŸ™ØØØÜŸ-™-ØŸ:™:Ü"'×"9Ñ"9ô�ð ’aš˜A�g“ $Ñ&”äŸ	™	¸5Ö"A°a 1§;¡;¨q¥>Ò"AÀqÔI×TÑTÓV�Ø�y‰yœEŸN™NÒ*Ü/×GÑG‘ä/×BÑB�Ù˜ Z°°e¸VÀUÕKà<?¿I¹IÌÏÉÒ<WÔ+×8Ò8Ô]m×]uÑ]uˆLÙ˜ Z°°e¸VÔDà×Ñ˜j¨*°c¸5À&ÔIàÐÜ+0¯;©;°u¸aÀQÔ+GÖH a�Q—Y‘Y˜q•\ÐHˆEÐHà�y‰y˜Ÿ™Ó)¨5Ð0Ð0ùò #Bùò Is   È?M+Ì4M0c                 ó<  — | j                   }| j                  \  }}}}}t        j                  |t        j                  |t        j
                  k(  rt        j
                  nt        j                  ¬«      }	t        j                  |t        j                  ¬«      }
t        j                  |t        j                  ¬«      }t        j                  |t        j                  ¬«      }|t        j                  k(  r|j                  «       }|t        j
                  k(  rt        j                  nt        j                  } |||||||j                  «       |	|
||«
       |	j                  |«      |
j                  |«      |j                  |«      |j                  |«      d d fS )N)r%   r&   r$   )r.   Úsaved_tensorsr0   r5   r6   r;   r8   r4   r2   r   Úbackward_bf16Úbackwardr3   rC   )rD   Úg_outputÚg_stater.   rE   rF   rG   rH   rN   Úg_time_decayÚg_time_firstÚg_keyÚg_valueÚbackward_funcs                 r   rT   zRwkvLinearAttention.backwardx   sJ  € ð —o‘oˆà58×5FÑ5FÑ2ˆ
�J  U¨Fä×'Ñ'ØÜ×1Ñ1Ø$/´5·>±>Ò$A”%—.’.ÄuÇ}Á}ô
ˆô
 ×'Ñ'¨
Ä%×BYÑBYÔZˆÜ× Ñ  ´E×4KÑ4KÔLˆÜ×"Ñ" 5¼×8OÑ8OÔPˆàœ%Ÿ-™-Ò'Ø—~‘~Ó'ˆHØ:EÌÏÉÒ:WÔ(×6Ò6Ô]m×]vÑ]vˆÙØØØØØØ×ÑÓ!ØØØØô	
ð �O‰O˜KÓ(Ø�O‰O˜KÓ(Ø�H‰H�[Ó!Ø�J‰J�{Ó#ØØð
ð 	
r   ©NF©N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr?   rT   © r   r   r   r   8   s)   „ Øò<1ó ð<1ð| ò%
ó ñ%
r   r   c                 óè  — |j                  «       \  }}}t        j                  |«      }|€ˆt        j                  |d d …df   t        j                  ¬«      }	t        j                  |d d …df   t        j                  ¬«      }
t        j                  |d d …df   t        j                  ¬«      dz
  }n|\  }	}
}t        j                  | «       } t        |«      D �]  }|d d …|f   j                  «       }|d d …|f   }t        j                  |||z   «      }t        j                  ||z
  «      }t        j                  ||z   |z
  «      }||	z  ||z  z   }||
z  |z   }||z  j                  |j                  «      |d d …|f<   t        j                  || z   |«      }t        j                  || z   |z
  «      }t        j                  ||z
  «      }||	z  ||z  z   }	||
z  |z   }
|}�Œ |s|�|	|
|g}||fS )Nr   )r&   r)   )
r+   r0   Ú
zeros_liker8   r1   Úranger2   ÚmaximumrC   r&   )rE   rF   rG   rH   rI   rJ   Ú_Ú
seq_lengthrN   Ú	num_stateÚ	den_stateÚ	max_stateÚcurrent_indexÚcurrent_keyÚcurrent_valueÚmax_for_outputÚe1Úe2Ú	numeratorÚdenominatorÚmax_for_states                        r   Úrwkv_linear_attention_cpuru   ¢   sò  € ð —x‘x“zÑ€A€z�1Ü×Ñ˜cÓ"€Fà€}Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDˆ	Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDˆ	Ü×$Ñ$ Sª¨A¨¡Y´e·m±mÔDÀtÑK‰	à*/Ñ'ˆ	�9˜iô
 —)‘)˜JÓ'Ð'€Jä˜zÓ*ó "ˆØš!˜]Ð*Ñ+×1Ñ1Ó3ˆØša Ð.Ñ/ˆô Ÿ™ y°+À
Ñ2JÓKˆÜ�Y‰Y�y >Ñ1Ó2ˆÜ�Y‰Y�{ ZÑ/°.Ñ@ÓAˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜9‘n rÑ)ˆØ$-°Ñ$;×#?Ñ#?ÀÇÁÓ#MˆŠq�-ÐÑ ô Ÿ™ i°*Ñ&<¸kÓJˆÜ�Y‰Y�y :Ñ-°Ñ=Ó>ˆÜ�Y‰Y�{ ]Ñ2Ó3ˆØ˜‘N R¨-Ñ%7Ñ7ˆ	Ø˜‘N RÑ'ˆ	Ø!Š	ð%"ñ( �uÐ(Ø˜I yÐ1ˆà�5ˆ=Ðr   c                 óÀ   — t        d„ | |||fD «       «      }|j                  d«      dk(  }t        �|s|rt        | |||||¬«      S t        j                  | |||||«      S )Nc              3   óN   K  — | ]  }|j                   j                  d k7  –— Œ y­w)r#   N)r'   r/   )Ú.0Úts     r   ú	<genexpr>z(rwkv_linear_attention.<locals>.<genexpr>Ï   s   è ø€ ÒX¨a�!—(‘(—-‘- 6Õ)ÑXùs   ‚#%r   ©rI   rJ   )Úanyr+   r   ru   r   Úapply)rE   rF   rG   rH   rI   rJ   Úno_cudaÚ	one_tokens           r   Úrwkv_linear_attentionr€   Î   sm   € ÜÑX°JÀ
ÈCÐQVÐ3WÔXÓX€Gð —‘˜“˜qÑ €IÜÐ¡7©iÜ(¨°ZÀÀeÐSXÐgsÔtÐtä"×(Ñ(¨°ZÀÀeÈUÐT`ÓaÐar   c                   ó0   ‡ — e Zd Zdˆ fd„	Zdd„Zdd„Zˆ xZS )ÚRwkvSelfAttentionc                 ór  •— t         ‰| �  «        || _        t        d uxr t        j                  |j
                  k(  }t        «       r"t        «       r|s	 t        |j
                  «       || _        |j                  }|j                  �|j                  n|}|| _        t        j                   t#        j$                  |«      «      | _        t        j                   t#        j$                  |«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j                   t#        j$                  dd|«      «      | _        t        j0                  d«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        t        j4                  ||d¬«      | _        y # t        $ r t        j                  d«       Y �ŒËw xY w)Nz9Could not load the custom CUDA kernel for RWKV attention.r   ©r   r   r   éÿÿÿÿF©Úbias)ÚsuperÚ__init__Úconfigr   r   r   r   r   r   Ú	ExceptionÚloggerÚinfoÚlayer_idrM   Úattention_hidden_sizer   Ú	Parameterr0   ÚemptyrE   rF   Útime_mix_keyÚtime_mix_valueÚtime_mix_receptanceÚ	ZeroPad2dÚ
time_shiftÚLinearrG   rH   Ú
receptancerN   )ÚselfrŠ   rŽ   Úkernel_loadedrM   r�   Ú	__class__s         €r   r‰   zRwkvSelfAttention.__init__Ú   s¥  ø€ Ü‰ÑÔØˆŒÜ(°Ð4ÒqÔ9I×9XÑ9XÐ\b×\qÑ\qÑ9qˆÜÔÔ$;Ô$=ÁmðYÜ$ V×%:Ñ%:Ô;ð !ˆŒØ×(Ñ(ˆà,2×,HÑ,HÐ,TˆF×(Ò(ÐZeð 	ð &;ˆÔ"äŸ,™,¤u§{¡{Ð3HÓ'IÓJˆŒÜŸ,™,¤u§{¡{Ð3HÓ'IÓJˆŒäŸL™L¬¯©°Q¸¸;Ó)GÓHˆÔÜ Ÿl™l¬5¯;©;°q¸!¸[Ó+IÓJˆÔÜ#%§<¡<´·±¸A¸qÀ+Ó0NÓ#OˆÔ äŸ,™, }Ó5ˆŒÜ—9‘9˜[Ð*?ÀeÔLˆŒÜ—Y‘Y˜{Ð,AÈÔNˆŒ
ÜŸ)™) KÐ1FÈUÔSˆŒÜ—i‘iÐ 5°{ÈÔOˆ�øô) ò YÜ—‘ÐW×XðYús   ÁH ÈH6È5H6c                 óp  — |j                  d«      dk(  r|�|d   d d …d d …| j                  f   }n3| j                  |«      }|� |d   d d …d d …| j                  f   |d d …df<   || j                  z  |d| j                  z
  z  z   }|| j                  z  |d| j                  z
  z  z   }|| j
                  z  |d| j
                  z
  z  z   }| j                  |«      }| j                  |«      }t        j                  | j                  |«      «      }|� |d d …df   |d   d d …d d …| j                  f<   ||||fS ©Nr   r   r…   )r+   rŽ   r–   r’   r“   r”   rG   rH   r0   Úsigmoidr˜   )r™   ÚhiddenrI   ÚshiftedrG   rH   r˜   s          r   Úextract_key_valuez#RwkvSelfAttention.extract_key_valueø   s<  € à�;‰;�q‹>˜QÒ 5Ð#4Ø˜A‘hšq¢! T§]¡]Ð2Ñ3‰Gà—o‘o fÓ-ˆGØÐ Ø % a¡ªªA¨t¯}©}Ð)<Ñ =�š˜1˜‘Ø�t×(Ñ(Ñ(¨7°a¸$×:KÑ:KÑ6KÑ+LÑLˆØ˜×,Ñ,Ñ,¨w¸!¸d×>QÑ>QÑ:QÑ/RÑRˆØ˜d×6Ñ6Ñ6¸ÀAÈ×H`ÑH`ÑD`Ñ9aÑaˆ
à�h‰h�s‹mˆØ—
‘
˜5Ó!ˆÜ—]‘] 4§?¡?°:Ó#>Ó?ˆ
ØÐØ,2²1°b°5©MˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø˜3  uÐ,Ð,r   c                 ó’  ‡ — ‰ j                  ||¬«      \  }}}}|�t        ˆ fd„|dd  D «       «      nd }t        ‰ j                  ‰ j                  ||||¬«      \  }}|�T|d   |d   d d …d d …‰ j
                  f<   |d   |d   d d …d d …‰ j
                  f<   |d   |d   d d …d d …‰ j
                  f<   ‰ j                  ||z  «      |fS )	N©rI   c              3   óJ   •K  — | ]  }|d d …d d …‰j                   f   –— Œ y ­wr]   ©rŽ   )rx   rO   r™   s     €r   rz   z,RwkvSelfAttention.forward.<locals>.<genexpr>  s!   øè ø€ ÒF°q˜Aša¢ D§M¡MÐ1Õ2ÑFùs   ƒ #r(   r{   r   r   r   é   )r¡   Útupler€   rE   rF   rŽ   rN   )	r™   rŸ   rI   Ú	use_cacher˜   rG   rH   Úlayer_stateÚrwkvs	   `        r   r?   zRwkvSelfAttention.forward  sà   ø€ Ø(,×(>Ñ(>¸vÈUÐ(>Ó(SÑ%ˆ
�C˜ ØJOÐJ[”eÓF¸EÀ!À"¸IÔFÔFÐaeˆÜ1Ø�O‰OØ�O‰OØØØØ"ô
Ñˆˆkð Ð"Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)Ø,7¸©NˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)à�{‰{˜:¨Ñ,Ó-¨uÐ4Ð4r   ©r   r]   r\   )r^   r_   r`   r‰   r¡   r?   Ú__classcell__©r›   s   @r   r‚   r‚   Ù   s   ø„ õPó<-÷&5r   r‚   c                   ó(   ‡ — e Zd Zdˆ fd„	Zdd„Zˆ xZS )ÚRwkvFeedForwardc                 óB  •— t         ‰| �  «        || _        || _        |j                  }|j
                  �|j
                  nd|j                  z  }t        j                  d«      | _        t        j                  t        j                  dd|«      «      | _        t        j                  t        j                  dd|«      «      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y )Nr¦   r„   r   Fr†   )rˆ   r‰   rŠ   rŽ   rM   Úintermediate_sizer   r•   r–   r�   r0   r‘   r’   r”   r—   rG   r˜   rH   )r™   rŠ   rŽ   rM   r±   r›   s        €r   r‰   zRwkvFeedForward.__init__   sÛ   ø€ Ü‰ÑÔØˆŒØ ˆŒØ×(Ñ(ˆà(.×(@Ñ(@Ð(LˆF×$Ò$ÐRSÐV\×VhÑVhÑRhð 	ô Ÿ,™, }Ó5ˆŒÜŸL™L¬¯©°Q¸¸;Ó)GÓHˆÔÜ#%§<¡<´·±¸A¸qÀ+Ó0NÓ#OˆÔ ä—9‘9˜[Ð*;À%ÔHˆŒÜŸ)™) K°À5ÔIˆŒÜ—Y‘YÐ0°+ÀEÔJˆ�
r   c                 óz  — |j                  d«      dk(  r|�|d   d d …d d …| j                  f   }n3| j                  |«      }|� |d   d d …d d …| j                  f   |d d …df<   || j                  z  |d| j                  z
  z  z   }|| j                  z  |d| j                  z
  z  z   }t        j                  t        j                  | j                  |«      «      «      }| j                  |«      }t        j                  | j                  |«      «      }|� |d d …df   |d   d d …d d …| j                  f<   ||z  |fS r�   )r+   rŽ   r–   r’   r”   r0   ÚsquareÚrelurG   rH   rž   r˜   )r™   rŸ   rI   r    rG   r˜   rH   s          r   r?   zRwkvFeedForward.forward1  s)  € Ø�;‰;�q‹>˜QÒ 5Ð#4Ø˜A‘hšq¢! T§]¡]Ð2Ñ3‰Gà—o‘o fÓ-ˆGØÐ Ø % a¡ªªA¨t¯}©}Ð)<Ñ =�š˜1˜‘Ø�t×(Ñ(Ñ(¨7°a¸$×:KÑ:KÑ6KÑ+LÑLˆØ˜d×6Ñ6Ñ6¸ÀAÈ×H`ÑH`ÑD`Ñ9aÑaˆ
ä�l‰lœ5Ÿ:™: d§h¡h¨s£mÓ4Ó5ˆØ—
‘
˜3“ˆÜ—]‘] 4§?¡?°:Ó#>Ó?ˆ
àÐØ,2²1°b°5©MˆE�!‰H’Qš˜4Ÿ=™=Ð(Ñ)à˜EÑ! 5Ð(Ð(r   r«   r]   ©r^   r_   r`   r‰   r?   r¬   r­   s   @r   r¯   r¯     s   ø„ õK÷")r   r¯   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )Ú	RwkvBlockc                 ó¬  •— t         ‰| �  «        || _        || _        |dk(  r0t	        j
                  |j                  |j                  ¬«      | _        t	        j
                  |j                  |j                  ¬«      | _	        t	        j
                  |j                  |j                  ¬«      | _
        t        ||«      | _        t        ||«      | _        y )Nr   )Úeps)rˆ   r‰   rŠ   rŽ   r   Ú	LayerNormrM   Úlayer_norm_epsilonÚpre_lnÚln1Úln2r‚   Ú	attentionr¯   Úfeed_forward)r™   rŠ   rŽ   r›   s      €r   r‰   zRwkvBlock.__init__F  sš   ø€ Ü‰ÑÔØˆŒØ ˆŒà�qŠ=ÜŸ,™, v×'9Ñ'9¸v×?XÑ?XÔYˆDŒKä—<‘< × 2Ñ 2¸×8QÑ8QÔRˆŒÜ—<‘< × 2Ñ 2¸×8QÑ8QÔRˆŒä*¨6°8Ó<ˆŒÜ+¨F°HÓ=ˆÕr   c                 ó  — | j                   dk(  r| j                  |«      }| j                  | j                  |«      ||¬«      \  }}||z   }| j	                  | j                  |«      |¬«      \  }}||z   }||f}|r||fz  }|S |dz  }|S )Nr   )rI   r¨   r£   r]   )rŽ   r¼   r¿   r½   rÀ   r¾   )r™   rŸ   rI   r¨   Úoutput_attentionsr¿   rÀ   Úoutputss           r   r?   zRwkvBlock.forwardT  s¦   € Ø�=‰=˜AÒØ—[‘[ Ó(ˆFàŸ>™>¨$¯(©(°6Ó*:À%ÐS\˜>Ó]Ñˆ	�5Ø˜)Ñ#ˆà"×/Ñ/°·±¸Ó0@ÈÐ/ÓNÑˆ�eØ˜,Ñ&ˆà˜5�/ˆÙØ˜	�|Ñ#ˆGð ˆð �wÑˆGàˆr   )NFFrµ   r­   s   @r   r·   r·   E  s   ø„ ô>÷r   r·   c                   ó†   ‡ — e Zd ZU eed<   dZdgZddgZdZdZ	 e
j                  «       dej                  fˆ fd„«       Zˆ xZS )	ÚRwkvPreTrainedModelrŠ   rª   r·   rE   rF   TÚmodulec           	      ó¸
  •— t         ‰| �  |«       t        |t        «      �r¤|j                  }|j
                  j                  }|j
                  j                  }|j                  }||dz
  z  }d||z  z
  }t        j                  t        |«      D �cg c]  }||z  ‘Œ	 c}|j                  j                  |j                  j                  ¬«      }	|	dddd…f   }	t        |«      D �
cg c]  }
dd|
|dz
  z  dd|z  z   z  z  z   ‘Œ }}
t        j                  ||j                  j                  |j                  j                  ¬«      }t        j                  t        |«      D �cg c]  }|dz   d	z  dz
  ‘Œ c}|j                   j                  |j                   j                  ¬«      d
z  }t#        j$                  |j                  |«       t#        j$                  |j                   t        j&                  |j                   t)        j*                  d«      z  |z   «      «       t#        j$                  |j                  t        j,                  |	|«      «       t#        j$                  |j.                  t        j,                  |	|«      d|z  z   «       t#        j$                  |j0                  t        j,                  |	d
|z  «      «       yt        |t2        «      �r|j                  }|j
                  j                  }|j
                  j                  }d||z  z
  }t        j                  t        |«      D �cg c]  }||z  ‘Œ	 c}|j                  j                  |j                  j                  ¬«      }	|	dddd…f   }	t#        j$                  |j                  t        j,                  |	|«      «       t#        j$                  |j0                  t        j,                  |	|«      «       yt        |t4        j6                  «      rÏ|j8                  j:                  }d}d}|j<                  �t#        j>                  |j<                  «       |d   |d   kD  rt)        j@                  |d   |d   z  «      }|d   | j
                  jB                  k(  r|d   | j
                  j                  k(  rd
}||z  }t#        jD                  |j8                  |¬«       yt        |t4        jF                  «      r`|j8                  j:                  }dt)        j@                  tI        |d   |d   «      «      z  }t#        jD                  |j8                  |¬«       yyc c}w c c}
w c c}w c c}w )zInitialize the weights.r   g      ð?©r&   r'   Néûÿÿÿé   gffffffæ?gÍÌÌÌÌÌô?r   g      à?g333333Ó?r   )Úgaing-Cëâ6?)%rˆ   Ú_init_weightsÚ
isinstancer‚   rŽ   rŠ   Únum_hidden_layersrM   r�   r0   Útensorre   r’   r&   r'   rE   rF   ÚinitÚcopy_Ú	ones_likeÚmathÚlogÚpowr“   r”   r¯   r   r—   ÚweightÚshaper‡   Úzeros_ÚsqrtÚ
vocab_sizeÚorthogonal_Ú	EmbeddingÚmax)r™   rÆ   rŽ   rÎ   rM   r�   Úratio_0_to_1Úratio_1_to_almost0ÚiÚtime_weightÚhÚdecay_speedÚzigzagr×   rË   Úscaler›   s                   €r   rÌ   z!RwkvPreTrainedModel._init_weightsp  sS  ø€ ô 	‰Ñ˜fÔ%Ü�fÔ/Õ0Ø—‘ˆHØ &§¡× ?Ñ ?ÐØ Ÿ-™-×3Ñ3ˆKØ$*×$@Ñ$@Ð!à#Ð'8¸1Ñ'<Ñ=ˆLØ!$¨Ð3DÑ(DÑ!EÐäŸ,™,Ü*/°Ó*<Ö= Q��[“Ò=Ø×)Ñ)×/Ñ/Ø×*Ñ*×1Ñ1ôˆKð
 & d¨D²! mÑ4ˆKô Ð4Ó5öàð �Q˜!Ð4°qÑ8Ñ9¸sÀSÈ<ÑEWÑ?WÑXÑXÓXðˆKð ô  Ÿ,™, {¸&×:KÑ:K×:QÑ:QÐZ`×ZkÑZk×ZrÑZrÔsˆKä—‘Ü.3Ð4IÓ.JÖK¨�a˜!‘e˜q‘[ 1“_ÒKØ ×+Ñ+×1Ñ1Ø!×,Ñ,×3Ñ3ôð
 ñð ô �J‰J�v×(Ñ(¨+Ô6Ü�J‰J�v×(Ñ(¬%¯/©/¸&×:KÑ:KÌdÏhÉhÐWZËmÑ:[Ð^dÑ:dÓ*eÔfä�J‰J�v×*Ñ*¬E¯I©I°kÐCUÓ,VÔWÜ�J‰J�v×,Ñ,¬e¯i©i¸ÐEWÓ.XÐ[^ÐamÑ[mÑ.mÔnÜ�J‰J�v×1Ñ1´5·9±9¸[È#ÐPbÑJbÓ3cÕdÜ˜¤Õ0Ø—‘ˆHØ &§¡× ?Ñ ?ÐØ Ÿ-™-×3Ñ3ˆKà!$¨Ð3DÑ(DÑ!EÐäŸ,™,Ü*/°Ó*<Ö= Q��[“Ò=Ø×)Ñ)×/Ñ/Ø×*Ñ*×1Ñ1ôˆKð
 & d¨D²! mÑ4ˆKä�J‰J�v×*Ñ*¬E¯I©I°kÐCUÓ,VÔWÜ�J‰J�v×1Ñ1´5·9±9¸[ÐJ\Ó3]Õ^Ü˜¤§	¡	Ô*Ø—M‘M×'Ñ'ˆEØˆDØˆEØ�{‰{Ð&Ü—‘˜FŸK™KÔ(Ø�Q‰x˜% ™(Ò"Ü—y‘y  q¡¨E°!©HÑ!4Ó5�Ø�Q‰x˜4Ÿ;™;×1Ñ1Ò1°e¸A±hÀ$Ç+Á+×BYÑBYÒ6YØ�à�E‰MˆDÜ×Ñ˜VŸ]™]°Ö6Ü˜¤§¡Ô-Ø—M‘M×'Ñ'ˆEØœ$Ÿ)™)¤C¨¨a©°%¸±(Ó$;Ó<Ñ<ˆDÜ×Ñ˜VŸ]™]°Ö6ð .ùòo >ùòùò Lùò* >s   ÂUÃ'UÅ#UÌ3U)r^   r_   r`   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesÚ_keep_in_fp32_modulesÚsupports_gradient_checkpointingÚ_is_statefulr0   Úno_gradr   ÚModulerÌ   r¬   r­   s   @r   rÅ   rÅ   g  sU   ø… àÓØÐØ$˜ÐØ)¨<Ð8ÐØ&*Ð#Ø€Là€U‡]�]ƒ_ðG7 B§I¡Iô G7ó ôG7r   rÅ   z+
    Class for the RWKV model outputs.
    )Úcustom_introc                   óÌ   — e Zd ZU dZdZej                  dz  ed<   dZe	ej                     dz  ed<   dZ
eej                  df   dz  ed<   dZeej                  df   dz  ed<   y)Ú
RwkvOutputa  
    state (list of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.
    NÚlast_hidden_staterI   .Úhidden_statesÚ
attentions)r^   r_   r`   Ú__doc__rñ   r0   ÚFloatTensorræ   rI   Úlistrò   r§   ró   rb   r   r   rð   rð   »  sw   … ñð 37Ð�u×(Ñ(¨4Ñ/Ó6Ø,0€Eˆ4�×!Ñ!Ñ" TÑ)Ó0Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r   rð   zK
    Base class for causal language model (or autoregressive) outputs.
    c                   óô   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
ej                     dz  ed<   dZeej                  df   dz  ed<   dZeej                  df   dz  ed<   y)	ÚRwkvCausalLMOutputap  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    state (list of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.
    NÚlossÚlogitsrI   .rò   ró   )r^   r_   r`   rô   rù   r0   rõ   ræ   rú   rI   rö   rò   r§   ró   rb   r   r   rø   rø   Î  s‹   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø,0€Eˆ4�×!Ñ!Ñ" TÑ)Ó0Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r   rø   c                   ó
  ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de
ej                     dz  d	edz  d
edz  dedz  dedz  deez  fd„«       Zd„ Zd„ Zˆ xZS )Ú	RwkvModelc           	      óœ  •— t         ‰| �  |«       t        j                  |j                  |j
                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        t        j                  |j
                  «      | _        d| _        d| _        | j!                  «        y c c}w )Nr¥   F)rˆ   r‰   r   rÜ   rÚ   rM   Ú
embeddingsÚ
ModuleListre   rÎ   r·   Úblocksrº   Úln_outÚlayers_are_rescaledÚgradient_checkpointingÚ	post_init)r™   rŠ   Úidxr›   s      €r   r‰   zRwkvModel.__init__è  s•   ø€ Ü‰Ñ˜Ô äŸ,™, v×'8Ñ'8¸&×:LÑ:LÓMˆŒÜ—m‘mÔPUÐV\×VnÑVnÓPoÖ$pÈ¤Y¨vÀÖ%DÒ$pÓqˆŒÜ—l‘l 6×#5Ñ#5Ó6ˆŒà#(ˆÔ à&+ˆÔ#ð 	�‰Õùò %qs   Á&C	c                 ó   — | j                   S r]   ©rþ   ©r™   s    r   Úget_input_embeddingszRwkvModel.get_input_embeddingsö  s   € Ø�‰Ðr   c                 ó   — || _         y r]   r  ©r™   Únew_embeddingss     r   Úset_input_embeddingszRwkvModel.set_input_embeddingsù  s	   € Ø(ˆ�r   NÚ	input_idsÚattention_maskÚinputs_embedsrI   r¨   rÂ   Úoutput_hidden_statesÚreturn_dictÚreturnc	           	      ó*  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n#| j                  s| j                   j                  nd}|�|n| j                   j
                  }|�t        j                  d«       | j                  | j                  k(  r| j                  «        |�|�t        d«      ‚|€|€t        d«      ‚|€| j                  |«      }|r |€ž|j                  d«      | j                   j                  | j                   j                  f}
t        d«      D �cg c]A  }t!        j"                  |
|dk  r|j$                  nt         j&                  |j(                  d	œŽ‘ŒC }}|d
xx   dz  cc<   | j*                  r%| j                  r|rt        j                  d«       d}|}|rdnd}|rdnd}t-        | j.                  «      D ]o  \  }} |||||¬«      \  }}}| j                  r=| j                   j0                  dkD  r$|dz   | j                   j0                  z  dk(  r|dz  }|r||fz   }|sŒj||fz   }Œq | j3                  |«      }|r||fz   }|st5        d„ ||||fD «       «      S t7        ||||¬«      S c c}w )a   
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else
            `past_key_values.get_seq_length()` (`sequence_length` of input past key value states). Indices of input
            sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        state (tuple of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`, *optional*):
            If passed along, the model uses the previous state in all the blocks (which will give the output for the
            `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
        use_cache (`bool`, *optional*):
            If set to `True`, the last state is returned and can be used to quickly generate the next logits.
        NFz<`attention_mask` was passed, but it is unused in this model.zDYou cannot specify both input_ids and inputs_embeds at the same timez5You have to specify either input_ids or inputs_embedsr   é   r   rÈ   r¦   gêŒ 9Y>)FzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...rb   )rI   r¨   rÂ   r(   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr]   rb   )rx   Úxs     r   rz   z$RwkvModel.forward.<locals>.<genexpr>^  s   è ø€ Òt˜qÐfgÑfsœÑtùs   ‚Š)rñ   rI   rò   ró   )rŠ   rÂ   r  Útrainingr¨   r  rŒ   Úwarning_oncer  Ú_rescale_layersr,   rþ   r+   rM   rÎ   re   r0   r7   r&   r8   r'   r  Ú	enumerater   Úrescale_everyr  r§   rð   )r™   r  r  r  rI   r¨   rÂ   r  r  Úkwargsr×   rà   rò   Úall_self_attentionsÚall_hidden_statesr  Úblockró   s                     r   r?   zRwkvModel.forwardü  s¸  € ð@ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘IÐZ^×ZgÒZg¸T¿[¹[×=RÒ=RÐmrˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ%Ü×ÑÐ ^Ô_à�=‰=˜D×4Ñ4Ò4Ø× Ñ Ô"àÐ  ]Ð%>ÜÐcÓdÐdØÐ =Ð#8ÜÐTÓUÐUàÐ Ø ŸO™O¨IÓ6ˆMá˜˜Ø"×'Ñ'¨Ó*¨D¯K©K×,CÑ,CÀTÇ[Á[×EbÑEbÐcˆEô
 ˜q›ö	ð ô —‘Ø¸¸aº -×"5Ò"5ÄUÇ]Á]Ð[h×[oÑ[oôðˆEð ð �!‹H˜Ñ‹Hà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	à%ˆá$5™b¸4ÐÙ"6™B¸DÐÜ# D§K¡KÓ0ò 	J‰JˆC�Ù/4Ø U°iÐSdô0Ñ,ˆM˜5 *ð
 ×(Ò(Ø—K‘K×-Ñ-°Ò1Ø˜1‘W §¡× 9Ñ 9Ñ9¸QÒ>à -°Ñ 1�á#Ø$5¸Ð8HÑ$HÐ!â Ø&9¸Z¸MÑ&IÑ#ð!	Jð$ Ÿ™ MÓ2ˆáØ 1°]Ð4DÑ DÐáÜÑt ]°EÐ;LÐNaÐ$bÔtÓtÐtäØ+ØØ+Ø*ô	
ð 	
ùò[s   Ä5AJc           	      ó†  — | j                   | j                   k(  ry | j                  j                  dkD  �rît	        j
                  «       5  t        | j                  «      D �]·  \  }}| j                  r¥|j                  j                  j                  j                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j                  dt        || j                  j                  z  «      z  «       Œ¸t        |j                  j                  j                  d«      rº|j                  j                  j                  j                   j#                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j                   j#                  dt        || j                  j                  z  «      z  «       �Œœt        |j                  j                  j                  d«      rN| j%                  |j                  j                  |«       | j%                  |j                  j                  |«       �Œ|j                  j                  j                  j#                  dt        || j                  j                  z  «      z  «       |j                  j                  j                  j#                  dt        || j                  j                  z  «      z  «       �Œº 	 d d d «       | j                   | _         y # 1 sw Y   ŒxY w)Nr   r(   ÚSCBÚquant_state)r  r  rŠ   r  r0   rì   r  r   r¿   rN   rÖ   Úmul_ÚintrÀ   rH   Úhasattrr"  Údiv_Ú _bnb_4bit_dequantize_and_rescale)r™   Úblock_idr   s      r   r  zRwkvModel._rescale_layersg  s`  € à×#Ñ#¨D¯M©MÐ(9Ò:ØØ�;‰;×$Ñ$ qÓ(Ü—‘“ñ rÜ'0°·±Ó'=ó r‘O�H˜eØ—}’}ØŸ™×.Ñ.×5Ñ5×:Ñ:¸1ÄÀHÐPT×P[ÑP[×PiÑPiÑDiÓ@jÑ;jÔkØ×*Ñ*×0Ñ0×7Ñ7×<Ñ<¸QÄ#ÀhÐRV×R]ÑR]×RkÑRkÑFkÓBlÑ=lÕmô # 5§?¡?×#9Ñ#9×#@Ñ#@À%ÔHØ!ŸO™O×2Ñ2×9Ñ9×=Ñ=×BÑBÀ1ÌÈHÐX\×XcÑXc×XqÑXqÑLqÓHrÑCrÔsØ!×.Ñ.×4Ñ4×;Ñ;×?Ñ?×DÑDÀQÌ#ÈhÐZ^×ZeÑZe×ZsÑZsÑNsÓJtÑEtÖuÜ$ U§_¡_×%;Ñ%;×%BÑ%BÀMÔRØ ×AÑAÀ%Ç/Á/×BXÑBXÐZbÔcØ ×AÑAÀ%×BTÑBT×BZÑBZÐ\dÖeà!ŸO™O×2Ñ2×9Ñ9×>Ñ>¸qÄCÈÐTX×T_ÑT_×TmÑTmÑHmÓDnÑ?nÔoØ!×.Ñ.×4Ñ4×;Ñ;×@Ñ@ÀÄcÈ(ÐVZ×VaÑVa×VoÑVoÑJoÓFpÑApÖqñr÷rð" (,§}¡}Ð#4ˆÕ ÷#rð rús   Á
KL7Ì7M c                 óÊ  — t        «       st        d«      ‚ddl}|j                  j	                  |j
                  j                  |j
                  j                  «      }|j                  dt        || j                  j                  z  «      z  «       |j                  j                  |j                  d«      d¬«      j                  |j                  «      }t!        |d|«       y)	z›
        Perform the dequantization and rescaling of the weights of a given layer. After that operation the layer will
        be quantized again.
        z/Please install bitsandbytes to use this method.r   Nr(   ÚcpuF)Úrequires_gradrÖ   )r   r   ÚbitsandbytesÚ
functionalÚdequantize_4bitrÖ   Údatar#  r'  r%  rŠ   r  r   Ú
Params4bitrC   r'   Úsetattr)r™   Útarget_layerr)  ÚbnbÚdequant_weightsÚquant_weights         r   r(  z*RwkvModel._bnb_4bit_dequantize_and_rescale  s´   € ô
 )Ô*ÜÐOÓPÐPÛ"àŸ.™.×8Ñ8¸×9LÑ9L×9QÑ9QÐS_×SfÑSf×SrÑSrÓsˆà×Ñ˜Q¤# h°$·+±+×2KÑ2KÑ&KÓ"LÑLÔMð —v‘v×(Ñ(¨×);Ñ);¸EÓ)BÐRWÐ(ÓX×[Ñ[Ð\k×\rÑ\rÓsˆÜ�˜h¨Õ5r   )NNNNNNNN)r^   r_   r`   r‰   r	  r  r   r0   Ú
LongTensorrõ   rö   Úboolr§   rð   r?   r  r(  r¬   r­   s   @r   rü   rü   æ  sô   ø„ ôòò)ð ð .2Ø26Ø26Ø04Ø!%Ø)-Ø,0Ø#'ñh
à×#Ñ# dÑ*ðh
ð ×(Ñ(¨4Ñ/ðh
ð ×(Ñ(¨4Ñ/ð	h
ð
 �E×%Ñ%Ñ&¨Ñ-ðh
ð ˜$‘;ðh
ð   $™;ðh
ð # T™kðh
ð ˜D‘[ðh
ð 
�Ñ	òh
ó ðh
òT5ö06r   rü   z‡
    The RWKV Model transformer with a language modeling head on top (linear layer with weights tied to the input
    embeddings).
    c                   óF  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  d	ej                  dz  d
eej                     dz  dej                  dz  dedz  dedz  dedz  dedz  deej                  z  deez  fd„«       Zˆ xZS )ÚRwkvForCausalLMzhead.weightzrwkv.embeddings.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y )NFr†   )
rˆ   r‰   rü   rª   r   r—   rM   rÚ   Úheadr  )r™   rŠ   r›   s     €r   r‰   zRwkvForCausalLM.__init__ž  sH   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ	Ü—I‘I˜f×0Ñ0°&×2CÑ2CÈ%ÔPˆŒ	ð 	�‰Õr   c                 ó   — | j                   S r]   ©r<  r  s    r   Úget_output_embeddingsz%RwkvForCausalLM.get_output_embeddings¦  s   € Ø�y‰yÐr   c                 ó   — || _         y r]   r>  r  s     r   Úset_output_embeddingsz%RwkvForCausalLM.set_output_embeddings©  s	   € Ø"ˆ�	r   Nr  r  r  rI   Úlabelsr¨   rÂ   r  r  Úlogits_to_keepr  c           	      óÆ  — |	�|	n| j                   j                  }	| j                  |||||||	¬«      }|d   }t        |
t        «      rt        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�* | j                  d||| j                   j                  dœ|¤Ž}|	s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  ¬«      S )aJ  
        input_ids (`torch.LongTensor` of shape `(batch_size, input_ids_length)`):
            `input_ids_length` = `sequence_length` if `past_key_values` is `None` else
            `past_key_values.get_seq_length()` (`sequence_length` of input past key value states). Indices of input
            sequence tokens in the vocabulary.

            If `past_key_values` is used, only `input_ids` that do not have their past calculated should be passed as
            `input_ids`.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        state (tuple of five `torch.FloatTensor` of shape `(batch_size, hidden_size, num_hidden_layers)`, *optional*):
            If passed along, the model uses the previous state in all the blocks (which will give the output for the
            `input_ids` provided as if the model add `state_input_ids + input_ids` as context).
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        use_cache (`bool`, *optional*):
            If set to `True`, the last state is returned and can be used to quickly generate the next logits.
        N)r  rI   r¨   rÂ   r  r  r   )rú   rB  rÚ   r   )rù   rú   rI   rò   ró   rb   )rŠ   r  rª   rÍ   r%  Úslicer<  Úloss_functionrÚ   rø   rI   rò   ró   )r™   r  r  r  rI   rB  r¨   rÂ   r  r  rC  r  Úrwkv_outputsrò   Úslice_indicesrú   rù   rN   s                     r   r?   zRwkvForCausalLM.forward¬  s  € ðL &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—y‘yØØ'ØØØ/Ø!5Ø#ð !ó 
ˆð % Q™ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜=ª¨Mº1Ð)<Ñ=Ó>ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDáØ�Y ¨a¨bÐ!1Ñ1ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä!ØØØ×$Ñ$Ø&×4Ñ4Ø#×.Ñ.ô
ð 	
r   )
NNNNNNNNNr   )r^   r_   r`   Ú_tied_weights_keysr‰   r?  rA  r   r0   r7  rõ   rö   r8  r%  ÚTensorr§   rø   r?   r¬   r­   s   @r   r:  r:  •  s(  ø„ ð (Ð)AÐBÐôòò#ð ð .2Ø26Ø26Ø04Ø*.Ø!%Ø)-Ø,0Ø#'Ø-.ñD
à×#Ñ# dÑ*ðD
ð ×(Ñ(¨4Ñ/ðD
ð ×(Ñ(¨4Ñ/ð	D
ð
 �E×%Ñ%Ñ&¨Ñ-ðD
ð × Ñ  4Ñ'ðD
ð ˜$‘;ðD
ð   $™;ðD
ð # T™kðD
ð ˜D‘[ðD
ð ˜eŸl™lÑ*ðD
ð 
Ð#Ñ	#òD
ó ôD
r   r:  )r:  rü   rÅ   r\   )-rô   rÓ   Údataclassesr   r0   r   Ú r   rÐ   Ú
generationr   Úmodeling_layersr   Úmodeling_utilsr	   Úutilsr
   r   r   r   r   r   r   Úconfiguration_rwkvr   Ú
get_loggerr^   rŒ   r   r   ÚautogradÚFunctionr   ru   r€   rí   r‚   r¯   r·   rÅ   rð   rø   rü   r:  Ú__all__rb   r   r   ú<module>rV     s  ðñ ã Ý !ã Ý å &Ý )Ý 9Ý -÷÷ ñ õ +ð 
ˆ×	Ñ	˜HÓ	%€ð Ð ò5ôg
˜%Ÿ.™.×1Ñ1ô g
óT)óXbôC5˜Ÿ	™	ô C5ôL#)�b—i‘iô #)ôLÐ*ô ðD ôP7˜/ó P7ó ðP7ñf ðôð
 ô
<�ó 
<ó óð
<ñ ðôð
 ô<˜ó <ó óð<ð$ ôk6Ð#ó k6ó ðk6ñ\ ðôôV
Ð)¨?ó V
óðV
òr B�r   