§
    ‚ŠtjP¦  ã                   óV  — d Z ddlmZ ddlmZ ddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ dd	lmZmZ  e¦   «         r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mZm Z  ddl!m"Z" ddl#m$Z$ ddlm%Z% ddl&m'Z'  e%j(        e)¦  «        Z*d„ Z+d„ Z,d„ Z- G d„ dej.        ¦  «        Z/ G d„ dej.        ¦  «        Z0 G d„ dej.        ¦  «        Z1 G d„ dej.        ¦  «        Z2 G d„ dej.        ¦  «        Z3 G d „ d!ej.        ¦  «        Z4 G d"„ d#e¦  «        Z5 G d$„ d%ej.        ¦  «        Z6 G d&„ d'ej.        ¦  «        Z7 G d(„ d)ej.        ¦  «        Z8 G d*„ d+ej.        ¦  «        Z9 G d,„ d-ej.        ¦  «        Z: G d.„ d/ej.        ¦  «        Z; G d0„ d1ej.        ¦  «        Z<e G d2„ d3e"¦  «        ¦   «         Z= ed4¬5¦  «        e G d6„ d7e¦  «        ¦   «         ¦   «         Z>e G d8„ d9e=¦  «        ¦   «         Z? ed:¬5¦  «         G d;„ d<e=¦  «        ¦   «         Z@e G d=„ d>e=¦  «        ¦   «         ZA ed?¬5¦  «         G d@„ dAe=¦  «        ¦   «         ZB edB¬5¦  «         G dC„ dDe=¦  «        ¦   «         ZCe G dE„ dFe=¦  «        ¦   «         ZDe G dG„ dHe=¦  «        ¦   «         ZEe G dI„ dJe=¦  «        ¦   «         ZFg dK¢ZGdS )Lz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                 ó¤   — | j         d         }|d|…d|…f         }|                      t          j        ¦  «        } t          j        d| ||¦  «        S )z4Applies 2D matrix multiplication to 3D input arrays.r   Nzbij,jk,ni->bnk)ÚshapeÚtypeÚtorchÚ	complex64Úeinsum)ÚxÚmatrix_dim_oneÚmatrix_dim_twoÚ
seq_lengths       úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/fnet/modeling_fnet.pyÚ_two_dim_matmulr)   5   sN   € à”˜”€JØ# K Z K°°*°Ð$<Ô=€NØ	�Š�uŒÑÔ€AÝŒ<Ð(¨!¨^¸^ÑLÔLÐLó    c                 ó$   — t          | ||¦  «        S ©N)r)   )r$   r%   r&   s      r(   Útwo_dim_matmulr-   >   s   € Ý˜1˜n¨nÑ=Ô=Ð=r*   c                 ó¤   — | }t          t          | j        ¦  «        dd…         ¦  «        D ]#}t          j                             ||¬¦  «        }Œ$|S )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.
    r   N)Úaxis)ÚreversedÚrangeÚndimr!   Úfft)r$   Úoutr/   s      r(   Úfftnr5   C   sO   € ð €CÝ�˜qœv™œ q r rÔ*Ñ+Ô+ð ,ð ,ˆÝŒi�mŠm˜C dˆmÑ+Ô+ˆˆØ€Jr*   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚFNetEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j        |j
        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        |                      dt)          j        |j        ¦  «                             d¦  «        d¬¦  «         |                      dt)          j        | j                             ¦   «         t(          j        ¬¦  «        d¬¦  «         d S )	N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistentÚtoken_type_ids©Údtype)Ú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Úregister_bufferr!   ÚarangeÚexpandÚzerosr<   ÚsizeÚlong©ÚselfÚconfigÚ	__class__s     €r(   rD   zFNetEmbeddings.__init__V   sN  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒåœ) FÔ$6¸Ô8JÑKÔKˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r*   Nc                 ó˜  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|€| j        d d …d |…f         }|€mt          | d¦  «        r2| j        d d …d |…f         }|                     |d         |¦  «        }|}n+t          j        |t
          j        | j        j        ¬¦  «        }|€|  	                    |¦  «        }|  
                    |¦  «        }	||	z   }
|                      |¦  «        }|
|z  }
|                      |
¦  «        }
|                      |
¦  «        }
|                      |
¦  «        }
|
S )Nr>   r   r@   r   ©rB   Údevice)rY   r<   Úhasattrr@   rW   r!   rX   rZ   ra   rI   rM   rK   rN   rQ   rT   )r\   Ú	input_idsr@   r<   Úinputs_embedsÚinput_shaper'   Úbuffered_token_type_idsÚ buffered_token_type_ids_expandedrM   Ú
embeddingsrK   s               r(   ÚforwardzFNetEmbeddings.forwardj   se  € ØÐ Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLð
 Ð!Ý�tÐ-Ñ.Ô.ð mØ*.Ô*=¸a¸a¸aÀÀ*À¸nÔ*MÐ'Ø3J×3QÒ3QÐR]Ð^_ÔR`ÐblÑ3mÔ3mÐ0Ø!A��å!&¤¨[ÅÄ
ÐSWÔSdÔSkÐ!lÑ!lÔ!l�àÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐà"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ)Ñ)ˆ
Ø—^’^ JÑ/Ô/ˆ
Ø—_’_ ZÑ0Ô0ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr*   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   ri   Ú__classcell__©r^   s   @r(   r7   r7   S   sR   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð(!ð !ð !ð !ð !ð !ð !ð !r*   r7   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚFNetBasicFourierTransformc                 ór   •— t          ¦   «                              ¦   «          |                      |¦  «         d S r,   )rC   rD   Ú_init_fourier_transformr[   s     €r(   rD   z"FNetBasicFourierTransform.__init__�   s3   ø€ Ý‰Œ×ÒÑÔÐØ×$Ò$ VÑ,Ô,Ð,Ð,Ð,r*   c                 ól  — |j         s't          t          j        j        d¬¦  «        | _        d S |j        dk    rît          ¦   «         r¾|                      dt          j	        t          j        |j        ¦  «        t          j        ¬¦  «        ¦  «         |                      dt          j	        t          j        |j        ¦  «        t          j        ¬¦  «        ¦  «         t          t          | j        | j        ¬¦  «        | _        d S t%          j        d¦  «         t          | _        d S t          | _        d S )	N)r   é   ©Údimé   Údft_mat_hiddenrA   Údft_mat_seq)r%   r&   zpSciPy is needed for DFT matrix calculation and is not found. Using TPU optimized fast fourier transform instead.)Úuse_tpu_fourier_optimizationsr   r!   r3   r5   Úfourier_transformrJ   r   rU   Útensorr   ÚdftrG   r"   Útpu_short_seq_lengthr-   rz   ry   r   Úwarning)r\   r]   s     r(   rs   z1FNetBasicFourierTransform._init_fourier_transform“   s*  € ØÔ3ð 	*Ý%,­U¬Y¬^ÀÐ%HÑ%HÔ%HˆDÔ"Ð"Ð"ØÔ+¨tÒ3Ð3Ý!Ñ#Ô#ð .Ø×$Ò$Ø$¥e¤lµ6´:¸fÔ>PÑ3QÔ3QÕY^ÔYhÐ&iÑ&iÔ&iñô ð ð ×$Ò$Ø!¥5¤<µ´
¸6Ô;VÑ0WÔ0WÕ_dÔ_nÐ#oÑ#oÔ#oñô ð õ *1Ý"°4Ô3CÐTXÔTgð*ñ *ô *�Ô&Ð&Ð&õ ”ð*ñô ð õ *.�Ô&Ð&Ð&å%)ˆDÔ"Ð"Ð"r*   c                 ó<   — |                       |¦  «        j        }|fS r,   )r|   Úreal)r\   Úhidden_statesÚoutputss      r(   ri   z!FNetBasicFourierTransform.forwardª   s"   € ð ×(Ò(¨Ñ7Ô7Ô<ˆØˆzÐr*   )rj   rk   rl   rD   rs   ri   rn   ro   s   @r(   rq   rq   Ž   sV   ø€ € € € € ð-ð -ð -ð -ð -ð*ð *ð *ð.ð ð ð ð ð ð r*   rq   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetBasicOutputc                 ó’   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¬¦  «        | _        d S ©Nr:   )rC   rD   r   rN   rG   rO   r[   s     €r(   rD   zFNetBasicOutput.__init__µ   s9   ø€ Ý‰Œ×ÒÑÔÐÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒˆˆr*   c                 ó6   — |                       ||z   ¦  «        }|S r,   )rN   ©r\   rƒ   Úinput_tensors      r(   ri   zFNetBasicOutput.forward¹   s   € ØŸš |°mÑ'CÑDÔDˆØÐr*   ©rj   rk   rl   rD   ri   rn   ro   s   @r(   r†   r†   ´   sL   ø€ € € € € ðUð Uð Uð Uð Uðð ð ð ð ð ð r*   r†   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetFourierTransformc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r,   )rC   rD   rq   r\   r†   Úoutputr[   s     €r(   rD   zFNetFourierTransform.__init__¿   s;   ø€ Ý‰Œ×ÒÑÔÐÝ-¨fÑ5Ô5ˆŒ	Ý% fÑ-Ô-ˆŒˆˆr*   c                 ón   — |                       |¦  «        }|                      |d         |¦  «        }|f}|S ©Nr   )r\   r�   )r\   rƒ   Úself_outputsÚfourier_outputr„   s        r(   ri   zFNetFourierTransform.forwardÄ   s7   € Ø—y’y Ñ/Ô/ˆØŸš \°!¤_°mÑDÔDˆØ!Ð#ˆØˆr*   rŒ   ro   s   @r(   rŽ   rŽ   ¾   sG   ø€ € € € € ð.ð .ð .ð .ð .ð
ð ð ð ð ð ð r*   rŽ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚFNetIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r,   )rC   rD   r   rP   rG   Úintermediate_sizeÚdenseÚ
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr[   s     €r(   rD   zFNetIntermediate.__init__Í   sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r*   rƒ   Úreturnc                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r,   )r™   r�   ©r\   rƒ   s     r(   ri   zFNetIntermediate.forwardÕ   s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr*   ©rj   rk   rl   rD   r!   ÚTensorri   rn   ro   s   @r(   r–   r–   Ì   s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r*   r–   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )Ú
FNetOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S rˆ   )rC   rD   r   rP   r˜   rG   r™   rN   rO   rR   rS   rT   r[   s     €r(   rD   zFNetOutput.__init__Ý   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr*   rƒ   r‹   rž   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r,   )r™   rT   rN   rŠ   s      r(   ri   zFNetOutput.forwardã   s@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐr*   r¡   ro   s   @r(   r¤   r¤   Ü   si   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r*   r¤   c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )Ú	FNetLayerc                 óæ   •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S ©Nr   )
rC   rD   Úchunk_size_feed_forwardÚseq_len_dimrŽ   Úfourierr–   Úintermediater¤   r�   r[   s     €r(   rD   zFNetLayer.__init__ë   s^   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ+¨FÑ3Ô3ˆŒÝ,¨VÑ4Ô4ˆÔÝ  Ñ(Ô(ˆŒˆˆr*   c                 óˆ   — |                       |¦  «        }|d         }t          | j        | j        | j        |¦  «        }|f}|S r’   )r­   r   Úfeed_forward_chunkr«   r¬   )r\   rƒ   Úself_fourier_outputsr”   Úlayer_outputr„   s         r(   ri   zFNetLayer.forwardó   sN   € Ø#Ÿ|š|¨MÑ:Ô:ÐØ-¨aÔ0ˆå0ØÔ# TÔ%AÀ4ÔCSÐUcñ
ô 
ˆð  �/ˆàˆr*   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r,   )r®   r�   )r\   r”   Úintermediate_outputr²   s       r(   r°   zFNetLayer.feed_forward_chunkÿ   s0   € Ø"×/Ò/°Ñ?Ô?ÐØ—{’{Ð#6¸ÑGÔGˆØÐr*   )rj   rk   rl   rD   ri   r°   rn   ro   s   @r(   r¨   r¨   ê   sV   ø€ € € € € ð)ð )ð )ð )ð )ð
ð 
ð 
ðð ð ð ð ð ð r*   r¨   c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )ÚFNetEncoderc                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r¨   )Ú.0Ú_r]   s     €r(   ú
<listcomp>z(FNetEncoder.__init__.<locals>.<listcomp>	  s!   ø€ Ð#_Ð#_Ð#_¸!¥I¨fÑ$5Ô$5Ð#_Ð#_Ð#_r*   F)	rC   rD   r]   r   Ú
ModuleListr1   Únum_hidden_layersÚlayerÚgradient_checkpointingr[   s    `€r(   rD   zFNetEncoder.__init__  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#_Ð#_Ð#_Ð#_½uÀVÔE]Ñ?^Ô?^Ð#_Ñ#_Ô#_Ñ`Ô`ˆŒ
Ø&+ˆÔ#Ð#Ð#r*   FTc                 óä   — |rdnd }t          | j        ¦  «        D ] \  }}|r||fz   } ||¦  «        }|d         }Œ!|r||fz   }|st          d„ ||fD ¦   «         ¦  «        S t          ||¬¦  «        S )Nr¹   r   c              3   ó   K  — | ]}|®|V — Œ	d S r,   r¹   )rº   Úvs     r(   ú	<genexpr>z&FNetEncoder.forward.<locals>.<genexpr>  s"   è è € ÐXÐX˜qÈ!È-˜È-È-È-È-ÐXÐXr*   )Úlast_hidden_staterƒ   )Ú	enumerater¿   Útupler   )r\   rƒ   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚiÚlayer_moduleÚlayer_outputss           r(   ri   zFNetEncoder.forward  s·   € Ø"6Ð@˜B˜B¸DÐå(¨¬Ñ4Ô4ð 	-ð 	-‰OˆAˆ|Ø#ð IØ$5¸Ð8HÑ$HÐ!à(˜L¨Ñ7Ô7ˆMà)¨!Ô,ˆMˆMàð 	EØ 1°]Ð4DÑ DÐàð 	YÝÐXÐX ]Ð4EÐ$FÐXÑXÔXÑXÔXÐXå°ÐN_Ð`Ñ`Ô`Ð`r*   )FTrŒ   ro   s   @r(   r¶   r¶     sT   ø€ € € € € ð,ð ,ð ,ð ,ð ,ðað að að að að að að ar*   r¶   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )Ú
FNetPoolerc                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S r,   )rC   rD   r   rP   rG   r™   ÚTanhÚ
activationr[   s     €r(   rD   zFNetPooler.__init__"  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆr*   rƒ   rž   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S r’   )r™   rÒ   )r\   rƒ   Úfirst_token_tensorÚpooled_outputs       r(   ri   zFNetPooler.forward'  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr*   r¡   ro   s   @r(   rÏ   rÏ   !  s^   ø€ € € € € ð$ð $ð $ð $ð $ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r*   rÏ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚFNetPredictionHeadTransformc                 óV  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _
        n|j        | _
        t          j        |j        |j        ¬¦  «        | _        d S rˆ   )rC   rD   r   rP   rG   r™   rš   r›   rœ   r   Útransform_act_fnrN   rO   r[   s     €r(   rD   z$FNetPredictionHeadTransform.__init__2  s…   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý�fÔ'­Ñ-Ô-ð 	6Ý$*¨6Ô+<Ô$=ˆDÔ!Ð!à$*Ô$5ˆDÔ!Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒˆˆr*   rƒ   rž   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r,   )r™   rÙ   rN   r    s     r(   ri   z#FNetPredictionHeadTransform.forward;  s=   € ØŸ
š
 =Ñ1Ô1ˆØ×-Ò-¨mÑ<Ô<ˆØŸš }Ñ5Ô5ˆØÐr*   r¡   ro   s   @r(   r×   r×   1  sc   ø€ € € € € ðUð Uð Uð Uð Uð U¤\ð °e´lð ð ð ð ð ð ð ð r*   r×   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetLMPredictionHeadc                 ó  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        |j        ¦  «        | _        t	          j	        t          j        |j        ¦  «        ¦  «        | _        d S r,   )rC   rD   r×   Ú	transformr   rP   rG   rF   ÚdecoderÚ	Parameterr!   rX   Úbiasr[   s     €r(   rD   zFNetLMPredictionHead.__init__C  sc   ø€ Ý‰Œ×ÒÑÔÐÝ4°VÑ<Ô<ˆŒÝ”y Ô!3°VÔ5FÑGÔGˆŒÝ”L¥¤¨VÔ->Ñ!?Ô!?Ñ@Ô@ˆŒ	ˆ	ˆ	r*   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r,   )rÞ   rß   r    s     r(   ri   zFNetLMPredictionHead.forwardI  s*   € ØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆØÐr*   rŒ   ro   s   @r(   rÜ   rÜ   B  sL   ø€ € € € € ðAð Að Að Að Aðð ð ð ð ð ð r*   rÜ   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetOnlyMLMHeadc                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r,   )rC   rD   rÜ   Úpredictionsr[   s     €r(   rD   zFNetOnlyMLMHead.__init__P  s/   ø€ Ý‰Œ×ÒÑÔÐÝ/°Ñ7Ô7ˆÔÐÐr*   c                 ó0   — |                       |¦  «        }|S r,   )ræ   )r\   Úsequence_outputÚprediction_scoress      r(   ri   zFNetOnlyMLMHead.forwardT  s   € Ø ×,Ò,¨_Ñ=Ô=ÐØ Ð r*   rŒ   ro   s   @r(   rä   rä   O  sG   ø€ € € € € ð8ð 8ð 8ð 8ð 8ð!ð !ð !ð !ð !ð !ð !r*   rä   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetOnlyNSPHeadc                 ó†   •— t          ¦   «                              ¦   «          t          j        |j        d¦  «        | _        d S ©Nru   )rC   rD   r   rP   rG   Úseq_relationshipr[   s     €r(   rD   zFNetOnlyNSPHead.__init__[  s6   ø€ Ý‰Œ×ÒÑÔÐÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐr*   c                 ó0   — |                       |¦  «        }|S r,   )rî   )r\   rÕ   Úseq_relationship_scores      r(   ri   zFNetOnlyNSPHead.forward_  s   € Ø!%×!6Ò!6°}Ñ!EÔ!EÐØ%Ð%r*   rŒ   ro   s   @r(   rë   rë   Z  sL   ø€ € € € € ðAð Að Að Að Að&ð &ð &ð &ð &ð &ð &r*   rë   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚFNetPreTrainingHeadsc                 ó®   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        d¦  «        | _        d S rí   )rC   rD   rÜ   ræ   r   rP   rG   rî   r[   s     €r(   rD   zFNetPreTrainingHeads.__init__f  sF   ø€ Ý‰Œ×ÒÑÔÐÝ/°Ñ7Ô7ˆÔÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐr*   c                 ó^   — |                       |¦  «        }|                      |¦  «        }||fS r,   )ræ   rî   )r\   rè   rÕ   ré   rð   s        r(   ri   zFNetPreTrainingHeads.forwardk  s6   € Ø ×,Ò,¨_Ñ=Ô=ÐØ!%×!6Ò!6°}Ñ!EÔ!EÐØ Ð"8Ð8Ð8r*   rŒ   ro   s   @r(   rò   rò   e  sL   ø€ € € € € ðAð Að Að Að Að
9ð 9ð 9ð 9ð 9ð 9ð 9r*   rò   c                   ó2   ‡ — e Zd ZU eed<   dZdZˆ fd„Zˆ xZS )ÚFNetPreTrainedModelr]   ÚfnetTc                 óH  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rjt	          j        |j        t          j        |j        j	        d         ¦  «         
                    d¦  «        ¦  «         t	          j        |j        ¦  «         d S d S )Nr>   r=   )rC   Ú_init_weightsrš   r7   ÚinitÚcopy_r<   r!   rV   r   rW   Úzeros_r@   )r\   Úmoduler^   s     €r(   rù   z!FNetPreTrainedModel._init_weightsw  sŠ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�nÑ-Ô-ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/r*   )	rj   rk   rl   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingrù   rn   ro   s   @r(   rö   rö   q  sR   ø€ € € € € € àÐÐÑØÐØ&*Ð#ð/ð /ð /ð /ð /ð /ð /ð /ð /r*   rö   z0
    Output type of [`FNetForPreTraining`].
    )Úcustom_introc                   ó˜   — 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j        dz  ed<   dZ
eej                 dz  ed<   dS )ÚFNetForPreTrainingOutputa–  
    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).
    NÚlossÚprediction_logitsÚseq_relationship_logitsrƒ   )rj   rk   rl   rm   r  r!   ÚFloatTensorrþ   r  r  rƒ   rÇ   r¹   r*   r(   r  r  ~  s…   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø8<Ð˜UÔ.°Ñ5Ð<Ð<Ñ<Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ð9Ð9r*   r  c                   óÄ   ‡ — e Zd ZdZdˆ 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j
        dz  dedz  dedz  deez  fd„¦   «         Zˆ xZS )Ú	FNetModelzø

    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.

    Tc                 ó   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |rt          |¦  «        nd| _        |  	                    ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        N)
rC   rD   r]   r7   rh   r¶   ÚencoderrÏ   ÚpoolerÚ	post_init)r\   r]   Úadd_pooling_layerr^   s      €r(   rD   zFNetModel.__init__Ÿ  ss   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒå(¨Ñ0Ô0ˆŒÝ" 6Ñ*Ô*ˆŒà,=ÐG•j Ñ(Ô(Ð(À4ˆŒð 	�ŠÑÔÐÐÐr*   c                 ó   — | j         j        S r,   ©rh   rI   ©r\   s    r(   Úget_input_embeddingszFNetModel.get_input_embeddings¯  s   € ØŒÔ.Ð.r*   c                 ó   — || j         _        d S r,   r  )r\   Úvalues     r(   Úset_input_embeddingszFNetModel.set_input_embeddings²  s   € Ø*/ˆŒÔ'Ð'Ð'r*   Nrc   r@   r<   rd   rÈ   rÉ   rž   c                 óX  — |�|n| j         j        }|�|n| j         j        }|�|�t          d¦  «        ‚|�|                     ¦   «         }|\  }	}
n3|�"|                     ¦   «         d d…         }|\  }	}
nt          d¦  «        ‚| j         j        r%|
dk    r| j         j        |
k    rt          d¦  «        ‚|�|j        n|j        }|€gt          | j	        d¦  «        r1| j	        j
        d d …d |
…f         }|                     |	|
¦  «        }|}n!t          j        |t          j        |¬¦  «        }|  	                    ||||¬¦  «        }|                      |||¬	¦  «        }|d
         }| j        �|                      |¦  «        nd }|s||f|dd …         z   S t#          |||j        ¬¦  «        S )NzDYou cannot specify both input_ids and inputs_embeds at the same timer>   z5You have to specify either input_ids or inputs_embedsrx   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.r@   r`   )rc   r<   r@   rd   )rÈ   rÉ   r   r   )rÅ   Úpooler_outputrƒ   )r]   rÈ   rÉ   Ú
ValueErrorrY   r{   r   ra   rb   rh   r@   rW   r!   rX   rZ   r  r  r   rƒ   )r\   rc   r@   r<   rd   rÈ   rÉ   Úkwargsre   Ú
batch_sizer'   ra   rf   rg   Úembedding_outputÚencoder_outputsrè   r  s                     r(   ri   zFNetModel.forwardµ  s&  € ð %9Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø#Ÿ.š.Ñ*Ô*ˆKØ%0Ñ"ˆJ˜
˜
ØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKØ%0Ñ"ˆJ˜
˜
åÐTÑUÔUÐUð ŒKÔ5ð	à˜dÒ"Ð"Ø”Ô0°JÒ>Ð>åð;ñô ð ð
 &/Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý�t”Ð(8Ñ9Ô9ð [Ø*.¬/Ô*HÈÈÈÈKÈZÈKÈÔ*XÐ'Ø3J×3QÒ3QÐR\Ð^hÑ3iÔ3iÐ0Ø!A��å!&¤¨[ÅÄ
ÐSYÐ!ZÑ!ZÔ!Z�àŸ?š?ØØ%Ø)Ø'ð	 +ñ 
ô 
Ðð Ÿ,š,ØØ!5Ø#ð 'ñ 
ô 
ˆð
 *¨!Ô,ˆà8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆàð 	JØ# ]Ð3°oÀaÀbÀbÔ6IÑIÐIå)Ø-Ø'Ø)Ô7ð
ñ 
ô 
ð 	
r*   )T)NNNNNN)rj   rk   rl   rm   rD   r  r  r   r!   Ú
LongTensorr  ÚboolrÇ   r   ri   rn   ro   s   @r(   r	  r	  –  s  ø€ € € € € ðð ðð ð ð ð ð ð /ð /ð /ð0ð 0ð 0ð ð .2Ø26Ø04Ø26Ø,0Ø#'ðD
ð D
àÔ# dÑ*ðD
ð Ô(¨4Ñ/ðD
ð Ô&¨Ñ-ð	D
ð
 Ô(¨4Ñ/ðD
ð # T™kðD
ð ˜D‘[ðD
ð 
�Ñ	 ðD
ð D
ð D
ñ „^ðD
ð D
ð D
ð D
ð D
r*   r	  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                   óô   ‡ — e Zd Zdd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j	        dz  dej	        dz  dej	        dz  de
dz  de
dz  deez  fd„¦   «         Zˆ xZS )ÚFNetForPreTrainingúcls.predictions.biasú&fnet.embeddings.word_embeddings.weight©zcls.predictions.decoder.biaszcls.predictions.decoder.weightc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r,   )rC   rD   r	  r÷   rò   Úclsr  r[   s     €r(   rD   zFNetForPreTraining.__init__	  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	Ý'¨Ñ/Ô/ˆŒð 	�ŠÑÔÐÐÐr*   c                 ó$   — | j         j        j        S r,   ©r%  ræ   rß   r  s    r(   Úget_output_embeddingsz(FNetForPreTraining.get_output_embeddings  ó   € ØŒxÔ#Ô+Ð+r*   c                 óT   — || j         j        _        |j        | j         j        _        d S r,   ©r%  ræ   rß   rá   ©r\   Únew_embeddingss     r(   Úset_output_embeddingsz(FNetForPreTraining.set_output_embeddings  ó%   € Ø'5ˆŒÔÔ$Ø$2Ô$7ˆŒÔÔ!Ð!Ð!r*   Nrc   r@   r<   rd   ÚlabelsÚnext_sentence_labelrÈ   rÉ   rž   c	                 ó  — |�|n| j         j        }|                      ||||||¬¦  «        }
|
dd…         \  }}|                      ||¦  «        \  }}d}|�…|�ƒt	          ¦   «         } ||                     d| j         j        ¦  «        |                     d¦  «        ¦  «        } ||                     dd¦  «        |                     d¦  «        ¦  «        }||z   }|s||f|
dd…         z   }|�|f|z   n|S t          ||||
j        ¬¦  «        S )aH  
        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©r@   r<   rd   rÈ   rÉ   ru   r>   )r  r  r  rƒ   )	r]   rÉ   r÷   r%  r   ÚviewrF   r  rƒ   )r\   rc   r@   r<   rd   r0  r1  rÈ   rÉ   r  r„   rè   rÕ   ré   rð   Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_lossr�   s                       r(   ri   zFNetForPreTraining.forward  s_  € ðL &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð *1°°!°¬Ñ&ˆ˜Ø48·H²H¸_ÈmÑ4\Ô4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNØ!) Ð*@×*EÒ*EÀbÈ!Ñ*LÔ*LÐNa×NfÒNfÐgiÑNjÔNjÑ!kÔ!kÐØ'Ð*<Ñ<ˆJàð 	RØ'Ð)?Ð@À7È1È2È2Ä;ÑNˆFØ/9Ð/E�Z�M FÑ*Ð*È6ÐQå'ØØ/Ø$:Ø!Ô/ð	
ñ 
ô 
ð 	
r*   ©NNNNNNNN)rj   rk   rl   Ú_tied_weights_keysrD   r(  r.  r   r!   r¢   r  rÇ   r  ri   rn   ro   s   @r(   r   r   ý  sL  ø€ € € € € ð )?Ø*Rðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ð ð *.Ø.2Ø,0Ø-1Ø&*Ø37Ø,0Ø#'ðC
ð C
à”< $Ñ&ðC
ð œ tÑ+ðC
ð ”l TÑ)ð	C
ð
 ”| dÑ*ðC
ð ”˜tÑ#ðC
ð #œ\¨DÑ0ðC
ð # T™kðC
ð ˜D‘[ðC
ð 
Ð)Ñ	)ðC
ð C
ð C
ñ „^ðC
ð C
ð C
ð C
ð C
r*   r   c                   óÞ   ‡ — e Zd Zdd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j	        dz  dej	        dz  de
dz  de
dz  deez  fd„¦   «         Zˆ xZS )ÚFNetForMaskedLMr!  r"  r#  c                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r,   )rC   rD   r	  r÷   rä   r%  r  r[   s     €r(   rD   zFNetForMaskedLM.__init__g  óQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	Ý" 6Ñ*Ô*ˆŒð 	�ŠÑÔÐÐÐr*   c                 ó$   — | j         j        j        S r,   r'  r  s    r(   r(  z%FNetForMaskedLM.get_output_embeddingsp  r)  r*   c                 óT   — || j         j        _        |j        | j         j        _        d S r,   r+  r,  s     r(   r.  z%FNetForMaskedLM.set_output_embeddingss  r/  r*   Nrc   r@   r<   rd   r0  rÈ   rÉ   rž   c                 ó’  — |�|n| j         j        }|                      ||||||¬¦  «        }	|	d         }
|                      |
¦  «        }d}|�Kt	          ¦   «         } ||                     d| j         j        ¦  «        |                     d¦  «        ¦  «        }|s|f|	dd…         z   }|�|f|z   n|S t          |||	j        ¬¦  «        S )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]`.
        Nr3  r   r>   ru   ©r  Úlogitsrƒ   )	r]   rÉ   r÷   r%  r   r4  rF   r   rƒ   )r\   rc   r@   r<   rd   r0  rÈ   rÉ   r  r„   rè   ré   r7  r6  r�   s                  r(   ri   zFNetForMaskedLM.forwardw  sü   € ð$ &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð " !œ*ˆØ ŸHšH _Ñ5Ô5ÐàˆØÐÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNàð 	ZØ'Ð)¨G°A°B°B¬KÑ7ˆFØ3AÐ3M�^Ð%¨Ñ.Ð.ÐSYÐYå >Ð:KÐ[bÔ[pÐqÑqÔqÐqr*   ©NNNNNNN)rj   rk   rl   r:  rD   r(  r.  r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   r<  r<  `  s6  ø€ € € € € ð )?Ø*Rðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ð ð *.Ø.2Ø,0Ø-1Ø&*Ø,0Ø#'ð(rð (rà”< $Ñ&ð(rð œ tÑ+ð(rð ”l TÑ)ð	(rð
 ”| dÑ*ð(rð ”˜tÑ#ð(rð # T™kð(rð ˜D‘[ð(rð 
�Ñ	ð(rð (rð (rñ „^ð(rð (rð (rð (rð (rr*   r<  zT
    FNet Model with a `next sentence prediction (classification)` head on top.
    c                   óÈ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
ee	z  fd„¦   «         Z
ˆ xZS )ÚFNetForNextSentencePredictionc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r,   )rC   rD   r	  r÷   rë   r%  r  r[   s     €r(   rD   z&FNetForNextSentencePrediction.__init__©  r>  r*   Nrc   r@   r<   rd   r0  rÈ   rÉ   rž   c                 ó~  — |�|n| j         j        }|                      ||||||¬¦  «        }	|	d         }
|                      |
¦  «        }d}|�At	          ¦   «         } ||                     dd¦  «        |                     d¦  «        ¦  «        }|s|f|	dd…         z   }|�|f|z   n|S t          |||	j        ¬¦  «        S )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
        ```Nr3  r   r>   ru   rB  )r]   rÉ   r÷   r%  r   r4  r   rƒ   )r\   rc   r@   r<   rd   r0  rÈ   rÉ   r  r„   rÕ   Úseq_relationship_scoresr8  r6  r�   s                  r(   ri   z%FNetForNextSentencePrediction.forward²  sÿ   € ðH &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð   œ
ˆà"&§(¢(¨=Ñ"9Ô"9Ðà!ÐØÐÝ'Ñ)Ô)ˆHØ!) Ð*A×*FÒ*FÀrÈ1Ñ*MÔ*MÈvÏ{Ê{Ð[]ÉÌÑ!_Ô!_Ðàð 	bØ-Ð/°'¸!¸"¸"´+Ñ=ˆFØ7IÐ7UÐ'Ð)¨FÑ2Ð2Ð[aÐaå*Ø#Ø*Ø!Ô/ð
ñ 
ô 
ð 	
r*   rD  )rj   rk   rl   rD   r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   rF  rF  £  só   ø€ € € € € ðð ð ð ð ð ð *.Ø.2Ø,0Ø-1Ø&*Ø,0Ø#'ð?
ð ?
à”< $Ñ&ð?
ð œ tÑ+ð?
ð ”l TÑ)ð	?
ð
 ”| dÑ*ð?
ð ”˜tÑ#ð?
ð # T™kð?
ð ˜D‘[ð?
ð 
Ð,Ñ	,ð?
ð ?
ð ?
ñ „^ð?
ð ?
ð ?
ð ?
ð ?
r*   rF  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                   óÈ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
ee	z  fd„¦   «         Z
ˆ xZS )ÚFNetForSequenceClassificationc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S r,   ©rC   rD   Ú
num_labelsr	  r÷   r   rR   rS   rT   rP   rG   Ú
classifierr  r[   s     €r(   rD   z&FNetForSequenceClassification.__init__ü  sy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ˜fÑ%Ô%ˆŒ	å”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr*   Nrc   r@   r<   rd   r0  rÈ   rÉ   rž   c                 óÜ  — |�|n| j         j        }|                      ||||||¬¦  «        }	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }d}|��Z| j         j        €f| j        dk    rd| j         _        nN| j        dk    r7|j        t          j	        k    s|j        t          j
        k    rd| j         _        nd| j         _        | j         j        dk    rWt          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nŽ |||¦  «        }n�| j         j        dk    rGt          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j         j        dk    rt          ¦   «         } |||¦  «        }|s|f|	dd…         z   }|�|f|z   n|S t!          |||	j        ¬	¦  «        S )
a�  
        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).
        Nr3  r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr>   ru   rB  )r]   rÉ   r÷   rT   rO  Úproblem_typerN  rB   r!   rZ   Úintr   Úsqueezer   r4  r   r   rƒ   )r\   rc   r@   r<   rd   r0  rÈ   rÉ   r  r„   rÕ   rC  r  r6  r�   s                  r(   ri   z%FNetForSequenceClassification.forward  s  € ð$ &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð   œ
ˆØŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ñ @Ô @À&Ç+Â+ÈbÁ/Ä/ÑRÔR��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�Øð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå'¨T¸&ÐPWÔPeÐfÑfÔfÐfr*   rD  )rj   rk   rl   rD   r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   rK  rK  õ  s  ø€ € € € € ð	ð 	ð 	ð 	ð 	ð ð *.Ø.2Ø,0Ø-1Ø&*Ø,0Ø#'ð:gð :gà”< $Ñ&ð:gð œ tÑ+ð:gð ”l TÑ)ð	:gð
 ”| dÑ*ð:gð ”˜tÑ#ð:gð # T™kð:gð ˜D‘[ð:gð 
Ð)Ñ	)ð:gð :gð :gñ „^ð:gð :gð :gð :gð :gr*   rK  c                   óÈ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
ee	z  fd„¦   «         Z
ˆ xZS )ÚFNetForMultipleChoicec                 ó  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        ¦  «        | _        t	          j        |j	        d¦  «        | _
        |                      ¦   «          d S rª   )rC   rD   r	  r÷   r   rR   rS   rT   rP   rG   rO  r  r[   s     €r(   rD   zFNetForMultipleChoice.__init__G  sl   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜fÑ%Ô%ˆŒ	Ý”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr*   Nrc   r@   r<   rd   r0  rÈ   rÉ   rž   c                 óN  — |�|n| j         j        }|�|j        d         n|j        d         }	|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�=|                     d|                     d¦  «        |                     d¦  «        ¦  «        nd}|                      ||||||¬¦  «        }
|
d         }|                      |¦  «        }|                      |¦  «        }|                     d|	¦  «        }d}|�t          ¦   «         } |||¦  «        }|s|f|
dd…         z   }|�|f|z   n|S t          |||
j
        ¬¦  «        S )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)
        Nr   r>   éþÿÿÿr3  ru   rB  )r]   rÉ   r   r4  rY   r÷   rT   rO  r   r   rƒ   )r\   rc   r@   r<   rd   r0  rÈ   rÉ   r  Únum_choicesr„   rÕ   rC  Úreshaped_logitsr  r6  r�   s                    r(   ri   zFNetForMultipleChoice.forwardQ  sä  € ðT &1Ð%<�k�kÀ$Ä+ÔBYˆØ,5Ð,A�i”o aÔ(Ð(À}ÔGZÐ[\ÔG]ˆà>GÐ>S�I—N’N 2 y§~¢~°bÑ'9Ô'9Ñ:Ô:Ð:ÐY]ˆ	ØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØGSÐG_�|×(Ò(¨¨\×->Ò->¸rÑ-BÔ-BÑCÔCÐCÐeiˆð Ð(ð ×Ò˜r =×#5Ò#5°bÑ#9Ô#9¸=×;MÒ;MÈbÑ;QÔ;QÑRÔRÐRàð 	ð —)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô4ˆDàð 	FØ%Ð'¨'°!°"°"¬+Ñ5ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå(¨d¸?ÐZaÔZoÐpÑpÔpÐpr*   rD  )rj   rk   rl   rD   r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   rX  rX  E  s  ø€ € € € € ðð ð ð ð ð ð *.Ø.2Ø,0Ø-1Ø&*Ø,0Ø#'ðMqð Mqà”< $Ñ&ðMqð œ tÑ+ðMqð ”l TÑ)ð	Mqð
 ”| dÑ*ðMqð ”˜tÑ#ðMqð # T™kðMqð ˜D‘[ðMqð 
Ð*Ñ	*ðMqð Mqð Mqñ „^ðMqð Mqð Mqð Mqð Mqr*   rX  c                   óÈ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dedz  d	edz  d
ee	z  fd„¦   «         Z
ˆ xZS )ÚFNetForTokenClassificationc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S r,   rM  r[   s     €r(   rD   z#FNetForTokenClassification.__init__¤  sy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå˜fÑ%Ô%ˆŒ	å”z &Ô"<Ñ=Ô=ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr*   Nrc   r@   r<   rd   r0  rÈ   rÉ   rž   c                 ó²  — |�|n| j         j        }|                      ||||||¬¦  «        }	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }d}|�Ft          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }|s|f|	dd…         z   }|�|f|z   n|S t          |||	j	        ¬¦  «        S )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]`.
        Nr3  r   r>   ru   rB  )
r]   rÉ   r÷   rT   rO  r   r4  rN  r   rƒ   )r\   rc   r@   r<   rd   r0  rÈ   rÉ   r  r„   rè   rC  r  r6  r�   s                  r(   ri   z"FNetForTokenClassification.forward°  sû   € ð  &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð " !œ*ˆàŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHà�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå$¨$°vÈWÔMbÐcÑcÔcÐcr*   rD  )rj   rk   rl   rD   r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   r_  r_  ¢  s  ø€ € € € € ð
ð 
ð 
ð 
ð 
ð ð *.Ø.2Ø,0Ø-1Ø&*Ø,0Ø#'ð)dð )dà”< $Ñ&ð)dð œ tÑ+ð)dð ”l TÑ)ð	)dð
 ”| dÑ*ð)dð ”˜tÑ#ð)dð # T™kð)dð ˜D‘[ð)dð 
Ð&Ñ	&ð)dð )dð )dñ „^ð)dð )dð )dð )dð )dr*   r_  c                   óÞ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dej        dz  d	edz  d
edz  dee	z  fd„¦   «         Z
ˆ xZS )ÚFNetForQuestionAnsweringc                 óú   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r,   )
rC   rD   rN  r	  r÷   r   rP   rG   Ú
qa_outputsr  r[   s     €r(   rD   z!FNetForQuestionAnswering.__init__ß  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒå˜fÑ%Ô%ˆŒ	Ýœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr*   Nrc   r@   r<   rd   Ústart_positionsÚend_positionsrÈ   rÉ   rž   c	                 óž  — |�|n| j         j        }|                      ||||||¬¦  «        }
|
d         }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d }|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }| 	                    d|¦  «        }| 	                    d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }|s||f|
dd …         z   }|�|f|z   n|S t          ||||
j        ¬¦  «        S )	Nr3  r   r   r>   rv   )Úignore_indexru   )r  Ústart_logitsÚ
end_logitsrƒ   )r]   rÉ   r÷   re  ÚsplitrV  Ú
contiguousÚlenrY   Úclampr   r   rƒ   )r\   rc   r@   r<   rd   rf  rg  rÈ   rÉ   r  r„   rè   rC  rj  rk  r5  Úignored_indexr6  Ú
start_lossÚend_lossr�   s                        r(   ri   z FNetForQuestionAnswering.forwardê  s  € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà—)’)ØØ)Ø%Ø'Ø!5Ø#ð ñ 
ô 
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJàð 	RØ" JÐ/°'¸!¸"¸"´+Ñ=ˆFØ/9Ð/E�Z�M FÑ*Ð*È6ÐQå+Ø¨,À:Ð]dÔ]rð
ñ 
ô 
ð 	
r*   r9  )rj   rk   rl   rD   r   r!   r¢   r  rÇ   r   ri   rn   ro   s   @r(   rc  rc  Ý  s  ø€ € € € € ð	ð 	ð 	ð 	ð 	ð ð *.Ø.2Ø,0Ø-1Ø/3Ø-1Ø,0Ø#'ð5
ð 5
à”< $Ñ&ð5
ð œ tÑ+ð5
ð ”l TÑ)ð	5
ð
 ”| dÑ*ð5
ð œ¨Ñ,ð5
ð ”| dÑ*ð5
ð # T™kð5
ð ˜D‘[ð5
ð 
Ð-Ñ	-ð5
ð 5
ð 5
ñ „^ð5
ð 5
ð 5
ð 5
ð 5
r*   rc  )
r<  rX  rF  r   rc  rK  r_  r¨   r	  rö   )Hrm   Ú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_loggerrj   Úloggerr)   r-   r5   ÚModuler7   rq   r†   rŽ   r–   r¤   r¨   r¶   rÏ   r×   rÜ   rä   rë   rò   rö   r  r	  r   r<  rF  rK  rX  r_  rc  Ú__all__r¹   r*   r(   ú<module>rƒ     sK  ðð Ð à !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ÐÑÔð ØÐÐÐÐÐà !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð .Ð -Ð -Ð -Ð -Ð -Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ðMð Mð Mð>ð >ð >ð
ð ð ð 8ð 8ð 8ð 8ð 8�R”Yñ 8ô 8ð 8ðv#ð #ð #ð #ð # ¤	ñ #ô #ð #ðLð ð ð ð �b”iñ ô ð ð
ð 
ð 
ð 
ð 
˜2œ9ñ 
ô 
ð 
ðð ð ð ð �r”yñ ô ð ð ð ð ð ð �”ñ ô ð ðð ð ð ð Ð*ñ ô ð ð6að að að að a�"”)ñ aô að að8ð ð ð ð �”ñ ô ð ð ð ð ð ð  "¤)ñ ô ð ð"
ð 
ð 
ð 
ð 
˜2œ9ñ 
ô 
ð 
ð!ð !ð !ð !ð !�b”iñ !ô !ð !ð&ð &ð &ð &ð &�b”iñ &ô &ð &ð	9ð 	9ð 	9ð 	9ð 	9˜2œ9ñ 	9ô 	9ð 	9ð ð	/ð 	/ð 	/ð 	/ð 	/˜/ñ 	/ô 	/ñ „ð	/ð €ððñ ô ð
 ð:ð :ð :ð :ð :˜{ñ :ô :ñ „ñô ð:ð$ ðc
ð c
ð c
ð c
ð c
Ð#ñ c
ô c
ñ „ðc
ðL €ððñ ô ðZ
ð Z
ð Z
ð Z
ð Z
Ð,ñ Z
ô Z
ñô ðZ
ðz ð?rð ?rð ?rð ?rð ?rÐ)ñ ?rô ?rñ „ð?rðD €ððñ ô ð
J
ð J
ð J
ð J
ð J
Ð$7ñ J
ô J
ñô ð
J
ðZ €ððñ ô ðGgð Ggð Ggð Ggð GgÐ$7ñ Ggô Ggñô ðGgðT ðYqð Yqð Yqð Yqð YqÐ/ñ Yqô Yqñ „ðYqðx ð7dð 7dð 7dð 7dð 7dÐ!4ñ 7dô 7dñ „ð7dðt ðB
ð B
ð B
ð B
ð B
Ð2ñ B
ô B
ñ „ðB
ðJð ð €€€r*   