+
    œ°³jâ¥  ã                   óø  € R t ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIHtH	t	H
t
 ^RIHt ^RIHtHt ]! 4       '       d   ^ RIHt ^R	IHt ^R
IHt ^RIHtHtHtHtHtHtHtHtH t  ^RI!H"t" ^RI#H$t$ ^RIH%t% ^RI&H't' ]%PP                  ! ])4      t*R t+R t,R t- ! R R]P\                  4      t/ ! R R]P\                  4      t0 ! R R]P\                  4      t1 ! R R]P\                  4      t2 ! R R]P\                  4      t3 ! R R]P\                  4      t4 ! R R ]4      t5 ! R! R"]P\                  4      t6 ! R# R$]P\                  4      t7 ! R% R&]P\                  4      t8 ! R' R(]P\                  4      t9 ! R) R*]P\                  4      t: ! R+ R,]P\                  4      t; ! R- R.]P\                  4      t<] ! R/ R0]"4      4       t=]! R1R27      ] ! R3 R4]4      4       4       t>] ! R5 R6]=4      4       t?]! R7R27       ! R8 R9]=4      4       t@] ! R: R;]=4      4       tA]! R<R27       ! R= R>]=4      4       tB]! R?R27       ! R@ RA]=4      4       tC] ! RB RC]=4      4       tD] ! RD RE]=4      4       tE] ! RF RG]=4      4       tF. RHOtGR# )IzPyTorch FNet model.)Ú	dataclass)ÚpartialN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELoss)Úinitialization)Úauto_docstringÚis_scipy_available)Úlinalg)ÚACT2FN)ÚGradientCheckpointingLayer)	ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚModelOutputÚMultipleChoiceModelOutputÚNextSentencePredictorOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úapply_chunking_to_forward)Úlogging©Ú
FNetConfigc                ó´   € V P                   ^,          pVRV1RV13,          pV P                  \        P                  4      p \        P                  ! RWV4      # )z4Applies 2D matrix multiplication to 3D input arrays.Nzbij,jk,ni->bnk)ÚshapeÚtypeÚtorchÚ	complex64Úeinsum)ÚxÚmatrix_dim_oneÚmatrix_dim_twoÚ
seq_lengths   &&& Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/fnet/modeling_fnet.pyÚ_two_dim_matmulr'   5   sL   € à—‘˜•€JØ# K Z K°°*°Ð$<Õ=€NØ	�‰Œu�‰Ó€AÜ�<Š<Ð(¨!¸^ÓLÐLó    c                 ó   € \        WV4      # ©N)r'   )r"   r#   r$   s   &&&r&   Útwo_dim_matmulr+   >   s   € Ü˜1¨nÓ=Ð=r(   c                ó¢   € T p\        \        V P                  4      R,          4       F#  p\        P                  P	                  WR7      pK%  	  V# )z¹
Applies n-dimensional Fast Fourier Transform (FFT) to input array.

Args:
    x: Input n-dimensional array.

Returns:
    n-dimensional Fourier transform of input n-dimensional array.
ºé   NN)Úaxis)ÚreversedÚrangeÚndimr   Úfft)r"   Úoutr/   s   &  r&   Úfftnr5   C   s>   € ð €CÜœ˜qŸv™v› rÕ*Ö+ˆÜ�i‰i�m‰m˜CˆmÓ+Šñ ,à€Jr(   c                   ó@   a a€ ] tR t^St oRtV 3R ltRR ltRtVtV ;t	# )ÚFNetEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                ó®  <€ \         SV `  4        \        P                  ! VP                  VP
                  VP                  R 7      V n        \        P                  ! VP                  VP
                  4      V n	        \        P                  ! VP                  VP
                  4      V n        \        P                  ! VP
                  VP                  R7      V n        \        P                  ! VP
                  VP
                  4      V n        \        P                   ! VP"                  4      V n        \        P&                  ! \(        P*                  ! VP                  4      P-                  R4      RR7      V n        \        P&                  ! \(        P0                  ! V P.                  P3                  4       \(        P4                  R7      RR7      V n        R# ))Úpadding_idx©ÚepsF)Ú
persistent©ÚdtypeN©r.   éÿÿÿÿ)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚLinearÚ
projectionÚDropoutÚhidden_dropout_probÚdropoutÚBufferr   ÚarangeÚexpandÚposition_idsÚzerosÚsizeÚlongÚtoken_type_ids©ÚselfÚconfigÚ	__class__s   &&€r&   rB   ÚFNetEmbeddings.__init__V   s-  ø€ Ü‰ÑÔÜ!Ÿ|š|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¢<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¢\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸš f×&8Ñ&8¸f×>SÑ>SÔTˆŒäŸ)š) F×$6Ñ$6¸×8JÑ8JÓKˆŒÜ—z’z &×"<Ñ"<Ó=ˆŒô ŸIšI¤e§l¢l°6×3QÑ3QÓ&R×&YÑ&YÐZaÓ&bÐotÔuˆÔä Ÿiši¬¯ª°D×4EÑ4E×4JÑ4JÓ4LÔTY×T^ÑT^Ô(_ÐlqÔrˆÖr(   c                óš  € Ve   VP                  4       pMVP                  4       R R pV^,          pVf   V P                  RR V13,          pVf�   \        V R4      '       d4   V P                  RR V13,          pVP	                  V^ ,          V4      pTpM;\
        P                  ! V\
        P                  V P                  P                  R7      pVf   V P                  V4      pV P                  V4      p	WI,           p
V P                  V4      pW«,          p
V P                  V
4      p
V P                  V
4      p
V P                  V
4      p
V
# )NºNNNrZ   ©r>   Údevicer@   )rX   rV   ÚhasattrrZ   rU   r   rW   rY   rc   rG   rK   rI   rL   rO   rR   )r\   Ú	input_idsrZ   rV   Úinputs_embedsÚinput_shaper%   Úbuffered_token_type_idsÚ buffered_token_type_ids_expandedrK   Ú
embeddingsrI   s   &&&&&       r&   ÚforwardÚFNetEmbeddings.forwardf   s:  € ØÒ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  •^ˆ
àÒØ×,Ñ,¨Q°°°¨^Õ<ˆLð
 Ò!Ü�tÐ-×.Ò.Ø*.×*=Ñ*=¸aÀÀ*À¸nÕ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÕR`ÐblÓ3mÐ0Ø!A‘ä!&§¢¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÒ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐà"Õ:ˆ
à"×6Ñ6°|ÓDÐØÕ)ˆ
Ø—^‘^ JÓ/ˆ
Ø—_‘_ ZÓ0ˆ
Ø—\‘\ *Ó-ˆ
ØÐr(   )rL   rR   rI   rV   rO   rK   rZ   rG   )NNNN)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB   rk   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r^   Ú__classdict__s   @@r&   r7   r7   S   s   ù‡ € ÙQõs÷ !ô !r(   r7   c                   ó>   a a€ ] tR t^Št oV 3R ltR tR tRtVtV ;t	# )ÚFNetBasicFourierTransformc                óF   <€ \         SV `  4        V P                  V4       R # r*   )rA   rB   Ú_init_fourier_transformr[   s   &&€r&   rB   Ú"FNetBasicFourierTransform.__init__‹   s   ø€ Ü‰ÑÔØ×$Ñ$ VÖ,r(   c                óð  € VP                   '       g-   \        \        P                  P                  RR7      V n        R# VP                  R8:  Ed   \        4       '       dè   \        P                  ! \        P                  ! \        P                  ! VP                  4      \        P                  R7      4      V n        \        P                  ! \        P                  ! \        P                  ! VP                   4      \        P                  R7      4      V n        \        \$        V P"                  V P                  R7      V n        R# \&        P(                  ! R4       \        V n        R# \        V n        R# )r.   ©Údimé   r=   )r#   r$   zpSciPy is needed for DFT matrix calculation and is not found. Using TPU optimized fast fourier transform instead.N)r.   é   )Úuse_tpu_fourier_optimizationsr   r   r3   r5   Úfourier_transformrH   r
   r   rS   Útensorr   ÚdftrE   r    Údft_mat_hiddenÚtpu_short_seq_lengthÚdft_mat_seqr+   r   Úwarning)r\   r]   s   &&r&   rz   Ú1FNetBasicFourierTransform._init_fourier_transform�   së   € Ø×3×3Ð3Ü%,¬U¯Y©Y¯^©^ÀÔ%HˆDÖ"Ø×+Ñ+¨tÕ3Ü!×#Ò#Ü&(§i¢i´·²¼V¿ZºZÈ×HZÑHZÓ=[Ôch×crÑcrÔ0sÓ&t�Ô#Ü#%§9¢9Ü—L’L¤§¢¨F×,GÑ,GÓ!HÔPU×P_ÑP_Ô`ó$�Ô ô *1Ü"°4×3CÑ3CÐTX×TgÑTgô*�Ö&ô —’ð*ôô *.�Ö&ä%)ˆDÖ"r(   c                ó>   € V P                  V4      P                  pV3# r*   )r‚   Úreal)r\   Úhidden_statesÚoutputss   && r&   rk   Ú!FNetBasicFourierTransform.forward¤   s"   € ð ×(Ñ(¨Ó7×<Ñ<ˆØˆzÐr(   )r…   r‡   r‚   )
rm   rn   ro   rp   rB   rz   rk   rr   rs   rt   ru   s   @@r&   rx   rx   Š   s   ù‡ € õ-ò*÷*ò r(   rx   c                   ó8   a a€ ] tR t^®t oV 3R ltR tRtVtV ;t# )ÚFNetBasicOutputc                ó†   <€ \         SV `  4        \        P                  ! VP                  VP
                  R 7      V n        R# ©r:   N)rA   rB   r   rL   rE   rM   r[   s   &&€r&   rB   ÚFNetBasicOutput.__init__¯   s,   ø€ Ü‰ÑÔÜŸš f×&8Ñ&8¸f×>SÑ>SÔTˆŽr(   c                ó4   € V P                  W!,           4      pV# r*   ©rL   ©r\   rŒ   Úinput_tensors   &&&r&   rk   ÚFNetBasicOutput.forward³   s   € ØŸ™ |Õ'CÓDˆØÐr(   r•   ©	rm   rn   ro   rp   rB   rk   rr   rs   rt   ru   s   @@r&   r�   r�   ®   s   ù‡ € õU÷ò r(   r�   c                   ó8   a a€ ] tR t^¸t oV 3R ltR tRtVtV ;t# )ÚFNetFourierTransformc                ód   <€ \         SV `  4        \        V4      V n        \	        V4      V n        R # r*   )rA   rB   rx   r\   r�   Úoutputr[   s   &&€r&   rB   ÚFNetFourierTransform.__init__¹   s&   ø€ Ü‰ÑÔÜ-¨fÓ5ˆŒ	Ü% fÓ-ˆŽr(   c                ó`   € V P                  V4      pV P                  V^ ,          V4      pV3pV# ©é    )r\   r�   )r\   rŒ   Úself_outputsÚfourier_outputr�   s   &&   r&   rk   ÚFNetFourierTransform.forward¾   s1   € Ø—y‘y Ó/ˆØŸ™ \°!¥_°mÓDˆØ!Ð#ˆØˆr(   )r�   r\   r™   ru   s   @@r&   r›   r›   ¸   s   ù‡ € õ.÷
ò r(   r›   c                   óD   a a€ ] tR t^Æt oV 3R ltV3R lR ltRtVtV ;t# )ÚFNetIntermediatec                ó"  <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        VP                  \        4      '       d   \        VP                  ,          V n        R # VP                  V n        R # r*   )rA   rB   r   rN   rE   Úintermediate_sizeÚdenseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr[   s   &&€r&   rB   ÚFNetIntermediate.__init__Ç   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ò-Ü'-¨f×.?Ñ.?Õ'@ˆDÖ$à'-×'8Ñ'8ˆDÖ$r(   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r€   rŒ   Úreturn©r   ÚTensor)Úformatrv   s   "€r&   Ú__annotate__ÚFNetIntermediate.__annotate__Ï   s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r(   c                óJ   € V P                  V4      pV P                  V4      pV# r*   ©r©   r­   ©r\   rŒ   s   &&r&   rk   ÚFNetIntermediate.forwardÏ   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr(   r¸   r™   ru   s   @@r&   r¦   r¦   Æ   s   ù‡ € õ9÷÷ ð r(   r¦   c                   óD   a a€ ] tR t^Öt oV 3R ltV3R lR ltRtVtV ;t# )Ú
FNetOutputc                ó0  <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        P                  ! VP
                  VP                  R 7      V n        \        P                  ! VP                  4      V n        R# r’   )rA   rB   r   rN   r¨   rE   r©   rL   rM   rP   rQ   rR   r[   s   &&€r&   rB   ÚFNetOutput.__init__×   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z’z &×"<Ñ"<Ó=ˆŽr(   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r€   rŒ   r—   r±   r²   )r´   rv   s   "€r&   rµ   ÚFNetOutput.__annotate__Ý   s1   ø€ ÷ ñ ¡U§\¡\ð ÁÇÁð ÑRW×R^ÑR^ñ r(   c                óx   € V P                  V4      pV P                  V4      pV P                  W,           4      pV# r*   )r©   rR   rL   r–   s   &&&r&   rk   ÚFNetOutput.forwardÝ   s5   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }Õ'CÓDˆØÐr(   )rL   r©   rR   r™   ru   s   @@r&   r¼   r¼   Ö   s   ù‡ € õ>÷÷ ð r(   r¼   c                   ó>   a a€ ] tR t^ät oV 3R ltR tR tRtVtV ;t	# )Ú	FNetLayerc                ó´   <€ \         SV `  4        VP                  V n        ^V n        \	        V4      V n        \        V4      V n        \        V4      V n	        R# ©r.   N)
rA   rB   Úchunk_size_feed_forwardÚseq_len_dimr›   Úfourierr¦   Úintermediater¼   r�   r[   s   &&€r&   rB   ÚFNetLayer.__init__å   sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ+¨FÓ3ˆŒÜ,¨VÓ4ˆÔÜ  Ó(ˆŽr(   c                ó˜   € V P                  V4      pV^ ,          p\        V P                  V P                  V P                  V4      pV3pV# r    )rÉ   r   Úfeed_forward_chunkrÇ   rÈ   )r\   rŒ   Úself_fourier_outputsr£   Úlayer_outputr�   s   &&    r&   rk   ÚFNetLayer.forwardí   sO   € Ø#Ÿ|™|¨MÓ:ÐØ-¨aÕ0ˆä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUcó
ˆð  �/ˆàˆr(   c                óJ   € V P                  V4      pV P                  W!4      pV# r*   )rÊ   r�   )r\   r£   Úintermediate_outputrÏ   s   &&  r&   rÍ   ÚFNetLayer.feed_forward_chunkù   s(   € Ø"×/Ñ/°Ó?ÐØ—{‘{Ð#6ÓGˆØÐr(   )rÇ   rÉ   rÊ   r�   rÈ   )
rm   rn   ro   rp   rB   rk   rÍ   rr   rs   rt   ru   s   @@r&   rÄ   rÄ   ä   s   ù‡ € õ)ò
÷ò r(   rÄ   c                   ó<   a a€ ] tR t^ÿt oV 3R ltRR ltRtVtV ;t# )ÚFNetEncoderc                óÖ   <€ \         SV `  4        Wn        \        P                  ! \        VP                  4       Uu. uF  p\        V4      NK  	  up4      V n        R V n	        R# u upi )FN)
rA   rB   r]   r   Ú
ModuleListr1   Únum_hidden_layersrÄ   ÚlayerÚgradient_checkpointing)r\   r]   Ú_r^   s   && €r&   rB   ÚFNetEncoder.__init__   sR   ø€ Ü‰ÑÔØŒÜ—]’]¼uÀV×E]ÑE]Ô?^Ó#_Ñ?^¸!¤I¨fÖ$5Ñ?^Ñ#_Ó`ˆŒ
Ø&+ˆÖ#ùò $`s   ½A&c                ó@  € V'       d   RMR p\        V P                  4       F'  w  rVV'       d
   WA3,           pV! V4      pV^ ,          pK)  	  V'       d
   WA3,           pV'       g/   \        ;QJ d    . R W3 4       F  NK  	  5# ! R W3 4       4      # \        WR7      # )Nc              3   ó0   "  € T F  qf   K  Vx € K  	  R # 5ir*   © )Ú.0Úvs   & r&   Ú	<genexpr>Ú&FNetEncoder.forward.<locals>.<genexpr>  s   é € ÐXÑ$F˜qŸšÓ$Fùs   ‚Œ
)Úlast_hidden_staterŒ   rß   )Ú	enumeraterÙ   Útupler   )r\   rŒ   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚiÚlayer_moduleÚlayer_outputss   &&&&    r&   rk   ÚFNetEncoder.forward  s‹   € ß"6™B¸DÐä(¨¯©Ö4‰OˆAß#Ø$5Ð8HÕ$HÐ!á(¨Ó7ˆMà)¨!Õ,ŠMñ  5÷  Ø 1Ð4DÕ DÐçß”5ÑX ]Ñ$FÓX—5ÐX�5ÑX ]Ñ$FÓXÓXÐXä°Ô`Ð`r(   )r]   rÚ   rÙ   )FTr™   ru   s   @@r&   rÕ   rÕ   ÿ   s   ù‡ € õ,÷aô ar(   rÕ   c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )Ú
FNetPooleri  c                ó¸   <€ \         SV `  4        \        P                  ! VP                  VP                  4      V n        \        P                  ! 4       V n        R # r*   )rA   rB   r   rN   rE   r©   ÚTanhÚ
activationr[   s   &&€r&   rB   ÚFNetPooler.__init__  s9   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'š'›)ˆŽr(   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r°   r²   )r´   rv   s   "€r&   rµ   ÚFNetPooler.__annotate__!  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r(   c                ó\   € VR,          pV P                  V4      pV P                  V4      pV# )ra   )ra   r¡   )r©   rò   )r\   rŒ   Úfirst_token_tensorÚpooled_outputs   &&  r&   rk   ÚFNetPooler.forward!  s2   € ð +¨4Õ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr(   )rò   r©   r™   ru   s   @@r&   rï   rï     s   ù‡ € õ$÷
÷ ð r(   rï   c                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )ÚFNetPredictionHeadTransformi+  c                ó‚  <€ \         SV `  4        \        P                  ! VP                  VP                  4      V n        \        VP                  \        4      '       d   \        VP                  ,          V n
        MVP                  V n
        \        P                  ! VP                  VP                  R 7      V n        R# r’   )rA   rB   r   rN   rE   r©   rª   r«   r¬   r   Útransform_act_fnrL   rM   r[   s   &&€r&   rB   Ú$FNetPredictionHeadTransform.__init__,  s~   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬×-Ò-Ü$*¨6×+<Ñ+<Õ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸš f×&8Ñ&8¸f×>SÑ>SÔTˆŽr(   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# r°   r²   )r´   rv   s   "€r&   rµ   Ú(FNetPredictionHeadTransform.__annotate__5  s#   ø€ ÷ ñ ¡U§\¡\ð ±e·l±lñ r(   c                ól   € V P                  V4      pV P                  V4      pV P                  V4      pV# r*   )r©   rý   rL   r¹   s   &&r&   rk   Ú#FNetPredictionHeadTransform.forward5  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr(   )rL   r©   rý   r™   ru   s   @@r&   rû   rû   +  s   ù‡ € õU÷÷ ð r(   rû   c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚFNetLMPredictionHeadi<  c                ó  <€ \         SV `  4        \        V4      V n        \        P
                  ! VP                  VP                  4      V n        \        P                  ! \        P                  ! VP                  4      4      V n        R # r*   )rA   rB   rû   Ú	transformr   rN   rE   rD   ÚdecoderÚ	Parameterr   rW   Úbiasr[   s   &&€r&   rB   ÚFNetLMPredictionHead.__init__=  sW   ø€ Ü‰ÑÔÜ4°VÓ<ˆŒÜ—y’y ×!3Ñ!3°V×5FÑ5FÓGˆŒÜ—L’L¤§¢¨V×->Ñ->Ó!?Ó@ˆŽ	r(   c                óJ   € V P                  V4      pV P                  V4      pV# r*   )r  r  r¹   s   &&r&   rk   ÚFNetLMPredictionHead.forwardC  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr(   )r	  r  r  r™   ru   s   @@r&   r  r  <  s   ù‡ € õA÷ò r(   r  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚFNetOnlyMLMHeadiI  c                óD   <€ \         SV `  4        \        V4      V n        R # r*   )rA   rB   r  Úpredictionsr[   s   &&€r&   rB   ÚFNetOnlyMLMHead.__init__J  s   ø€ Ü‰ÑÔÜ/°Ó7ˆÖr(   c                ó(   € V P                  V4      pV# r*   ©r  )r\   Úsequence_outputÚprediction_scoress   && r&   rk   ÚFNetOnlyMLMHead.forwardN  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð r(   r  r™   ru   s   @@r&   r  r  I  s   ù‡ € õ8÷!ò !r(   r  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚFNetOnlyNSPHeadiT  c                óp   <€ \         SV `  4        \        P                  ! VP                  ^4      V n        R# ©r€   N)rA   rB   r   rN   rE   Úseq_relationshipr[   s   &&€r&   rB   ÚFNetOnlyNSPHead.__init__U  s'   ø€ Ü‰ÑÔÜ "§	¢	¨&×*<Ñ*<¸aÓ @ˆÖr(   c                ó(   € V P                  V4      pV# r*   ©r  )r\   rø   Úseq_relationship_scores   && r&   rk   ÚFNetOnlyNSPHead.forwardY  s   € Ø!%×!6Ñ!6°}Ó!EÐØ%Ð%r(   r  r™   ru   s   @@r&   r  r  T  s   ù‡ € õA÷&ò &r(   r  c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚFNetPreTrainingHeadsi_  c                ó�   <€ \         SV `  4        \        V4      V n        \        P
                  ! VP                  ^4      V n        R# r  )rA   rB   r  r  r   rN   rE   r  r[   s   &&€r&   rB   ÚFNetPreTrainingHeads.__init__`  s4   ø€ Ü‰ÑÔÜ/°Ó7ˆÔÜ "§	¢	¨&×*<Ñ*<¸aÓ @ˆÖr(   c                óL   € V P                  V4      pV P                  V4      pW43# r*   ©r  r  )r\   r  rø   r  r  s   &&&  r&   rk   ÚFNetPreTrainingHeads.forwarde  s-   € Ø ×,Ñ,¨_Ó=ÐØ!%×!6Ñ!6°}Ó!EÐØ Ð8Ð8r(   r&  r™   ru   s   @@r&   r"  r"  _  s   ù‡ € õA÷
9ò 9r(   r"  c                   óF   a a€ ] tR tRt oRtRtV 3R ltV3R ltRtVt	V ;t
# )ÚFNetPreTrainedModelik  ÚfnetTc                óT  <€ \         SV `  V4       \        V\        4      '       d‚   \        P
                  ! VP                  \        P                  ! VP                  P                  R,          4      P                  R4      4       \        P                  ! VP                  4       R# R# )r.   Nr@   r?   )rA   Ú_init_weightsrª   r7   ÚinitÚcopy_rV   r   rT   r   rU   Úzeros_rZ   )r\   Úmoduler^   s   &&€r&   r,  Ú!FNetPreTrainedModel._init_weightsq  so   ø€ Ü‰Ñ˜fÔ%Ü�fœn×-Ò-Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÕ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�KŠK˜×-Ñ-Ö.ñ .r(   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r€   r]   r   )r´   rv   s   "€r&   rµ   Ú FNetPreTrainedModel.__annotate__k  s   ø‡ ‚ áÑò r(   rß   )rm   rn   ro   rp   Úbase_model_prefixÚsupports_gradient_checkpointingr,  Ú__annotate_func__rr   rs   rt   ru   s   @@r&   r)  r)  k  s   ù‡ € ð ÐØ&*Ð#õ/÷ … r(   r)  z0
    Output type of [`FNetForPreTraining`].
    )Úcustom_introc                   ó@   a € ] tR tRt o RtRtRtRtRtV 3R lt	Rt
V tR# )ÚFNetForPreTrainingOutputix  ar  
loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
    Total loss as the sum of the masked language modeling loss and the next sequence prediction
    (classification) loss.
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).
seq_relationship_logits (`torch.FloatTensor` of shape `(batch_size, 2)`):
    Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
    before SoftMax).
Nc                óâ   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[S[ P                  ,          R,          ;R&   # )r€   NÚlossÚprediction_logitsÚseq_relationship_logitsrŒ   )r   ÚFloatTensorræ   )r´   rv   s   "€r&   rµ   Ú%FNetForPreTrainingOutput.__annotate__x  sj   ø‡ ‚ ñ$ ×
Ñ
˜dÕ
"Ñ)ñ% ñ& ×(Ñ(¨4Õ/Ñ6ñ' ñ( #×.Ñ.°Õ5Ñ<ñ) ñ* ™×*Ñ*Õ+¨dÕ2Ñ9ò+ r(   rß   )rm   rn   ro   rp   rq   r;  r<  r=  rŒ   r6  rr   rs   )rv   s   @r&   r9  r9  x  s)   ø‡ € ñ	ð &*€DØ26ÐØ8<ÐØ59€M÷+ ƒ r(   r9  c                   óf   a a€ ] tR tRt oRtR	V 3R lltR tR t]R
V3R lR ll4       t	Rt
VtV ;t# )Ú	FNetModeli�  zì

The model can behave as an encoder, following the architecture described in [FNet: Mixing Tokens with Fourier
Transforms](https://huggingface.co/papers/2105.03824) by James Lee-Thorp, Joshua Ainslie, Ilya Eckstein, Santiago Ontanon.

c                óÆ   <€ \         SV `  V4       Wn        \        V4      V n        \        V4      V n        V'       d   \        V4      MRV n        V P                  4        R# )z^
add_pooling_layer (bool, *optional*, defaults to `True`):
    Whether to add a pooling layer
N)
rA   rB   r]   r7   rj   rÕ   Úencoderrï   ÚpoolerÚ	post_init)r\   r]   Úadd_pooling_layerr^   s   &&&€r&   rB   ÚFNetModel.__init__™  sK   ø€ ô
 	‰Ñ˜Ô ØŒä(¨Ó0ˆŒÜ" 6Ó*ˆŒç,=”j Ô(À4ˆŒð 	�‰Ör(   c                ó.   € V P                   P                  # r*   ©rj   rG   ©r\   s   &r&   Úget_input_embeddingsÚFNetModel.get_input_embeddings©  s   € Ø�‰×.Ñ.Ð.r(   c                ó&   € WP                   n        R # r*   rI  )r\   Úvalues   &&r&   Úset_input_embeddingsÚFNetModel.set_input_embeddings¬  s   € Ø*/�‰Ö'r(   c                óø   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[S[,          /# )	r€   re   NrZ   rV   rf   rç   rè   r±   )r   Ú
LongTensorr>  Úboolræ   r   )r´   rv   s   "€r&   rµ   ÚFNetModel.__annotate__°  s“   ø€ ÷ D
ñ D
á×#Ñ# dÕ*ðD
ñ ×(Ñ(¨4Õ/ðD
ñ ×&Ñ&¨Õ-ð	D
ñ
 ×(Ñ(¨4Õ/ðD
ñ # T�kðD
ñ ˜D•[ðD
ñ 
‘Õ	 ñD
r(   c                óä  € Ve   TMV P                   P                  pVe   TMV P                   P                  pVe   Ve   \        R4      hVe   VP	                  4       pVw  ršM'Ve   VP	                  4       R R pVw  ršM\        R4      hV P                   P
                  '       d.   V
R8:  d'   V P                   P                  V
8w  d   \        R4      hVe   VP                  MVP                  pVfy   \        V P                  R4      '       d6   V P                  P                  RR V
13,          pVP                  Wš4      pTpM'\        P                  ! V\        P                  VR7      pV P                  VVVVR7      pV P                  VVVR	7      pV^ ,          pV P                   e   V P!                  V4      MR pV'       g   VV3VR
,          ,           # \#        VVVP$                  R7      # )NzDYou cannot specify both input_ids and inputs_embeds at the same timez5You have to specify either input_ids or inputs_embedsr   z‹The `tpu_short_seq_length` in FNetConfig should be set equal to the sequence length being passed to the model when using TPU optimizations.rZ   ra   rb   )re   rV   rZ   rf   )rç   rè   r-   )rä   Úpooler_outputrŒ   r@   )r]   rç   rè   Ú
ValueErrorrX   r�   r†   rc   rd   rj   rZ   rU   r   rW   rY   rC  rD  r   rŒ   )r\   re   rZ   rV   rf   rç   rè   Úkwargsrg   Ú
batch_sizer%   rc   rh   ri   Úembedding_outputÚencoder_outputsr  rV  s   &&&&&&&,          r&   rk   ÚFNetModel.forward¯  sí  € ð %9Ò$DÑ È$Ï+É+×JjÑJjð 	ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆàÒ  ]Ò%>ÜÐcÓdÐdØÒ"Ø#Ÿ.™.Ó*ˆKØ%0Ñ"ˆJ˜
ØÒ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ%0Ñ"ˆJ˜
äÐTÓUÐUð �K‰K×5×5Ð5Ø˜dÔ"Ø—‘×0Ñ0°JÔ>äð;óð ð
 &/Ò%:�×!Ò!À×@TÑ@TˆàÒ!Ü�t—‘Ð(8×9Ò9Ø*.¯/©/×*HÑ*HÈÈKÈZÈKÈÕ*XÐ'Ø3J×3QÑ3QÐR\Ó3iÐ0Ø!A‘ä!&§¢¨[ÄÇ
Á
ÐSYÔ!Z�àŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðð Ÿ,™,ØØ!5Ø#ð 'ó 
ˆð
 *¨!Õ,ˆà8<¿¹Ò8O˜Ÿ™ OÔ4ÐUYˆçØ# ]Ð3°oÀbÕ6IÕIÐIä)Ø-Ø'Ø)×7Ñ7ô
ð 	
r(   )r]   rj   rC  rD  )T)NNNNNN)rm   rn   ro   rp   rq   rB   rK  rO  r	   rk   rr   rs   rt   ru   s   @@r&   rA  rA  �  s;   ù‡ € ñ÷ò /ò0ð ÷D
ñ D
ó ÷D
ð D
r(   rA  z¨
    FNet Model with two heads on top as done during the pretraining: a `masked language modeling` head and a `next
    sentence prediction (classification)` head.
    c                   ój   a a€ ] tR tRt oRRRR/tV 3R ltR tR t]RV3R	 lR
 ll4       t	Rt
VtV ;t# )ÚFNetForPreTrainingi÷  úcls.predictions.decoder.biasúcls.predictions.biasúcls.predictions.decoder.weightú&fnet.embeddings.word_embeddings.weightc                ó†   <€ \         SV `  V4       \        V4      V n        \	        V4      V n        V P                  4        R # r*   )rA   rB   rA  r*  r"  ÚclsrE  r[   s   &&€r&   rB   ÚFNetForPreTraining.__init__  s4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü'¨Ó/ˆŒð 	�‰Ör(   c                óB   € V P                   P                  P                  # r*   ©rd  r  r  rJ  s   &r&   Úget_output_embeddingsÚ(FNetForPreTraining.get_output_embeddings  ó   € Ø�x‰x×#Ñ#×+Ñ+Ð+r(   c                ó„   € WP                   P                  n        VP                  V P                   P                  n        R # r*   ©rd  r  r  r	  ©r\   Únew_embeddingss   &&r&   Úset_output_embeddingsÚ(FNetForPreTraining.set_output_embeddings  ó*   € Ø'5�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÖ!r(   c                óH  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          R	S[R,          R
S[S[,          /	# )r€   re   NrZ   rV   rf   ÚlabelsÚnext_sentence_labelrç   rè   r±   )r   r³   rS  ræ   r9  )r´   rv   s   "€r&   rµ   ÚFNetForPreTraining.__annotate__  s´   ø€ ÷ C
ñ C
á—<‘< $Õ&ðC
ñ Ÿ™ tÕ+ðC
ñ —l‘l TÕ)ð	C
ñ
 —|‘| dÕ*ðC
ñ —‘˜tÕ#ðC
ñ #Ÿ\™\¨DÕ0ðC
ñ # T�kðC
ñ ˜D•[ðC
ñ 
Ñ)Õ	)ñC
r(   c	           	     ó*  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p
V
R,          w  r¼V P                  W¼4      w  rÞRpVe|   Vex   \	        4       pV! VP                  RV P                   P                  4      VP                  R4      4      pV! VP                  R^4      VP                  R4      4      pVV,           pV'       g"   WÞ3V
R,          ,           pVe   V3V,           # T# \        VVVV
P                  R7      # )a¨  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
    config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
    loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
next_sentence_label (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
    (see `input_ids` docstring) Indices should be in `[0, 1]`:

    - 0 indicates sequence B is a continuation of sequence A,
    - 1 indicates sequence B is a random sequence.

Example:

```python
>>> from transformers import AutoTokenizer, FNetForPreTraining
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/fnet-base")
>>> model = FNetForPreTraining.from_pretrained("google/fnet-base")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs)
>>> prediction_logits = outputs.prediction_logits
>>> seq_relationship_logits = outputs.seq_relationship_logits
```N©rZ   rV   rf   rç   rè   :Nr€   Nºr€   NN)r;  r<  r=  rŒ   r@   )	r]   rè   r*  rd  r   ÚviewrD   r9  rŒ   )r\   re   rZ   rV   rf   rs  rt  rç   rè   rX  r�   r  rø   r  r  Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_lossr�   s   &&&&&&&&&,          r&   rk   ÚFNetForPreTraining.forward  s'  € ðL &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð *1°­Ñ&ˆØ48·H±H¸_Ó4\Ñ1Ðàˆ
ØÒÐ"5Ò"AÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNÙ!)Ð*@×*EÑ*EÀbÈ!Ó*LÐNa×NfÑNfÐgiÓNjÓ!kÐØ'Ð*<Õ<ˆJçØ'Ð@À7È2Å;ÕNˆFØ/9Ò/E�Z�M FÕ*ÐQÈ6ÐQä'ØØ/Ø$:Ø!×/Ñ/ô	
ð 	
r(   ©rd  r*  ©NNNNNNNN©rm   rn   ro   rp   Ú_tied_weights_keysrB   rh  ro  r	   rk   rr   rs   rt   ru   s   @@r&   r^  r^  ÷  sL   ù‡ € ð 	'Ð(>Ø(Ð*RðÐõ
ò,ò8ð ÷C
ñ C
ó ÷C
ð C
r(   r^  c                   ój   a a€ ] tR tRt oRRRR/tV 3R ltR tR t]RV3R	 lR
 ll4       t	Rt
VtV ;t# )ÚFNetForMaskedLMiZ  r_  r`  ra  rb  c                ó†   <€ \         SV `  V4       \        V4      V n        \	        V4      V n        V P                  4        R # r*   )rA   rB   rA  r*  r  rd  rE  r[   s   &&€r&   rB   ÚFNetForMaskedLM.__init__a  ó4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü" 6Ó*ˆŒð 	�‰Ör(   c                óB   € V P                   P                  P                  # r*   rg  rJ  s   &r&   rh  Ú%FNetForMaskedLM.get_output_embeddingsj  rj  r(   c                ó„   € WP                   P                  n        VP                  V P                   P                  n        R # r*   rl  rm  s   &&r&   ro  Ú%FNetForMaskedLM.set_output_embeddingsm  rq  r(   c                ó   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          R	S[S[,          /# ©
r€   re   NrZ   rV   rf   rs  rç   rè   r±   )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   ÚFNetForMaskedLM.__annotate__r  sŸ   ø€ ÷ (rñ (rá—<‘< $Õ&ð(rñ Ÿ™ tÕ+ð(rñ —l‘l TÕ)ð	(rñ
 —|‘| dÕ*ð(rñ —‘˜tÕ#ð(rñ # T�kð(rñ ˜D•[ð(rñ 
‘Õ	ñ(rr(   c           	     ó´  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p	V	^ ,          p
V P                  V
4      pRpVeG   \	        4       pV! VP                  RV P                   P                  4      VP                  R4      4      pV'       g"   V3V	R,          ,           pVe   V3V,           # T# \        WËV	P                  R7      # )a{  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
    config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
    loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
Nrw  rx  ©r;  ÚlogitsrŒ   r@   )	r]   rè   r*  rd  r   ry  rD   r   rŒ   )r\   re   rZ   rV   rf   rs  rç   rè   rX  r�   r  r  r|  r{  r�   s   &&&&&&&&,      r&   rk   ÚFNetForMaskedLM.forwardq  sÞ   € ð$ &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð " !�*ˆØ ŸH™H _Ó5ÐàˆØÒÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNçØ'Ð)¨G°B­KÕ7ˆFØ3AÒ3M�^Ð%¨Õ.ÐYÐSYÐYä >Ð[b×[pÑ[pÔqÐqr(   r  ©NNNNNNNr�  ru   s   @@r&   r„  r„  Z  sL   ù‡ € ð 	'Ð(>Ø(Ð*RðÐõ
ò,ò8ð ÷(rñ (ró ÷(rð (rr(   r„  zT
    FNet Model with a `next sentence prediction (classification)` head on top.
    c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚFNetForNextSentencePredictioni�  c                ó†   <€ \         SV `  V4       \        V4      V n        \	        V4      V n        V P                  4        R # r*   )rA   rB   rA  r*  r  rd  rE  r[   s   &&€r&   rB   Ú&FNetForNextSentencePrediction.__init__£  r‡  r(   c                ó   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          R	S[S[,          /# r�  )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   Ú*FNetForNextSentencePrediction.__annotate__­  s–   ø€ ÷ ?
ñ ?
á—<‘< $Õ&ð?
ñ Ÿ™ tÕ+ð?
ñ —l‘l TÕ)ð	?
ñ
 —|‘| dÕ*ð?
ñ —‘˜tÕ#ð?
ñ # T�kð?
ñ ˜D•[ð?
ñ 
Ñ,Õ	,ñ?
r(   c           	     óŽ  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p	V	^,          p
V P                  V
4      pRpVe3   \	        4       pV! VP                  R^4      VP                  R4      4      pV'       g"   V3V	R,          ,           pVe   V3V,           # T# \        VVV	P                  R7      # )a  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
    (see `input_ids` docstring). Indices should be in `[0, 1]`:

    - 0 indicates sequence B is a continuation of sequence A,
    - 1 indicates sequence B is a random sequence.

Example:

```python
>>> from transformers import AutoTokenizer, FNetForNextSentencePrediction
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/fnet-base")
>>> model = FNetForNextSentencePrediction.from_pretrained("google/fnet-base")
>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> next_sentence = "The sky is blue due to the shorter wavelength of blue light."
>>> encoding = tokenizer(prompt, next_sentence, return_tensors="pt")
>>> outputs = model(**encoding, labels=torch.LongTensor([1]))
>>> logits = outputs.logits
>>> assert logits[0, 0] < logits[0, 1]  # next sentence was random
```Nrw  rx  r�  r@   )r]   rè   r*  rd  r   ry  r   rŒ   )r\   re   rZ   rV   rf   rs  rç   rè   rX  r�   rø   Úseq_relationship_scoresr}  r{  r�   s   &&&&&&&&,      r&   rk   Ú%FNetForNextSentencePrediction.forward¬  sÜ   € ðH &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð   �
ˆà"&§(¡(¨=Ó"9Ðà!ÐØÒÜ'Ó)ˆHÙ!)Ð*A×*FÑ*FÀrÈ1Ó*MÈvÏ{É{Ð[]ËÓ!_ÐçØ-Ð/°'¸"µ+Õ=ˆFØ7IÒ7UÐ'Ð)¨FÕ2ÐaÐ[aÐaä*Ø#Ø*Ø!×/Ñ/ô
ð 	
r(   r  r“  ©
rm   rn   ro   rp   rB   r	   rk   rr   rs   rt   ru   s   @@r&   r•  r•  �  s(   ù‡ € õð ÷?
ñ ?
ó ÷?
ð ?
r(   r•  zœ
    FNet Model transformer with a sequence classification/regression head on top (a linear layer on top of the pooled
    output) e.g. for GLUE tasks.
    c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚFNetForSequenceClassificationiï  c                ó2  <€ \         SV `  V4       VP                  V n        \        V4      V n        \
        P                  ! VP                  4      V n        \
        P                  ! VP                  VP                  4      V n        V P                  4        R # r*   ©rA   rB   Ú
num_labelsrA  r*  r   rP   rQ   rR   rN   rE   Ú
classifierrE  r[   s   &&€r&   rB   Ú&FNetForSequenceClassification.__init__ö  si   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ˜fÓ%ˆŒ	ä—z’z &×"<Ñ"<Ó=ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Ör(   c                ó   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          R	S[S[,          /# r�  )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   Ú*FNetForSequenceClassification.__annotate__  s    ø€ ÷ :gñ :gá—<‘< $Õ&ð:gñ Ÿ™ tÕ+ð:gñ —l‘l TÕ)ð	:gñ
 —|‘| dÕ*ð:gñ —‘˜tÕ#ð:gñ # T�kð:gñ ˜D•[ð:gñ 
Ñ)Õ	)ñ:gr(   c           	     óz  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p	V	^,          p
V P                  V
4      p
V P	                  V
4      pRpVEe˜   V P                   P
                  f–   V P                  ^8X  d   RV P                   n        MrV P                  ^8”  dQ   VP                  \        P                  8X  g    VP                  \        P                  8X  d   RV P                   n        MRV P                   n        V P                   P
                  R8X  dK   \        4       pV P                  ^8X  d'   V! VP                  4       VP                  4       4      pMŽV! Wµ4      pM…V P                   P
                  R8X  d>   \        4       pV! VP                  RV P                  4      VP                  R4      4      pM-V P                   P
                  R8X  d   \        4       pV! Wµ4      pV'       g"   V3V	R,          ,           pVe   V3V,           # T# \!        WËV	P"                  R7      # )	ae  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
Nrw  Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrx  r�  r@   )r]   rè   r*  rR   r£  Úproblem_typer¢  r>   r   rY   Úintr   Úsqueezer   ry  r   r   rŒ   )r\   re   rZ   rV   rf   rs  rç   rè   rX  r�   rø   r‘  r;  r{  r�   s   &&&&&&&&,      r&   rk   Ú%FNetForSequenceClassification.forward  sÈ  € ð$ &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð   �
ˆØŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÓØ�{‰{×'Ñ'Ò/Ø—?‘? aÔ'Ø/;�D—K‘KÕ,Ø—_‘_ qÔ(¨f¯l©l¼e¿j¹jÔ.HÈFÏLÉLÔ\a×\eÑ\eÔLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ô7Ü"›9�Ø—?‘? aÔ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# FÓ3‘DØ—‘×)Ñ)Ð-JÔJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÔIÜ,Ó.�Ù Ó/�ßØ�Y ¨¥Õ,ˆFØ)-Ò)9�T�G˜fÕ$ÐE¸vÐEä'¨TÐPW×PeÑPeÔfÐfr(   ©r£  rR   r*  r¢  r“  r�  ru   s   @@r&   rŸ  rŸ  ï  s,   ù‡ € õ	ð ÷:gñ :gó ÷:gð :gr(   rŸ  c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚFNetForMultipleChoicei?  c                óü   <€ \         SV `  V4       \        V4      V n        \        P
                  ! VP                  4      V n        \        P                  ! VP                  ^4      V n
        V P                  4        R# rÆ   )rA   rB   rA  r*  r   rP   rQ   rR   rN   rE   r£  rE  r[   s   &&€r&   rB   ÚFNetForMultipleChoice.__init__A  sV   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü—z’z &×"<Ñ"<Ó=ˆŒÜŸ)š) F×$6Ñ$6¸Ó:ˆŒð 	�‰Ör(   c                ó   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          R	S[S[,          /# r�  )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   Ú"FNetForMultipleChoice.__annotate__L  sª   ø€ ÷ Mqñ Mqá—<‘< $Õ&ðMqñ Ÿ™ tÕ+ðMqñ —l‘l TÕ)ð	Mqñ
 —|‘| dÕ*ðMqñ —‘˜tÕ#ðMqñ # T�kðMqñ ˜D•[ðMqñ 
Ñ*Õ	*ñMqr(   c           	     ó>  € Ve   TMV P                   P                  pVe   VP                  ^,          MVP                  ^,          p	Ve"   VP                  RVP	                  R4      4      MRpVe"   VP                  RVP	                  R4      4      MRpVe"   VP                  RVP	                  R4      4      MRpVe2   VP                  RVP	                  R4      VP	                  R4      4      MRpV P                  VVVVVVR7      p
V
^,          pV P                  V4      pV P                  V4      pVP                  RV	4      pRpVe   \        4       pV! WÕ4      pV'       g"   V3V
R,          ,           pVe   V3V,           # T# \        WíV
P                  R7      # )a›  
input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
    Indices of input sequence tokens in the vocabulary.

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

    [What are input IDs?](../glossary#input-ids)
token_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
    Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
    1]`:

    - 0 corresponds to a *sentence A* token,
    - 1 corresponds to a *sentence B* token.

    [What are token type IDs?](../glossary#token-type-ids)
position_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
    Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
    config.max_position_embeddings - 1]`.

    [What are position IDs?](../glossary#position-ids)
inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, hidden_size)`, *optional*):
    Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
    is useful if you want more control over how to convert *input_ids* indices into associated vectors than the
    model's internal embedding lookup matrix.
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
    num_choices-1]` where `num_choices` is the size of the second dimension of the input tensors. (See
    `input_ids` above)
Nrw  rx  r�  r@   éþÿÿÿ)r]   rè   r   ry  rX   r*  rR   r£  r   r   rŒ   )r\   re   rZ   rV   rf   rs  rç   rè   rX  Únum_choicesr�   rø   r‘  Úreshaped_logitsr;  r{  r�   s   &&&&&&&&,        r&   rk   ÚFNetForMultipleChoice.forwardK  s›  € ðT &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆØ,5Ò,A�i—o‘o aÖ(À}×GZÑGZÐ[\ÕG]ˆà>GÒ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÒMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÒG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ò(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð —)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð   �
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÒÜ'Ó)ˆHÙ˜OÓ4ˆDçØ%Ð'¨'°"­+Õ5ˆFØ)-Ò)9�T�G˜fÕ$ÐE¸vÐEä(¨dÐZa×ZoÑZoÔpÐpr(   )r£  rR   r*  r“  r�  ru   s   @@r&   r±  r±  ?  s0   ù‡ € õð ÷Mqñ Mqó ÷Mqð Mqr(   r±  c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚFNetForTokenClassificationiœ  c                ó2  <€ \         SV `  V4       VP                  V n        \        V4      V n        \
        P                  ! VP                  4      V n        \
        P                  ! VP                  VP                  4      V n        V P                  4        R # r*   r¡  r[   s   &&€r&   rB   Ú#FNetForTokenClassification.__init__ž  si   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜fÓ%ˆŒ	ä—z’z &×"<Ñ"<Ó=ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Ör(   c                ó   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          R	S[S[,          /# r�  )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   Ú'FNetForTokenClassification.__annotate__«  s    ø€ ÷ )dñ )dá—<‘< $Õ&ð)dñ Ÿ™ tÕ+ð)dñ —l‘l TÕ)ð	)dñ
 —|‘| dÕ*ð)dñ —‘˜tÕ#ð)dñ # T�kð)dñ ˜D•[ð)dñ 
Ñ&Õ	&ñ)dr(   c           	     óÂ  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p	V	^ ,          p
V P                  V
4      p
V P	                  V
4      pRpVe=   \        4       pV! VP                  RV P                  4      VP                  R4      4      pV'       g"   V3V	R,          ,           pVe   V3V,           # T# \        WËV	P                  R7      # )zÃ
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
Nrw  rx  r�  r@   )
r]   rè   r*  rR   r£  r   ry  r¢  r   rŒ   )r\   re   rZ   rV   rf   rs  rç   rè   rX  r�   r  r‘  r;  r{  r�   s   &&&&&&&&,      r&   rk   Ú"FNetForTokenClassification.forwardª  sÙ   € ð  &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð " !�*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÒÜ'Ó)ˆHá˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDçØ�Y ¨¥Õ,ˆFØ)-Ò)9�T�G˜fÕ$ÐE¸vÐEä$¨$ÈW×MbÑMbÔcÐcr(   r¯  r“  r�  ru   s   @@r&   r¼  r¼  œ  s,   ù‡ € õ
ð ÷)dñ )dó ÷)dð )dr(   r¼  c                   óR   a a€ ] tR tRt oV 3R lt]RV3R lR ll4       tRtVtV ;t	# )ÚFNetForQuestionAnsweringi×  c                óè   <€ \         SV `  V4       VP                  V n        \        V4      V n        \
        P                  ! VP                  VP                  4      V n        V P                  4        R # r*   )
rA   rB   r¢  rA  r*  r   rN   rE   Ú
qa_outputsrE  r[   s   &&€r&   rB   Ú!FNetForQuestionAnswering.__init__Ù  sS   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒä˜fÓ%ˆŒ	ÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Ör(   c                óH  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          R	S[R,          R
S[S[,          /	# )r€   re   NrZ   rV   rf   Ústart_positionsÚend_positionsrç   rè   r±   )r   r³   rS  ræ   r   )r´   rv   s   "€r&   rµ   Ú%FNetForQuestionAnswering.__annotate__å  s©   ø€ ÷ 5
ñ 5
á—<‘< $Õ&ð5
ñ Ÿ™ tÕ+ð5
ñ —l‘l TÕ)ð	5
ñ
 —|‘| dÕ*ð5
ñ Ÿ™¨Õ,ð5
ñ —|‘| dÕ*ð5
ñ # T�kð5
ñ ˜D•[ð5
ñ 
Ñ-Õ	-ñ5
r(   c	           	     óT  € Ve   TMV P                   P                  pV P                  VVVVVVR7      p
V
^ ,          pV P                  V4      pVP	                  ^RR7      w  rÞVP                  R4      P                  4       pVP                  R4      P                  4       pR pVeÄ   VeÀ   \        VP                  4       4      ^8”  d   VP                  R4      p\        VP                  4       4      ^8”  d   VP                  R4      pVP                  ^4      pVP                  ^ V4      pVP                  ^ V4      p\        VR7      pV! WÕ4      pV! Wæ4      pVV,           ^,          pV'       g"   WÞ3V
R,          ,           pVe   V3V,           # T# \        WýWêP                  R7      # )Nrw  r}   )Úignore_indexrx  )r;  Ústart_logitsÚ
end_logitsrŒ   r@   )r]   rè   r*  rÆ  Úsplitr­  Ú
contiguousÚlenrX   Úclampr   r   rŒ   )r\   re   rZ   rV   rf   rÉ  rÊ  rç   rè   rX  r�   r  r‘  rÎ  rÏ  rz  Úignored_indexr{  Ú
start_lossÚend_lossr�   s   &&&&&&&&&,           r&   rk   Ú FNetForQuestionAnswering.forwardä  sŸ  € ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà—)‘)ØØ)Ø%Ø'Ø!5Ø#ð ó 
ˆð " !�*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÒ&¨=Ò+Dä�?×'Ñ'Ó)Ó*¨QÔ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ô,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,Ó@ˆJÙ 
Ó:ˆHØ$ xÕ/°1Õ4ˆJçØ"Ð/°'¸"µ+Õ=ˆFØ/9Ò/E�Z�M FÕ*ÐQÈ6ÐQä+ØÀ:×]rÑ]rô
ð 	
r(   )r*  r¢  rÆ  r€  r�  ru   s   @@r&   rÄ  rÄ  ×  s(   ù‡ € õ	ð ÷5
ñ 5
ó ÷5
ð 5
r(   rÄ  )
r„  r±  r•  r^  rÄ  rŸ  r¼  rÄ   rA  r)  )Hrq   Údataclassesr   Ú	functoolsr   r   r   Útorch.nnr   r   r   Ú r   r-  Úutilsr	   r
   Úscipyr   Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   r   Úconfiguration_fnetr   Ú
get_loggerrm   Úloggerr'   r+   r5   ÚModuler7   rx   r�   r›   r¦   r¼   rÄ   rÕ   rï   rû   r  r  r  r"  r)  r9  rA  r^  r„  r•  rŸ  r±  r¼  rÄ  Ú__all__rß   r(   r&   Ú<module>rè     sË  ðñ å !Ý ã Ý ß AÑ Aå &ß 7ñ ×ÒÝå !Ý 9÷
÷ 
õ 
õ .Ý 6Ý Ý *ð 
×	Ò	˜HÓ	%€òMò>ò
ô 4�R—Y‘Yô 4ôn! §	¡	ô !ôH�b—i‘iô ô
˜2Ÿ9™9ô 
ô�r—y‘yô ô �—‘ô ôÐ*ô ô6a�"—)‘)ô aô8�—‘ô ô  "§)¡)ô ô"
˜2Ÿ9™9ô 
ô!�b—i‘iô !ô&�b—i‘iô &ô	9˜2Ÿ9™9ô 	9ð ô	/˜/ó 	/ó ð	/ñ ðôð
 ô:˜{ó :ó óð:ð$ ôc
Ð#ó c
ó ðc
ñL ðôôZ
Ð,ó Z
óðZ
ðz ô?rÐ)ó ?ró ð?rñD ðôô
J
Ð$7ó J
óð
J
ñZ ðôôGgÐ$7ó GgóðGgðT ôYqÐ/ó Yqó ðYqðx ô7dÐ!4ó 7dó ð7dðt ôB
Ð2ó B
ó ðB
òJ‚r(   