§
    ‚Štjâ  ã                   ó¨  — d Z ddlmZ ddl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 dd	lmZmZmZmZmZmZ dd
lmZ ddlmZmZmZ ddlmZ  ej        e ¦  «        Z!dZ" G d„ dej#        ¦  «        Z$ G d„ dej#        ¦  «        Z%dej&        de'de'dej&        fd„Z( G d„ dej#        ¦  «        Z) G d„ dej#        ¦  «        Z* G d„ dej#        ¦  «        Z+ G d„ dej#        ¦  «        Z,	 dHd"ej&        d#e'd$e'd%e-d&e-dej&        fd'„Z. G d(„ d)ej#        ¦  «        Z/ G d*„ d+ej#        ¦  «        Z0e G d,„ d-e¦  «        ¦   «         Z1 G d.„ d/ej#        ¦  «        Z2 ed0¬1¦  «        e G d2„ d3e¦  «        ¦   «         ¦   «         Z3 ed4¬1¦  «         G d5„ d6e1¦  «        ¦   «         Z4e G d7„ d8e1¦  «        ¦   «         Z5 ed9¬1¦  «         G d:„ d;e1¦  «        ¦   «         Z6e G d<„ d=e1¦  «        ¦   «         Z7 ed>¬1¦  «         G d?„ d@e1¦  «        ¦   «         Z8e G dA„ dBe1¦  «        ¦   «         Z9e G dC„ dDe1¦  «        ¦   «         Z:e G dE„ dFe1¦  «        ¦   «         Z;g dG¢Z<dS )Iz!PyTorch Funnel Transformer model.é    )Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚBaseModelOutputÚMaskedLMOutputÚMultipleChoiceModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)ÚModelOutputÚauto_docstringÚloggingé   )ÚFunnelConfigg    €„.Ac                   ój   ‡ — e Zd Zdeddfˆ fd„Z	 ddej        dz  dej        dz  dej        fd„Zˆ xZS )	ÚFunnelEmbeddingsÚconfigÚreturnNc                 ó$  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j	        |j
        ¬¦  «        | _        t          j        |j        ¦  «        | _        d S )N)Úpadding_idx©Úeps)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚ	LayerNormÚd_modelÚlayer_norm_epsÚ
layer_normÚDropoutÚhidden_dropoutÚdropout©Úselfr   Ú	__class__s     €úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/funnel/modeling_funnel.pyr    zFunnelEmbeddings.__init__-   so   ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝœ, v¤~¸6Ô;PÐQÑQÔQˆŒÝ”z &Ô"7Ñ8Ô8ˆŒˆˆó    Ú	input_idsÚinputs_embedsc                 óˆ   — |€|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ©N)r%   r)   r,   )r.   r2   r3   Ú
embeddingss       r0   ÚforwardzFunnelEmbeddings.forward3   sE   € ð Ð Ø ×0Ò0°Ñ;Ô;ˆMØ—_’_ ]Ñ3Ô3ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr1   ©NN©	Ú__name__Ú
__module__Ú__qualname__r   r    ÚtorchÚTensorr7   Ú__classcell__©r/   s   @r0   r   r   ,   s”   ø€ € € € € ð9˜|ð 9°ð 9ð 9ð 9ð 9ð 9ð 9ð [_ðð Øœ¨Ñ,ðØDIÄLÐSWÑDWðà	Œðð ð ð ð ð ð ð r1   r   c                   óî  ‡ — e Zd ZU dZdZeed<   deddfˆ fd„Z	 	 d"de	j
        d	e	j
        dz  d
e	j
        dz  dee	j
                 fd„Zd
e	j
        de	j
        fd„Zdede	j        de	j        dee	j
                 eee	j
                          z  fd„Zde	j
        defd„Zd#de	j
        dedede	j
        fd„Zde	j
        ee	j
                 z  ee	j
                 z  deee         z  ee         z  de	j
        fd„Z	 d$de	j
        ee	j
                 z  ee	j
                 z  dedede	j
        fd„Zdee	j
                 dee	j
        ee	j
                 f         fd „Zdee	j
                 dee	j
                 fd!„Zˆ xZS )%ÚFunnelAttentionStructurez>
    Contains helpers for `FunnelRelMultiheadAttention `.
    é   Úcls_token_type_idr   r   Nc                 óÜ   •— t          ¦   «                              ¦   «          || _        t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d | _        d S r5   )	r   r    r   r   r*   r+   Úsin_dropoutÚcos_dropoutÚpooling_multr-   s     €r0   r    z!FunnelAttentionStructure.__init__D   sZ   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝœ: fÔ&;Ñ<Ô<ˆÔÝœ: fÔ&;Ñ<Ô<ˆÔð !ˆÔÐÐr1   r3   Úattention_maskÚtoken_type_idsc                 óZ  — d| _         |                     d¦  «        x| _        }|                      ||j        |j        ¦  «        }|�|                      |¦  «        nd}| j        j        r;t          j
                             |                     |dz
  |dz
  g¦  «        d¦  «        nd}||||fS )zCReturns the attention inputs associated to the inputs of the model.r   N)r   r   r   r   )rH   ÚsizeÚseq_lenÚget_position_embedsÚdtypeÚdeviceÚtoken_type_ids_to_matr   Úseparate_clsr   Ú
functionalÚpadÚnew_ones)r.   r3   rI   rJ   rM   Úposition_embedsÚtoken_type_matÚcls_masks           r0   Úinit_attention_inputsz.FunnelAttentionStructure.init_attention_inputsM   s½   € ð ˆÔØ!.×!3Ò!3°AÑ!6Ô!6Ð6ˆŒ�wØ×2Ò2°7¸MÔ<OÐQ^ÔQeÑfÔfˆØGUÐGa˜×3Ò3°NÑCÔCÐCÐgkˆð Œ{Ô'ð�BŒM×Ò˜m×4Ò4°gÀ±kÀ7ÈQÁ;Ð5OÑPÔPÐR^Ñ_Ô_Ð_àð 	ð
   °ÀÐJÐJr1   c                 ó”   — |dd…dd…df         |dd…df         k    }|| j         k    }|dd…dd…df         |dd…df         z  }||z  S )z-Convert `token_type_ids` to `token_type_mat`.N)rD   )r.   rJ   rW   Úcls_idsÚcls_mats        r0   rQ   z.FunnelAttentionStructure.token_type_ids_to_mata   sn   € à'¨¨¨¨1¨1¨1¨d¨
Ô3°~ÀaÀaÀaÈÀgÔ7NÒNˆà  DÔ$:Ò:ˆØ˜!˜!˜!˜Q˜Q˜Q ˜*Ô%¨°°°°4°Ô(8Ñ8ˆØ˜Ñ'Ð'r1   rM   rO   rP   c                 ó®  — | j         j        }| j         j        dk    �rKt          j        d|dt          j        |¬¦  «                             |¦  «        }t          j        d|dz  dt          j        |¬¦  «                             |¦  «        }dd||dz  z  z  z  }|dd…df         |d         z  }t          j        |¦  «        }	|                      |	¦  «        }
t          j	        |¦  «        }|  
                    |¦  «        }t          j        |
|
gd	¬
¦  «        }t          j        ||	gd	¬
¦  «        }t          j        ||gd	¬
¦  «        }t          j        |	 |gd	¬
¦  «        }||||fS t          j        d|dz  dt          j        |¬¦  «                             |¦  «        }dd||dz  z  z  z  }t          j        | dz  |dz  dt          j        |¬¦  «                             |¦  «        }|dz  }|dd…df         |d         z  }|                      t          j        |¦  «        ¦  «        }	|  
                    t          j	        |¦  «        ¦  «        }t          j        |	|gd	¬
¦  «        }t          j        d|t          j        |¬¦  «                             |¦  «        }|}g }t          d| j         j        ¦  «        D �]}|dk    rd}n…|                      ||¦  «        }d|dz
  z  }|                      |||d¬¦  «        }|dd…df         |z   }|                     |                     d¦  «        |¦  «        }t          j        |d|¦  «        }|}d|z  }|                      ||¦  «        }|dd…df         |z   }|                     |                     d¦  «        |¦  «        }t          j        |d|¦  «        }|                     ||g¦  «         �Œ|S )a  
        Create and cache inputs related to relative position encoding. Those are very different depending on whether we
        are using the factorized or the relative shift attention:

        For the factorized attention, it returns the matrices (phi, pi, psi, omega) used in the paper, appendix A.2.2,
        final formula.

        For the relative shift attention, it returns all possible vectors R used in the paper, appendix A.2.1, final
        formula.

        Paper link: https://huggingface.co/papers/2006.03236
        Ú
factorizedr   ç      ð?©rO   rP   rC   r   i'  Néÿÿÿÿ©Údim)Úshift)r   r'   Úattention_typer=   ÚarangeÚint64ÚtoÚsinrF   ÚcosrG   ÚcatÚrangeÚ
num_blocksÚstride_pool_posÚrelative_posÚexpandrL   ÚgatherÚappend)r.   rM   rO   rP   r'   Úpos_seqÚfreq_seqÚinv_freqÚsinusoidÚ	sin_embedÚsin_embed_dÚ	cos_embedÚcos_embed_dÚphiÚpsiÚpiÚomegaÚ
rel_pos_idÚzero_offsetÚ	pos_embedÚposÚ
pooled_posÚposition_embeds_listÚblock_indexÚposition_embeds_poolingÚstrideÚrel_posÚposition_embeds_no_poolings                               r0   rN   z,FunnelAttentionStructure.get_position_embedsi   sâ  € ð ”+Ô%ˆØŒ;Ô%¨Ò5Ñ5õ ”l 1 g¨s½%¼+ÈfÐUÑUÔU×XÒXÐY^Ñ_Ô_ˆGÝ”| A w°!¡|°SÅÄÐTZÐ[Ñ[Ô[×^Ò^Ð_dÑeÔeˆHØ˜E h°'¸Q±,Ñ&?Ñ@ÑAˆHØ˜q˜q˜q $˜wÔ'¨(°4¬.Ñ8ˆHÝœ	 (Ñ+Ô+ˆIØ×*Ò*¨9Ñ5Ô5ˆKÝœ	 (Ñ+Ô+ˆIØ×*Ò*¨9Ñ5Ô5ˆKå”)˜[¨+Ð6¸BÐ?Ñ?Ô?ˆCÝ”)˜Y¨	Ð2¸Ð;Ñ;Ô;ˆCÝ”˜K¨Ð5¸2Ð>Ñ>Ô>ˆBÝ”I 	˜z¨9Ð5¸2Ð>Ñ>Ô>ˆEØ˜˜S %Ð(Ð(õ ”| A w°!¡|°SÅÄÐTZÐ[Ñ[Ô[×^Ò^Ð_dÑeÔeˆHØ˜E h°'¸Q±,Ñ&?Ñ@ÑAˆHåœ w h°¡l°G¸a±KÀÍEÌKÐ`fÐgÑgÔg×jÒjÐkpÑqÔqˆJØ! A™+ˆKØ! ! ! ! T 'Ô*¨X°d¬^Ñ;ˆHØ×(Ò(­¬°8Ñ)<Ô)<Ñ=Ô=ˆIØ×(Ò(­¬°8Ñ)<Ô)<Ñ=Ô=ˆIÝœ	 9¨iÐ"8¸bÐAÑAÔAˆIå”,˜q 'µ´ÀVÐLÑLÔL×OÒOÐPUÑVÔVˆCØˆJØ#%Ð Ý$ Q¨¬Ô(>Ñ?Ô?ð cñ c�ð  !Ò#Ð#Ø.2Ð+Ð+à!%×!5Ò!5°c¸;Ñ!GÔ!G�Jð  ;°¡?Ñ3�FØ"×/Ò/°°V¸ZÈqÐ/ÑQÔQ�GØ% a a a¨ gÔ.°Ñ<�GØ%Ÿnšn¨W¯\ª\¸!©_¬_¸gÑFÔF�GÝ.3¬l¸9ÀaÈÑ.QÔ.QÐ+ð !�Ø˜K™�Ø×+Ò+¨C°Ñ8Ô8�à! ! ! ! T 'Ô*¨[Ñ8�Ø!Ÿ.š.¨¯ª°a©¬¸'ÑBÔB�Ý-2¬\¸)ÀQÈÑ-PÔ-PÐ*à$×+Ò+Ð-GÐI`Ð,aÑbÔbÐbÑbØ'Ð'r1   Úpos_idr…   c                 óê   — | j         j        r]|                     d|z   dz   g¦  «        }| j         j        r
|dd…         n	|dd…         }t	          j        ||ddd…         gd¦  «        S |ddd…         S )ze
        Pool `pos_id` while keeping the cls token separate (if `config.separate_cls=True`).
        rC   r   ra   Nr   )r   rR   Ú
new_tensorÚtruncate_seqr=   rk   )r.   rŠ   r…   Úcls_posÚpooled_pos_ids        r0   rn   z(FunnelAttentionStructure.stride_pool_pos¹   s�   € ð Œ;Ô#ð 		ð
 ×'Ò'¨1¨k©>Ð):¸QÑ)>Ð(?Ñ@Ô@ˆGØ,0¬KÔ,DÐT˜F 1 R 4œL˜LÈ&ÐQRÐQSÐQSÌ*ˆMÝ”9˜g }°S°S°q°SÔ'9Ð:¸AÑ>Ô>Ð>à˜#˜#˜A˜#”;Ðr1   r   r‚   r‡   rd   c                 óÖ   — |€|}|d         |d         z
  }||j         d         z  }|||z  z   }|d         |d         z
  }t          j        ||dz
  | t          j        |j        ¬¦  «        S )zV
        Build the relative positional vector between `pos` and `pooled_pos`.
        Nr   ra   r   r`   )Úshaper=   rf   ÚlongrP   )	r.   r‚   r‡   rƒ   rd   Ú	ref_pointÚ
num_removeÚmax_distÚmin_dists	            r0   ro   z%FunnelAttentionStructure.relative_posÈ   s{   € ð ÐØˆJà˜q”M C¨¤FÑ*ˆ	Ø˜ZÔ-¨aÔ0Ñ0ˆ
Ø˜z¨FÑ2Ñ2ˆØ˜a”= 3 r¤7Ñ*ˆåŒ|˜H h°¡l°V°GÅ5Ä:ÐVYÔV`ÐaÑaÔaÐar1   ÚtensorÚaxisc                 óš  ‡ ‡— |€dS t          ‰t          t          f¦  «        r‰D ]}‰                      ||¦  «        }Œ|S t          |t          t          f¦  «        r% t	          |¦  «        ˆˆ fd„|D ¦   «         ¦  «        S ‰|j        z  Š‰ j        j        r‰ j        j        rt          ddd¦  «        nt          ddd¦  «        }t          t          d¦  «        g‰z  |gz   ¦  «        }‰ j        j        rPt          t          d¦  «        g‰z  t          dd¦  «        gz   ¦  «        }t          j        ||         |g‰¬¦  «        }||         S )zT
        Perform pooling by stride slicing the tensor along the given axis.
        Nc              3   óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r5   )Ústride_pool)Ú.0Úxr˜   r.   s     €€r0   ú	<genexpr>z7FunnelAttentionStructure.stride_pool.<locals>.<genexpr>é   s3   øè è € ÐJÐJ¸a × 0Ò 0°°DÑ 9Ô 9ÐJÐJÐJÐJÐJÐJr1   ra   rC   r   )r˜   )Ú
isinstanceÚlistÚtupler›   ÚtypeÚndimr   rR   r�   Úslicer=   rk   )r.   r—   r˜   ÚaxÚ
axis_sliceÚ	enc_sliceÚ	cls_slices   ` `    r0   r›   z$FunnelAttentionStructure.stride_poolÖ   sk  øø€ ð ˆ>Ø�4õ �d�T¥5˜MÑ*Ô*ð 	Øð 6ð 6�Ø×)Ò)¨&°"Ñ5Ô5��ØˆMõ �f�u¥d˜mÑ,Ô,ð 	KØ•4˜‘<”<ÐJÐJÐJÐJÐJÀ6ÐJÑJÔJÑJÔJÐJð 	�”Ñˆð #'¤+Ô":Ðq¸t¼{Ô?WÐq�E�$˜˜AÑÔÐÕ]bÐcgÐimÐopÑ]qÔ]qð 	õ �5 ™;œ;˜-¨$Ñ.°*°Ñ=Ñ>Ô>ˆ	ØŒ;Ô#ð 	GÝ�u T™{œ{˜m¨dÑ2µe¸DÀ!±n´nÐ5EÑEÑFÔFˆIÝ”Y  yÔ 1°6Ð:ÀÐFÑFÔFˆFØ�iÔ Ð r1   ÚmeanÚmodec                 ó  ‡ ‡‡‡— ‰€dS t          ‰t          t          f¦  «        r' t          ‰¦  «        ˆˆ ˆˆfd„‰D ¦   «         ¦  «        S ‰ j        j        r@‰ j        j        r‰dd…dd…f         n‰}t          j        ‰dd…dd…f         |gd¬¦  «        Š‰j	        }|dk    r‰dd…ddd…df         Šn|dk    r‰dd…ddd…dd…f         Š‰dfŠ‰dk    r$t          j                             ‰‰‰d	¬
¦  «        Šne‰dk    r$t          j                             ‰‰‰d	¬
¦  «        Šn;‰dk    r&t          j                             ‰ ‰‰d	¬
¦  «         Šnt          d¦  «        ‚|dk    r‰dd…ddd…df         S |dk    r‰dd…df         S ‰S )z3Apply 1D pooling to a tensor of size [B x T (x H)].Nc              3   óH   •K  — | ]}‰                      ‰‰‰¬ ¦  «        V — ŒdS ))rª   r‡   N)Úpool_tensor)rœ   r�   rª   r.   r‡   r—   s     €€€€r0   rž   z7FunnelAttentionStructure.pool_tensor.<locals>.<genexpr>   s9   øè è € ÐcÐcÐWX × 0Ò 0°¸dÈ6Ð 0Ñ RÔ RÐcÐcÐcÐcÐcÐcr1   ra   r   rb   rC   r   r©   T)r‡   Ú	ceil_modeÚmaxÚminz0The supported modes are 'mean', 'max' and 'min'.r   )rŸ   r¡   r    r¢   r   rR   r�   r=   rk   r£   r   rS   Ú
avg_pool2dÚ
max_pool2dÚNotImplementedError)r.   r—   rª   r‡   Úsuffixr£   s   ````  r0   r­   z$FunnelAttentionStructure.pool_tensor÷   sì  øøøø€ ð ˆ>Ø�4õ �f�u¥d˜mÑ,Ô,ð 	dØ•4˜‘<”<ÐcÐcÐcÐcÐcÐcÐcÐ\bÐcÑcÔcÑcÔcÐcàŒ;Ô#ð 	?Ø'+¤{Ô'?ÐK�V˜A˜A˜A˜s ˜s˜F”^�^ÀVˆFÝ”Y  q q q¨"¨1¨" u¤¨vÐ6¸AÐ>Ñ>Ô>ˆFàŒ{ˆØ�1Š9ˆ9Ø˜A˜A˜A˜t Q Q Q¨Ð,Ô-ˆFˆFØ�QŠYˆYØ˜A˜A˜A˜t Q Q Q¨¨¨˜MÔ*ˆFà˜!�ˆà�6Š>ˆ>Ý”]×-Ò-¨f°fÀVÐW[Ð-Ñ\Ô\ˆFˆFØ�UŠ]ˆ]Ý”]×-Ò-¨f°fÀVÐW[Ð-Ñ\Ô\ˆFˆFØ�UŠ]ˆ]Ý”m×.Ò.°¨w¸ÀvÐY]Ð.Ñ^Ô^Ð^ˆFˆFå%Ð&XÑYÔYÐYà�1Š9ˆ9Ø˜!˜!˜!˜Q    1˜*Ô%Ð%Ø�QŠYˆYØ˜!˜!˜!˜Q˜$”<ÐØˆr1   Úattention_inputsc                 ó†  — |\  }}}}| j         j        r‡| j         j        dk    r)|                      |dd…         d¦  «        |dd…         z   }|                      |d¦  «        }|                      |d¦  «        }|                      || j         j        ¬¦  «        }nž| xj        dz  c_        | j         j        dk    r|                      |d¦  «        }|                      |ddg¦  «        }|                      |ddg¦  «        }|                      |d¬¦  «        }|                      || j         j        ¬¦  «        }||||f}||fS )zTPool `output` and the proper parts of `attention_inputs` before the attention layer.r^   NrC   r   r   ©rª   r°   )r   Úpool_q_onlyre   r›   r­   Úpooling_typerH   )r.   Úoutputrµ   rV   rW   rI   rX   s          r0   Úpre_attention_poolingz.FunnelAttentionStructure.pre_attention_pooling  se  € ð EUÑAˆ˜¨¸ØŒ;Ô"ð 	MØŒ{Ô)¨\Ò9Ð9Ø"&×"2Ò"2°?À2ÀAÀ2Ô3FÈÑ"JÔ"JÈ_Ð]^Ð]_Ð]_ÔM`Ñ"`�Ø!×-Ò-¨n¸aÑ@Ô@ˆNØ×'Ò'¨°!Ñ4Ô4ˆHØ×%Ò% f°4´;Ô3KÐ%ÑLÔLˆFˆFàÐÔ Ñ"ÐÔØŒ{Ô)¨\Ò9Ð9Ø"&×"2Ò"2°?ÀAÑ"FÔ"F�Ø!×-Ò-¨n¸qÀ!¸fÑEÔEˆNØ×'Ò'¨°1°a°&Ñ9Ô9ˆHØ!×-Ò-¨nÀ5Ð-ÑIÔIˆNØ×%Ò% f°4´;Ô3KÐ%ÑLÔLˆFØ+¨^¸^ÈXÐVÐØÐ'Ð'Ð'r1   c                 óP  — |\  }}}}| j         j        rŒ| xj        dz  c_        | j         j        dk    r)|dd…         |                      |dd…         d¦  «        z   }|                      |d¦  «        }|                      |d¦  «        }|                      |d¬¦  «        }||||f}|S )zFPool the proper parts of `attention_inputs` after the attention layer.rC   r^   Nr   r   r°   r·   )r   r¸   rH   re   r›   r­   )r.   rµ   rV   rW   rI   rX   s         r0   Úpost_attention_poolingz/FunnelAttentionStructure.post_attention_pooling3  sÉ   € àDTÑAˆ˜¨¸ØŒ;Ô"ð 	JØÐÔ Ñ"ÐÔØŒ{Ô)¨\Ò9Ð9Ø"1°"°1°"Ô"5¸×8HÒ8HÈÐYZÐY[ÐY[ÔI\Ð^_Ñ8`Ô8`Ñ"`�Ø!×-Ò-¨n¸aÑ@Ô@ˆNØ×'Ò'¨°!Ñ4Ô4ˆHØ!×-Ò-¨nÀ5Ð-ÑIÔIˆNØ+¨^¸^ÈXÐVÐØÐr1   r8   ©Nr   )r©   rC   )r:   r;   r<   Ú__doc__rD   ÚintÚ__annotations__r   r    r=   r>   r¡   rY   rQ   rO   rP   r    rN   rn   ro   r›   Ústrr­   r»   r½   r?   r@   s   @r0   rB   rB   =   så  ø€ € € € € € ðð ð Ð�sÐÐÑð!˜|ð !°ð !ð !ð !ð !ð !ð !ð /3Ø.2ð	Kð Kà”|ðKð œ tÑ+ðKð œ tÑ+ð	Kð
 
ˆuŒ|Ô	ðKð Kð Kð Kð((°E´Lð (ÀUÄ\ð (ð (ð (ð (ðN(ØðN(Ø#(¤;ðN(Ø8=¼ðN(à	ˆuŒ|Ô	˜t D¨¬Ô$6Ô7Ñ	7ðN(ð N(ð N(ð N(ð` e¤lð Àð ð ð ð ðbð b ¤ð b°cð bÐSVð bÐ_dÔ_kð bð bð bð bð!à”˜u U¤\Ô2Ñ2°T¸%¼,Ô5GÑGð!ð �E˜#”JÑ  c¤Ñ*ð!ð 
Œð	!ð !ð !ð !ðD rsð$ð $Ø”l U¨5¬<Ô%8Ñ8¸4ÀÄÔ;MÑMð$ØUXð$Øknð$à	Œð$ð $ð $ð $ðL(Ø(-¨e¬lÔ(;ð(à	ˆuŒ|˜U 5¤<Ô0Ð0Ô	1ð(ð (ð (ð (ð, °u¸U¼\Ô7Jð  ÈuÐUZÔUaÔObð  ð  ð  ð  ð  ð  ð  ð  r1   rB   Úpositional_attnÚcontext_lenrd   r   c                 óÈ   — | j         \  }}}}t          j        | ||||g¦  «        } | d d …d d …|d …d d …f         } t          j        | |||||z
  g¦  «        } | dd |…f         } | S )N.)r‘   r=   Úreshape)rÃ   rÄ   rd   Ú
batch_sizeÚn_headrM   Úmax_rel_lens          r0   Ú_relative_shift_gatherrÊ   A  sŒ   € Ø/>Ô/DÑ,€J�˜ õ ”m O°jÀ&È+ÐW^Ð5_Ñ`Ô`€OØ% a a a¨¨¨¨E¨F¨F°A°A°A oÔ6€OÝ”m O°jÀ&È'ÐS^ÐafÑSfÐ5gÑhÔh€OØ% c¨<¨K¨<Ð&7Ô8€OØÐr1   c                   ó®   ‡ — e Zd Zdededdfˆ fd„Zdd„Zdd„Z	 dd	ej	        d
ej	        dej	        de
ej	                 dede
ej	        df         fd„Zˆ xZS )ÚFunnelRelMultiheadAttentionr   r…   r   Nc                 ó  •— t          ¦   «                              ¦   «          || _        || _        |j        |j        |j        }}}t          j        |j	        ¦  «        | _	        t          j        |j
        ¦  «        | _
        t          j        |||z  d¬¦  «        | _        t          j        |||z  ¦  «        | _        t          j        |||z  ¦  «        | _        t          j        t!          j        ||g¦  «        ¦  «        | _        t          j        t!          j        ||g¦  «        ¦  «        | _        t          j        t!          j        |||g¦  «        ¦  «        | _        t          j        t!          j        ||g¦  «        ¦  «        | _        t          j        t!          j        d||g¦  «        ¦  «        | _        t          j        ||z  |¦  «        | _        t          j        ||j        ¬¦  «        | _        d|dz  z  | _        d S )NF)ÚbiasrC   r   r_   g      à?)r   r    r   r…   r'   rÈ   Úd_headr   r*   r+   Úattention_dropoutÚLinearÚq_headÚk_headÚv_headÚ	Parameterr=   ÚzerosÚr_w_biasÚr_r_biasÚr_kernelÚr_s_biasÚ	seg_embedÚ	post_projr&   r(   r)   Úscale)r.   r   r…   r'   rÈ   rÏ   r/   s         €r0   r    z$FunnelRelMultiheadAttention.__init__R  s—  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ&ˆÔØ"(¤.°&´-ÀÄ˜�ˆå œj¨Ô)>Ñ?Ô?ˆÔÝ!#¤¨FÔ,DÑ!EÔ!EˆÔå”i ¨°&©¸uÐEÑEÔEˆŒÝ”i ¨°&©Ñ9Ô9ˆŒÝ”i ¨°&©Ñ9Ô9ˆŒåœ¥U¤[°&¸&Ð1AÑ%BÔ%BÑCÔCˆŒÝœ¥U¤[°&¸&Ð1AÑ%BÔ%BÑCÔCˆŒÝœ¥U¤[°'¸6À6Ð1JÑ%KÔ%KÑLÔLˆŒÝœ¥U¤[°&¸&Ð1AÑ%BÔ%BÑCÔCˆŒÝœ¥e¤k°1°f¸fÐ2EÑ&FÔ&FÑGÔGˆŒåœ 6¨F¡?°GÑ<Ô<ˆŒÝœ, w°FÔ4IÐJÑJÔJˆŒØ˜F C™KÑ(ˆŒ
ˆ
ˆ
r1   c                 ó:  — | j         j        dk    r‚|\  }}}}| j        | j        z  }	| j        }
t          j        d||	z   |
¦  «        }||dd…df         z  }||dd…df         z  }t          j        d||¦  «        t          j        d||¦  «        z   }n�|j        d         |k    rdnd}|| j                 |dz
           }| j        | j        z  }| j        }
t          j        d||
¦  «        }t          j        d||z   |¦  «        }t          |||¦  «        }|�||z  }|S )	z5Relative attention score for the positional encodingsr^   zbinh,dnh->bindNzbind,jd->bnijr   rC   ztd,dnh->tnhzbinh,tnh->bnit)
r   re   rØ   rÝ   rÙ   r=   Úeinsumr‘   r…   rÊ   )r.   rV   rÒ   rÄ   rX   r{   r}   r|   r~   ÚuÚw_rÚq_r_attentionÚq_r_attention_1Úq_r_attention_2rÃ   rd   ÚrÚvÚr_heads                      r0   Úrelative_positional_attentionz9FunnelRelMultiheadAttention.relative_positional_attentioni  sQ  € ð Œ;Ô%¨Ò5Ð5ð #2ÑˆC��S˜%à” ¤
Ñ*ˆAà”-ˆCõ "œLÐ)9¸6ÀA¹:ÀsÑKÔKˆMØ+¨c°!°!°!°T°'¬lÑ:ˆOØ+¨b°°°°D°¬kÑ9ˆOõ $œl¨?¸OÈSÑQÔQÕTYÔT`Ø °%ñUô Uñ ˆOˆOð  œ aœ¨KÒ7Ð7�A�A¸QˆEð   Ô 0Ô1°%¸!±)Ô<ˆAà” ¤
Ñ*ˆAà”-ˆCõ ”\ -°°CÑ8Ô8ˆFå#œlÐ+;¸VÀa¹ZÈÑPÔPˆOå4°_ÀkÐSXÑYÔYˆOàÐØ˜xÑ'ˆOØÐr1   c                 ó¨  — |€dS |j         \  }}}| j        | j        z  }t          j        d||z   | j        ¦  «        }|dd…df                              ||j         d         ||g¦  «        }t          j        |dd¬¦  «        \  }	}
t          j        ||
                     |j         ¦  «        |	                     |j         ¦  «        ¦  «        }|�||z  }|S )z/Relative attention score for the token_type_idsNr   zbind,snd->bnisrC   r   ra   rb   )	r‘   rÚ   rÝ   r=   rß   rÛ   rp   ÚsplitÚwhere)r.   rW   rÒ   rX   rÇ   rM   rÄ   rÚ   Útoken_type_biasÚdiff_token_typeÚsame_token_typeÚtoken_type_attns               r0   Úrelative_token_type_attentionz9FunnelRelMultiheadAttention.relative_token_type_attention“  sé   € àÐ!Ø�1Ø+9Ô+?Ñ(ˆ
�G˜[ð ”= 4¤:Ñ-ˆõ  œ,Ð'7¸À(Ñ9JÈDÌNÑ[Ô[ˆà'¨¨¨¨4¨Ô0×7Ò7¸ÀVÄ\ÐRSÄ_ÐV]Ð_jÐ8kÑlÔlˆå+0¬;°ÈÈrÐ+RÑ+RÔ+RÑ(ˆ˜åœ+Ø˜O×2Ò2°>Ô3GÑHÔHÈ/×J`ÒJ`ÐaoÔauÑJvÔJvñ
ô 
ˆð ÐØ˜xÑ'ˆOØÐr1   FÚqueryÚkeyÚvaluerµ   Úoutput_attentions.c                 ó"  — |\  }}}}	|j         \  }
}}|j         d         }| j        j        | j        j        }}|                      |¦  «                             |
|||¦  «        }|                      |¦  «                             |
|||¦  «        }|                      |¦  «                             |
|||¦  «        }|| j        z  }| j	        | j        z  }t          j        d||z   |¦  «        }|                      ||||	¦  «        }|                      |||	¦  «        }||z   |z   }|j        }|                     ¦   «         }|�-|t           d|d d …d d f                              ¦   «         z
  z  z
  }t          j        |d|¬¦  «        }|                      |¦  «        }t          j        d||¦  «        }|                      |                     |
|||z  ¦  «        ¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|r||fn|fS )Nr   zbind,bjnd->bnijra   )rc   rO   zbnij,bjnd->bind)r‘   r   rÈ   rÏ   rÒ   ÚviewrÓ   rÔ   rÝ   r×   r=   rß   rè   rð   rO   ÚfloatÚINFÚsoftmaxrÐ   rÜ   rÆ   r+   r)   )r.   rñ   rò   ró   rµ   rô   rV   rW   rI   rX   rÇ   rM   Ú_rÄ   rÈ   rÏ   rÒ   rÓ   rÔ   r×   Úcontent_scorerÃ   rï   Ú
attn_scorerO   Ú	attn_probÚattn_vecÚattn_outrº   s                                r0   r7   z#FunnelRelMultiheadAttention.forward«  s!  € ð EUÑAˆ˜¨¸à!&¤Ñˆ
�G˜QØ”i ”lˆØœÔ+¨T¬[Ô-?�ˆð —’˜UÑ#Ô#×(Ò(¨°W¸fÀfÑMÔMˆà—’˜SÑ!Ô!×&Ò& z°;ÀÈÑOÔOˆØ—’˜UÑ#Ô#×(Ò(¨°[À&È&ÑQÔQˆà˜$œ*Ñ$ˆà”= 4¤:Ñ-ˆåœÐ%6¸ÀÑ8IÈ6ÑRÔRˆØ×<Ò<¸_ÈfÐVaÐckÑlÔlˆØ×<Ò<¸^ÈVÐU]Ñ^Ô^ˆð # _Ñ4°ÑFˆ
ð Ô ˆØ×%Ò%Ñ'Ô'ˆ
àÐ%Ø#¥c¨Q°ÀÀÀÀ4ÈÀÔ1N×1TÒ1TÑ1VÔ1VÑ-VÑ&WÑWˆJå”M *°"¸EÐBÑBÔBˆ	Ø×*Ò*¨9Ñ5Ô5ˆ	õ ”<Ð 1°9¸fÑEÔEˆð —>’> (×"2Ò"2°:¸wÈÐQWÉÑ"XÔ"XÑYÔYˆØ×&Ò& xÑ0Ô0ˆà—’ ¨Ñ!1Ñ2Ô2ˆØ&7ÐF�˜	Ð"Ð"¸f¸YÐFr1   r5   ©F)r:   r;   r<   r   rÀ   r    rè   rð   r=   r>   r¡   Úboolr7   r?   r@   s   @r0   rÌ   rÌ   Q  sû   ø€ € € € € ð)˜|ð )¸#ð )À$ð )ð )ð )ð )ð )ð )ð.(ð (ð (ð (ðTð ð ð ð< #(ð3Gð 3GàŒ|ð3Gð Œ\ð3Gð Œ|ð	3Gð
   ¤Ô-ð3Gð  ð3Gð 
ˆuŒ|˜SÐ Ô	!ð3Gð 3Gð 3Gð 3Gð 3Gð 3Gð 3Gð 3Gr1   rÌ   c                   óL   ‡ — e Zd Zdeddfˆ fd„Zdej        dej        fd„Zˆ xZS )ÚFunnelPositionwiseFFNr   r   Nc                 óÆ  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j                 | _	        t          j
        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        t          j
        |j        ¦  «        | _        t          j        |j        |j        ¦  «        | _        d S r5   )r   r    r   rÑ   r'   Úd_innerÚlinear_1r
   Ú
hidden_actÚactivation_functionr*   Úactivation_dropoutÚlinear_2r+   r,   r&   r(   r)   r-   s     €r0   r    zFunnelPositionwiseFFN.__init__â  sœ   ø€ Ý‰Œ×ÒÑÔÐÝœ	 &¤.°&´.ÑAÔAˆŒÝ#)¨&Ô*;Ô#<ˆÔ Ý"$¤*¨VÔ-FÑ"GÔ"GˆÔÝœ	 &¤.°&´.ÑAÔAˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝœ, v¤~°vÔ7LÑMÔMˆŒˆˆr1   Úhiddenc                 ó  — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        S r5   )r  r  r	  r
  r,   r)   )r.   r  Úhs      r0   r7   zFunnelPositionwiseFFN.forwardë  so   € Ø�MŠM˜&Ñ!Ô!ˆØ×$Ò$ QÑ'Ô'ˆØ×#Ò# AÑ&Ô&ˆØ�MŠM˜!ÑÔˆØ�LŠL˜‰OŒOˆØ�Š˜v¨™zÑ*Ô*Ð*r1   r9   r@   s   @r0   r  r  á  sy   ø€ € € € € ðN˜|ð N°ð Nð Nð Nð Nð Nð Nð+˜eœlð +¨u¬|ð +ð +ð +ð +ð +ð +ð +ð +r1   r  c                   ój   ‡ — e Zd Zdededdfˆ fd„Z	 ddej        dej        d	ej        d
ede	f
d„Z
ˆ xZS )ÚFunnelLayerr   r…   r   Nc                 óš   •— t          ¦   «                              ¦   «          t          ||¦  «        | _        t	          |¦  «        | _        d S r5   )r   r    rÌ   Ú	attentionr  Úffn)r.   r   r…   r/   s      €r0   r    zFunnelLayer.__init__õ  s=   ø€ Ý‰Œ×ÒÑÔÐÝ4°V¸[ÑIÔIˆŒÝ(¨Ñ0Ô0ˆŒˆˆr1   Frñ   rò   ró   rô   c                 óŠ   — |                       |||||¬¦  «        }|                      |d         ¦  «        }|r
||d         fn|fS )N©rô   r   r   )r  r  )r.   rñ   rò   ró   rµ   rô   Úattnrº   s           r0   r7   zFunnelLayer.forwardú  sQ   € ð �~Š~˜e S¨%Ð1AÐUfˆ~ÑgÔgˆØ—’˜$˜qœ'Ñ"Ô"ˆØ$5ÐD�˜˜QœÐ Ð ¸F¸9ÐDr1   r   )r:   r;   r<   r   rÀ   r    r=   r>   r  r¡   r7   r?   r@   s   @r0   r  r  ô  s´   ø€ € € € € ð1˜|ð 1¸#ð 1À$ð 1ð 1ð 1ð 1ð 1ð 1ð #(ð
Eð 
EàŒ|ð
Eð Œ\ð
Eð Œ|ð	
Eð  ð
Eð 
ð
Eð 
Eð 
Eð 
Eð 
Eð 
Eð 
Eð 
Er1   r  c                   óˆ   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 	 	 ddej        dej        dz  d	ej        dz  d
edededee	z  fd„Z
ˆ xZS )ÚFunnelEncoderr   r   Nc                 óî   •‡— t          ¦   «                              ¦   «          ‰| _        t          ‰¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _	        d S )Nc                 ót   •‡— g | ]3\  Š}t          j        ˆˆfd „t          |¦  «        D ¦   «         ¦  «        ‘Œ4S )c                 ó0   •— g | ]}t          ‰‰¦  «        ‘ŒS © ©r  )rœ   rú   r…   r   s     €€r0   ú
<listcomp>z5FunnelEncoder.__init__.<locals>.<listcomp>.<listcomp>  s#   ø€ Ð[Ð[Ð[ÀA�{¨6°;Ñ?Ô?Ð[Ð[Ð[r1   )r   Ú
ModuleListrl   )rœ   Ú
block_sizer…   r   s     @€r0   r  z*FunnelEncoder.__init__.<locals>.<listcomp>  sX   øø€ ð ð ð á+�K õ ”Ð[Ð[Ð[Ð[Ð[ÍÈzÑIZÔIZÐ[Ñ[Ô[Ñ\Ô\ðð ð r1   )
r   r    r   rB   Úattention_structurer   r  Ú	enumerateÚblock_sizesÚblocksr-   s    `€r0   r    zFunnelEncoder.__init__  sy   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ#;¸FÑ#CÔ#CˆÔ Ý”mðð ð ð å/8¸Ô9KÑ/LÔ/Lðñ ô ñ
ô 
ˆŒˆˆr1   FTr3   rI   rJ   rô   Úoutput_hidden_statesÚreturn_dictc           
      ó  — |                      |¦  «        }| j                             |||¬¦  «        }|}|r|fnd }	|rdnd }
t          | j        ¦  «        D �]\  }}|                     d¦  «        | j        j        rdndk    }|o|dk    }|r| j                             ||¦  «        \  }}t          |¦  «        D ]�\  }}t          | j        j
        |         ¦  «        D ]x}|dk    o|dk    o|}|r|}| j        j        r|n|x}}n|x}x}} ||||||¬¦  «        }|d         }|r| j                             |¦  «        }|r|
|dd …         z   }
|r|	|fz   }	ŒyŒž�Œ|st          d„ ||	|
fD ¦   «         ¦  «        S t          ||	|
¬¦  «        S )	N©rI   rJ   r  r   rC   r   r  c              3   ó   K  — | ]}|®|V — Œ	d S r5   r  ©rœ   ræ   s     r0   rž   z(FunnelEncoder.forward.<locals>.<genexpr>B  ó(   è è € ÐaÐa˜qÐSTÐS`˜ÐS`ÐS`ÐS`ÐS`ÐaÐar1   ©Úlast_hidden_stateÚhidden_statesÚ
attentions)Útype_asr   rY   r!  r#  rL   r   rR   r»   rl   Úblock_repeatsr¸   r½   r¡   r   )r.   r3   rI   rJ   rô   r$  r%  rµ   r  Úall_hidden_statesÚall_attentionsr…   ÚblockÚpooling_flagÚpooled_hiddenÚlayer_indexÚlayerÚrepeat_indexÚ
do_poolingrñ   rò   ró   Úlayer_outputs                          r0   r7   zFunnelEncoder.forward  sC  € ð (×/Ò/°Ñ>Ô>ˆØÔ3×IÒIØØ)Ø)ð Jñ 
ô 
Ðð
 ˆà0DÐN˜]Ð,Ð,È$ÐØ0Ð:˜˜°dˆå"+¨D¬KÑ"8Ô"8ð 	Jñ 	JÑˆK˜Ø!Ÿ;š; q™>œ>°$´+Ô2JÐ-Q¨Q¨QÐPQÒRˆLØ'Ð;¨K¸!ªOˆLØð Ø26Ô2J×2`Ò2`ØÐ,ñ3ô 3Ñ/�Ð/õ '0°Ñ&6Ô&6ð Jð JÑ"�˜UÝ$)¨$¬+Ô*CÀKÔ*PÑ$QÔ$Qð Jð J�LØ".°!Ò"3Ð!\¸+ÈÒ:JÐ!\ÐP\�JØ!ð 5Ø -˜Ø04´Ô0GÐ&Z f fÈ]ÐZ˜˜e˜eà.4Ð4˜Ð4  eØ#( 5¨°°UÐ<LÐ`qÐ#rÑ#rÔ#r�LØ)¨!œ_�FØ!ð mØ+/Ô+C×+ZÒ+ZÐ[kÑ+lÔ+lÐ(à(ð KØ)7¸,ÀqÀrÀrÔ:JÑ)J˜Ø+ð JØ,=ÀÀ	Ñ,IÐ)øðJñJð$ ð 	bÝÐaÐa VÐ->ÀÐ$OÐaÑaÔaÑaÔaÐaÝ°ÐGXÐesÐtÑtÔtÐtr1   ©NNFFT©r:   r;   r<   r   r    r=   r>   r  r¡   r   r7   r?   r@   s   @r0   r  r    sÞ   ø€ € € € € ð	
˜|ð 	
°ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð /3Ø.2Ø"'Ø%*Ø ð0uð 0uà”|ð0uð œ tÑ+ð0uð œ tÑ+ð	0uð
  ð0uð #ð0uð ð0uð 
�Ñ	 ð0uð 0uð 0uð 0uð 0uð 0uð 0uð 0ur1   r  TFr�   r‡   Ú
target_lenrR   r�   c           	      óJ  — |dk    r| S |r| dd…dd…f         }| dd…dd…f         } t          j        | |d¬¦  «        }|rU|r)t          j                             |ddd|dz
  ddf¦  «        }|dd…d|dz
  …f         }t          j        ||gd¬¦  «        }n|dd…d|…f         }|S )z{
    Upsample tensor `x` to match `target_len` by repeating the tokens `stride` time on the sequence length dimension.
    r   N)Úrepeatsrc   r   rb   )r=   Úrepeat_interleaver   rS   rT   rk   )r�   r‡   r=  rR   r�   Úclsrº   s          r0   ÚupsamplerB  F  sæ   € ð �‚{€{ØˆØð Ø����2�A�2�ŒhˆØˆaˆaˆa���ˆeŒHˆÝÔ$ Q°¸AÐ>Ñ>Ô>€FØð (Øð 	LÝ”]×&Ò& v°°1°a¸À!¹ÀQÈÐ/JÑKÔKˆFØ˜˜˜Ð+˜Z¨!™^Ð+Ð+Ô,ˆÝ”˜C ˜=¨aÐ0Ñ0Ô0ˆˆà˜˜˜˜;˜J˜;˜Ô'ˆØ€Mr1   c                   ó–   ‡ — e Zd Zdeddfˆ fd„Z	 	 	 	 	 ddej        dej        d	ej        dz  d
ej        dz  dedededee	z  fd„Z
ˆ xZS )ÚFunnelDecoderr   r   Nc                 óî   •‡— t          ¦   «                              ¦   «          ‰| _        t          ‰¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _	        d S )Nc                 ó0   •— g | ]}t          ‰d ¦  «        ‘ŒS )r   r  )rœ   rú   r   s     €r0   r  z*FunnelDecoder.__init__.<locals>.<listcomp>a  s#   ø€ Ð$fÐ$fÐ$fÀ¥[°¸Ñ%;Ô%;Ð$fÐ$fÐ$fr1   )
r   r    r   rB   r   r   r  rl   Únum_decoder_layersÚlayersr-   s    `€r0   r    zFunnelDecoder.__init__]  sf   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ#;¸FÑ#CÔ#CˆÔ Ý”mÐ$fÐ$fÐ$fÐ$fÅUÈ6ÔKdÑEeÔEeÐ$fÑ$fÔ$fÑgÔgˆŒˆˆr1   FTÚfinal_hiddenÚfirst_block_hiddenrI   rJ   rô   r$  r%  c                 óÒ  — t          |dt          | j        j        ¦  «        dz
  z  |j        d         | j        j        | j        j        ¬¦  «        }||z   }	|r|	fnd }
|rdnd }| j                             |	||¬¦  «        }| j	        D ]1} ||	|	|	||¬¦  «        }|d         }	|r||dd …         z   }|r|
|	fz   }
Œ2|st          d„ |	|
|fD ¦   «         ¦  «        S t          |	|
|¬	¦  «        S )
NrC   r   )r‡   r=  rR   r�   r  r'  r  r   c              3   ó   K  — | ]}|®|V — Œ	d S r5   r  r)  s     r0   rž   z(FunnelDecoder.forward.<locals>.<genexpr>‰  r*  r1   r+  )rB  Úlenr   r"  r‘   rR   r�   r   rY   rH  r¡   r   )r.   rI  rJ  rI   rJ   rô   r$  r%  Úupsampled_hiddenr  r1  r2  rµ   r7  r:  s                  r0   r7   zFunnelDecoder.forwardc  sW  € õ $ØØ�˜Tœ[Ô4Ñ5Ô5¸Ñ9Ñ:Ø)Ô/°Ô2ØœÔ1ØœÔ1ð
ñ 
ô 
Ðð "Ð$6Ñ6ˆØ)=ÐG˜V˜I˜IÀ4ÐØ0Ð:˜˜°dˆàÔ3×IÒIØØ)Ø)ð Jñ 
ô 
Ðð ”[ð 	Bð 	BˆEØ ˜5 ¨°Ð9IÐ]nÐoÑoÔoˆLØ! !”_ˆFà ð CØ!/°,¸q¸r¸rÔ2BÑ!B�Ø#ð BØ$5¸¸	Ñ$AÐ!øàð 	bÝÐaÐa VÐ->ÀÐ$OÐaÑaÔaÑaÔaÐaÝ°ÐGXÐesÐtÑtÔtÐtr1   r;  r<  r@   s   @r0   rD  rD  \  só   ø€ € € € € ðh˜|ð h°ð hð hð hð hð hð hð /3Ø.2Ø"'Ø%*Ø ð'uð 'uà”lð'uð "œLð'uð œ tÑ+ð	'uð
 œ tÑ+ð'uð  ð'uð #ð'uð ð'uð 
�Ñ	 ð'uð 'uð 'uð 'uð 'uð 'uð 'uð 'ur1   rD  c                   óP   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚFunnelDiscriminatorPredictionszEPrediction module for the discriminator, made up of two dense layers.r   r   Nc                 óÜ   •— t          ¦   «                              ¦   «          || _        t          j        |j        |j        ¦  «        | _        t          j        |j        d¦  «        | _        d S r¾   )r   r    r   r   rÑ   r'   ÚdenseÚdense_predictionr-   s     €r0   r    z'FunnelDiscriminatorPredictions.__init__�  sS   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”Y˜vœ~¨v¬~Ñ>Ô>ˆŒ
Ý "¤	¨&¬.¸!Ñ <Ô <ˆÔÐÐr1   Údiscriminator_hidden_statesc                 ó¾   — |                       |¦  «        }t          | j        j                 |¦  «        }|                      |¦  «                             d¦  «        }|S )Nra   )rR  r
   r   r  rS  Úsqueeze)r.   rT  r-  Úlogitss       r0   r7   z&FunnelDiscriminatorPredictions.forward–  sQ   € ØŸ
š
Ð#>Ñ?Ô?ˆÝ˜tœ{Ô5Ô6°}ÑEÔEˆØ×&Ò& }Ñ5Ô5×=Ò=¸bÑAÔAˆØˆr1   )
r:   r;   r<   r¿   r   r    r=   r>   r7   r?   r@   s   @r0   rP  rP  �  sw   ø€ € € € € ØOÐOð=˜|ð =°ð =ð =ð =ð =ð =ð =ð°5´<ð ÀEÄLð ð ð ð ð ð ð ð r1   rP  c                   óX   ‡ — e Zd ZU eed<   dZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZ	S )ÚFunnelPreTrainedModelr   Úfunnelc                 óf  •— t          ¦   «                              |¦  «         |j        j        }|                     d¦  «        dk    rªt          |dd ¦  «        �j| j        j        €7|j        j	        \  }}t          j        dt          ||z   ¦  «        z  ¦  «        }n| j        j        }t          j        |j        |¬¦  «         t          |dd ¦  «        �t          j        |j        d¦  «         d S d S |dk    r»t          j        |j        | j        j        ¬	¦  «         t          j        |j        | j        j        ¬	¦  «         t          j        |j        | j        j        ¬	¦  «         t          j        |j        | j        j        ¬	¦  «         t          j        |j        | j        j        ¬	¦  «         d S |d
k    rv| j        j        €dn| j        j        }t          j        |j        j        |¬¦  «         |j        j        �2t          j        |j        j        |j        j                 ¦  «         d S d S d S )NrÑ   ra   Úweightr_   )ÚstdrÎ   g        rÌ   )Úbr   )r   Ú_init_weightsr/   r:   ÚfindÚgetattrr   Úinitializer_stdr\  r‘   ÚnpÚsqrtr÷   ÚinitÚnormal_Ú	constant_rÎ   Úuniform_r×   Úinitializer_rangerØ   rÙ   rÚ   rÛ   r%   r   Úzeros_)r.   ÚmoduleÚ	classnameÚfan_outÚfan_inr]  r/   s         €r0   r_  z#FunnelPreTrainedModel._init_weights¢  s  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%ØÔ$Ô-ˆ	Ø�>Š>˜(Ñ#Ô# rÒ)Ð)Ý�v˜x¨Ñ.Ô.Ð:Ø”;Ô.Ð6Ø&,¤mÔ&9‘O�G˜VÝœ' #­¨f°wÑ.>Ñ(?Ô(?Ñ"?Ñ@Ô@�C�Càœ+Ô5�CÝ”˜Vœ]°Ð4Ñ4Ô4Ð4Ý�v˜v tÑ,Ô,Ð8Ý”˜vœ{¨CÑ0Ô0Ð0Ð0Ð0ð 9Ð8àÐ7Ò7Ð7ÝŒM˜&œ/¨T¬[Ô-JÐKÑKÔKÐKÝŒM˜&œ/¨T¬[Ô-JÐKÑKÔKÐKÝŒM˜&œ/¨T¬[Ô-JÐKÑKÔKÐKÝŒM˜&œ/¨T¬[Ô-JÐKÑKÔKÐKÝŒM˜&Ô*¨d¬kÔ.KÐLÑLÔLÐLÐLÐLØÐ,Ò,Ð,ØœÔ4Ð<�#�#À$Ä+ÔB]ˆCÝŒL˜Ô/Ô6¸CÐ@Ñ@Ô@Ð@ØÔ%Ô1Ð=Ý”˜FÔ2Ô9¸&Ô:PÔ:\Ô]Ñ^Ô^Ð^Ð^Ð^ð	 -Ð,ð >Ð=r1   )
r:   r;   r<   r   rÁ   Úbase_model_prefixr=   Úno_gradr_  r?   r@   s   @r0   rY  rY  �  sg   ø€ € € € € € àÐÐÑØ Ðà€U„]�_„_ð_ð _ð _ð _ñ „_ð_ð _ð _ð _ð _r1   rY  c                   óP   ‡ — e Zd Zdededdfˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚFunnelClassificationHeadr   Ún_labelsr   Nc                 ó
  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        t          j        |j        |¦  «        | _	        d S r5   )
r   r    r   rÑ   r'   Úlinear_hiddenr*   r+   r,   Ú
linear_out)r.   r   rs  r/   s      €r0   r    z!FunnelClassificationHead.__init__¾  s^   ø€ Ý‰Œ×ÒÑÔÐÝœY v¤~°v´~ÑFÔFˆÔÝ”z &Ô"7Ñ8Ô8ˆŒÝœ) F¤N°HÑ=Ô=ˆŒˆˆr1   r  c                 ó¨   — |                       |¦  «        }t          j        |¦  «        }|                      |¦  «        }|                      |¦  «        S r5   )ru  r=   Útanhr,   rv  )r.   r  s     r0   r7   z FunnelClassificationHead.forwardÄ  sG   € Ø×#Ò# FÑ+Ô+ˆÝ”˜FÑ#Ô#ˆØ—’˜fÑ%Ô%ˆØ�Š˜vÑ&Ô&Ð&r1   )
r:   r;   r<   r   rÀ   r    r=   r>   r7   r?   r@   s   @r0   rr  rr  ½  sx   ø€ € € € € ð>˜|ð >°sð >¸tð >ð >ð >ð >ð >ð >ð'˜eœlð '¨u¬|ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r1   rr  z2
    Output type of [`FunnelForPreTraining`].
    )Ú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
ej                 dz  ed<   dZe
ej                 dz  ed<   dS )ÚFunnelForPreTrainingOutputa1  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss of the ELECTRA-style objective.
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
        Prediction scores of the head (scores for each token before SoftMax).
    NÚlossrW  r-  r.  )r:   r;   r<   r¿   r|  r=   ÚFloatTensorrÁ   rW  r-  r¡   r.  r  r1   r0   r{  r{  Ë  sˆ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r1   r{  z¨
    The base Funnel Transformer Model transformer outputting raw hidden-states without upsampling head (also called
    decoder) or any task-specific head on top.
    c                   ó  ‡ — e Zd Zdeddfˆ fd„Zdej        fd„Zdej        dd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dz  deez  fd„¦   «         Zˆ xZS )ÚFunnelBaseModelr   r   Nc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r5   )r   r    r   r6   r  ÚencoderÚ	post_initr-   s     €r0   r    zFunnelBaseModel.__init__æ  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å*¨6Ñ2Ô2ˆŒÝ$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐr1   c                 ó   — | j         j        S r5   ©r6   r%   ©r.   s    r0   Úget_input_embeddingsz$FunnelBaseModel.get_input_embeddingsï  ó   € ØŒÔ.Ð.r1   Únew_embeddingsc                 ó   — || j         _        d S r5   r„  ©r.   rˆ  s     r0   Úset_input_embeddingsz$FunnelBaseModel.set_input_embeddingsò  ó   € Ø*8ˆŒÔ'Ð'Ð'r1   r2   rI   rJ   Úposition_idsr3   rô   r$  r%  c	                 ó<  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�|�t	          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }
n.|�|                     ¦   «         d d…         }
nt	          d¦  «        ‚|�|j        n|j        }|€t          j	        |
|¬¦  «        }|€!t          j
        |
t          j        |¬¦  «        }|                      ||¬¦  «        }|                      ||||||¬¦  «        }|S )NúDYou cannot specify both input_ids and inputs_embeds at the same timera   ú5You have to specify either input_ids or inputs_embeds©rP   r`   ©r3   ©rI   rJ   rô   r$  r%  )r   rô   r$  r%  Ú
ValueErrorÚ%warn_if_padding_and_no_attention_maskrL   rP   r=   ÚonesrÖ   r’   r6   r�  )r.   r2   rI   rJ   r�  r3   rô   r$  r%  ÚkwargsÚinput_shaperP   Úencoder_outputss                r0   r7   zFunnelBaseModel.forwardõ  sV  € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà%.Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý"œZ¨¸FÐCÑCÔCˆNØÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàŸš¨	À˜ÑOÔOˆàŸ,š,ØØ)Ø)Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð Ðr1   ©NNNNNNNN©r:   r;   r<   r   r    r   r!   r†  r‹  r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   r  r  ß  sW  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð/ b¤lð /ð /ð /ð /ð9°2´<ð 9ÀDð 9ð 9ð 9ð 9ð ð *.Ø.2Ø.2Ø,0Ø-1Ø)-Ø,0Ø#'ð.ð .à”< $Ñ&ð.ð œ tÑ+ð.ð œ tÑ+ð	.ð
 ”l TÑ)ð.ð ”| dÑ*ð.ð   $™;ð.ð # T™kð.ð ˜D‘[ð.ð 
�Ñ	 ð.ð .ð .ñ „^ð.ð .ð .ð .ð .r1   r  c                   óø   ‡ — e Zd Zdeddfˆ fd„Zdej        fd„Zdej        dd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dz  dedz  dedz  deez  fd„¦   «         Zˆ xZS )ÚFunnelModelr   r   Nc                 óø   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        |  	                    ¦   «          d S r5   )
r   r    r   r   r6   r  r�  rD  Údecoderr‚  r-   s     €r0   r    zFunnelModel.__init__)  sg   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ*¨6Ñ2Ô2ˆŒÝ$ VÑ,Ô,ˆŒÝ$ VÑ,Ô,ˆŒð 	�ŠÑÔÐÐÐr1   c                 ó   — | j         j        S r5   r„  r…  s    r0   r†  z FunnelModel.get_input_embeddings3  r‡  r1   rˆ  c                 ó   — || j         _        d S r5   r„  rŠ  s     r0   r‹  z FunnelModel.set_input_embeddings6  rŒ  r1   r2   rI   rJ   r3   rô   r$  r%  c           	      ó¶  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|�|�t	          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }	n.|�|                     ¦   «         d d…         }	nt	          d¦  «        ‚|�|j        n|j        }
|€t          j	        |	|
¬¦  «        }|€!t          j
        |	t          j        |
¬¦  «        }|                      ||¬¦  «        }|                      ||||d|¬¦  «        }|                      |d	         |d
         | j         j        d	                  |||||¬¦  «        }|sEd	}|d	         f}|r|d
z  }||d
         ||         z   fz   }|r|d
z  }||d         ||         z   fz   }|S t!          |d	         |r|j        |j        z   nd |r|j        |j        z   nd ¬¦  «        S )Nr�  ra   r�  r‘  r`   r’  Tr“  r   r   )rI  rJ  rI   rJ   rô   r$  r%  rC   r+  )r   rô   r$  r%  r”  r•  rL   rP   r=   r–  rÖ   r’   r6   r�  rŸ  r"  r   r-  r.  )r.   r2   rI   rJ   r3   rô   r$  r%  r—  r˜  rP   r™  Údecoder_outputsÚidxÚoutputss                  r0   r7   zFunnelModel.forward9  sf  € ð 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐ  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà%.Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý"œZ¨¸FÐCÑCÔCˆNØÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàŸš¨	À˜ÑOÔOˆàŸ,š,ØØ)Ø)Ø/Ø!%Ø#ð 'ñ 
ô 
ˆð Ÿ,š,Ø(¨Ô+Ø.¨qÔ1°$´+Ô2IÈ!Ô2LÔMØ)Ø)Ø/Ø!5Ø#ð 'ñ 
ô 
ˆð ð 		ØˆCØ& qÔ)Ð+ˆGØ#ð QØ�q‘�Ø! _°QÔ%7¸/È#Ô:NÑ%NÐ$PÑP�Ø ð QØ�q‘�Ø! _°QÔ%7¸/È#Ô:NÑ%NÐ$PÑP�ØˆNåØ-¨aÔ0à#ð˜?Ô8¸?Ô;XÑXÐXàØTeÐo˜Ô2°_Ô5OÑOÐOÐkoð
ñ 
ô 
ð 	
r1   )NNNNNNNr›  r@   s   @r0   r�  r�  '  sT  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð/ b¤lð /ð /ð /ð /ð9°2´<ð 9ÀDð 9ð 9ð 9ð 9ð ð *.Ø.2Ø.2Ø-1Ø)-Ø,0Ø#'ðH
ð H
à”< $Ñ&ðH
ð œ tÑ+ðH
ð œ tÑ+ð	H
ð
 ”| dÑ*ðH
ð   $™;ðH
ð # T™kðH
ð ˜D‘[ðH
ð 
�Ñ	 ðH
ð H
ð H
ñ „^ðH
ð H
ð H
ð H
ð H
r1   r�  zŒ
    Funnel Transformer model with a binary classification head on top as used during pretraining for identifying
    generated tokens.
    c                   óÞ   ‡ — e Zd Zdeddfˆ 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dz  de	e
z  fd„¦   «         Zˆ xZS )ÚFunnelForPreTrainingr   r   Nc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r5   )r   r    r�  rZ  rP  Údiscriminator_predictionsr‚  r-   s     €r0   r    zFunnelForPreTraining.__init__Œ  sP   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &Ñ)Ô)ˆŒÝ)GÈÑ)OÔ)OˆÔ&à�ŠÑÔÐÐÐr1   r2   rI   rJ   r3   Úlabelsrô   r$  r%  c	           	      ó”  — |�|n| j         j        }|                      |||||||¬¦  «        }
|
d         }|                      |¦  «        }d}|�Åt	          j        ¦   «         }|�s|                     d|j        d         ¦  «        dk    }|                     d|j        d         ¦  «        |         }||         } |||                     ¦   «         ¦  «        }n= ||                     d|j        d         ¦  «        |                     ¦   «         ¦  «        }|s|f|
dd…         z   }|�|f|z   n|S t          |||
j
        |
j        ¬¦  «        S )a"  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the ELECTRA-style loss. Input should be a sequence of tokens (see `input_ids`
            docstring) Indices should be in `[0, 1]`:

            - 0 indicates the token is an original token,
            - 1 indicates the token was replaced.

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("funnel-transformer/small")
        >>> model = FunnelForPreTraining.from_pretrained("funnel-transformer/small")

        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> logits = model(**inputs).logits
        ```N©rI   rJ   r3   rô   r$  r%  r   ra   r   ©r|  rW  r-  r.  )r   r%  rZ  r©  r   r   rö   r‘   r÷   r{  r-  r.  )r.   r2   rI   rJ   r3   rª  rô   r$  r%  r—  rT  Údiscriminator_sequence_outputrW  r|  Úloss_fctÚactive_lossÚactive_logitsÚactive_labelsrº   s                      r0   r7   zFunnelForPreTraining.forward”  s�  € ðB &1Ð%<�k�kÀ$Ä+ÔBYˆà&*§k¢kØØ)Ø)Ø'Ø/Ø!5Ø#ð '2ñ '
ô '
Ð#ð )DÀAÔ(FÐ%à×/Ò/Ð0MÑNÔNˆàˆØÐÝÔ+Ñ-Ô-ˆHØÐ)Ø,×1Ò1°"Ð6SÔ6YÐZ[Ô6\Ñ]Ô]ÐabÒb�Ø &§¢¨BÐ0MÔ0SÐTUÔ0VÑ WÔ WÐXcÔ d�Ø & {Ô 3�Ø�x ¨}×/BÒ/BÑ/DÔ/DÑEÔE��à�x §¢¨BÐ0MÔ0SÐTUÔ0VÑ WÔ WÐY_×YeÒYeÑYgÔYgÑhÔh�àð 	FØ�YÐ!<¸Q¸R¸RÔ!@Ñ@ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå)ØØØ5ÔCØ2Ô=ð	
ñ 
ô 
ð 	
r1   rš  )r:   r;   r<   r   r    r   r=   r>   r  r¡   r{  r7   r?   r@   s   @r0   r§  r§  …  s)  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð ð *.Ø.2Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ðC
ð C
à”< $Ñ&ðC
ð œ tÑ+ðC
ð œ tÑ+ð	C
ð
 ”| dÑ*ðC
ð ”˜tÑ#ðC
ð   $™;ðC
ð # T™kðC
ð ˜D‘[ðC
ð 
Ð+Ñ	+ðC
ð C
ð C
ñ „^ðC
ð C
ð C
ð C
ð C
r1   r§  c                   ó  ‡ — e Zd ZddiZdeddfˆ fd„Zdej        fd„Zdej	        dd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dz  deez  fd„¦   «         Zˆ xZS )ÚFunnelForMaskedLMzlm_head.weightz(funnel.embeddings.word_embeddings.weightr   r   Nc                 óâ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r5   )
r   r    r�  rZ  r   rÑ   r'   r"   Úlm_headr‚  r-   s     €r0   r    zFunnelForMaskedLM.__init__ß  sZ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å! &Ñ)Ô)ˆŒÝ”y ¤°Ô1BÑCÔCˆŒð 	�ŠÑÔÐÐÐr1   c                 ó   — | j         S r5   ©r¶  r…  s    r0   Úget_output_embeddingsz'FunnelForMaskedLM.get_output_embeddingsè  s
   € ØŒ|Ðr1   rˆ  c                 ó   — || _         d S r5   r¸  rŠ  s     r0   Úset_output_embeddingsz'FunnelForMaskedLM.set_output_embeddingsë  s   € Ø%ˆŒˆˆr1   r2   rI   rJ   r3   rª  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        |
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]`
        Nr¬  r   ra   r   r­  )
r   r%  rZ  r¶  r   rö   r"   r   r-  r.  )r.   r2   rI   rJ   r3   rª  rô   r$  r%  r—  r¥  r,  Úprediction_logitsÚmasked_lm_lossr¯  rº   s                   r0   r7   zFunnelForMaskedLM.forwardî  s  € ð& &1Ð%<�k�kÀ$Ä+ÔBYˆà—+’+ØØ)Ø)Ø'Ø/Ø!5Ø#ð ñ 
ô 
ˆð $ AœJÐØ ŸLšLÐ):Ñ;Ô;ÐàˆØÐÝ'Ñ)Ô)ˆ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åØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r1   rš  )r:   r;   r<   Ú_tied_weights_keysr   r    r   rÑ   r¹  r!   r»  r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   r´  r´  Û  sc  ø€ € € € € à*Ð,VÐWÐð˜|ð °ð ð ð ð ð ð ð r¤yð ð ð ð ð&°B´Lð &ÀTð &ð &ð &ð &ð ð *.Ø.2Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ð/
ð /
à”< $Ñ&ð/
ð œ tÑ+ð/
ð œ tÑ+ð	/
ð
 ”| dÑ*ð/
ð ”˜tÑ#ð/
ð   $™;ð/
ð # T™kð/
ð ˜D‘[ð/
ð 
�Ñ	ð/
ð /
ð /
ñ „^ð/
ð /
ð /
ð /
ð /
r1   r´  zº
    Funnel Transformer Model with a sequence classification/regression head on top (two linear layer on top of the
    first timestep of the last hidden state) e.g. for GLUE tasks.
    c                   óÞ   ‡ — e Zd Zdeddfˆ 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dz  de	e
z  fd„¦   «         Zˆ xZS )ÚFunnelForSequenceClassificationr   r   Nc                 óô   •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        t          ||j        ¦  «        | _        |                      ¦   «          d S r5   )	r   r    Ú
num_labelsr   r  rZ  rr  Ú
classifierr‚  r-   s     €r0   r    z(FunnelForSequenceClassification.__init__(  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒå% fÑ-Ô-ˆŒÝ2°6¸6Ô;LÑMÔMˆŒà�ŠÑÔÐÐÐr1   r2   rI   rJ   r3   rª  rô   r$  r%  c	           	      óØ  — |�|n| j         j        }|                      |||||||¬¦  «        }
|
d         }|dd…df         }|                      |¦  «        }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        |
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).
        Nr¬  r   r   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationra   r­  )r   r%  rZ  rÄ  Úproblem_typerÃ  rO   r=   r’   rÀ   r   rV  r   rö   r   r   r-  r.  )r.   r2   rI   rJ   r3   rª  rô   r$  r%  r—  r¥  r,  Úpooled_outputrW  r|  r¯  rº   s                    r0   r7   z'FunnelForSequenceClassification.forward2  s  € ð& &1Ð%<�k�kÀ$Ä+ÔBYˆà—+’+ØØ)Ø)Ø'Ø/Ø!5Ø#ð ñ 
ô 
ˆð $ AœJÐØ)¨!¨!¨!¨Q¨$Ô/ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? 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å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r1   rš  )r:   r;   r<   r   r    r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   rÁ  rÁ  !  s)  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð ð *.Ø.2Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ðB
ð B
à”< $Ñ&ðB
ð œ tÑ+ðB
ð œ tÑ+ð	B
ð
 ”| dÑ*ðB
ð ”˜tÑ#ðB
ð   $™;ðB
ð # T™kðB
ð ˜D‘[ðB
ð 
Ð)Ñ	)ðB
ð B
ð B
ñ „^ðB
ð B
ð B
ð B
ð B
r1   rÁ  c                   óÞ   ‡ — e Zd Zdeddfˆ 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dz  de	e
z  fd„¦   «         Zˆ xZS )ÚFunnelForMultipleChoicer   r   Nc                 óÄ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |d¦  «        | _        |                      ¦   «          d S r¾   )r   r    r  rZ  rr  rÄ  r‚  r-   s     €r0   r    z FunnelForMultipleChoice.__init__z  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÑ-Ô-ˆŒÝ2°6¸1Ñ=Ô=ˆŒà�ŠÑÔÐÐÐr1   r2   rI   rJ   r3   rª  rô   r$  r%  c	           	      óJ  — |�|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…df         }|                      |¦  «        }|                     d|
¦  «        }d}|�t          ¦   «         } |||¦  «        }|s|f|dd…         z   }|�|f|z   n|S t          |||j	        |j
        ¬¦  «        S )aJ  
        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   ra   éþÿÿÿr¬  r   r­  )r   r%  r‘   rö   rL   rZ  rÄ  r   r   r-  r.  )r.   r2   rI   rJ   r3   rª  rô   r$  r%  r—  Únum_choicesr¥  r,  rÊ  rW  Úreshaped_logitsr|  r¯  rº   s                      r0   r7   zFunnelForMultipleChoice.forward‚  sø  € ð& &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ˆØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆð Ð(ð ×Ò˜r =×#5Ò#5°bÑ#9Ô#9¸=×;MÒ;MÈbÑ;QÔ;QÑRÔRÐRàð 	ð —+’+ØØ)Ø)Ø'Ø/Ø!5Ø#ð ñ 
ô 
ˆð $ AœJÐØ)¨!¨!¨!¨Q¨$Ô/ˆØ—’ Ñ/Ô/ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô4ˆDàð 	FØ%Ð'¨'°!°"°"¬+Ñ5ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå(ØØ"Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r1   rš  )r:   r;   r<   r   r    r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   rÌ  rÌ  x  s  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð ð *.Ø.2Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ð;
ð ;
à”< $Ñ&ð;
ð œ tÑ+ð;
ð œ tÑ+ð	;
ð
 ”| dÑ*ð;
ð ”˜tÑ#ð;
ð   $™;ð;
ð # T™kð;
ð ˜D‘[ð;
ð 
Ð*Ñ	*ð;
ð ;
ð ;
ñ „^ð;
ð ;
ð ;
ð ;
ð ;
r1   rÌ  c                   óÞ   ‡ — e Zd Zdeddfˆ 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dz  de	e
z  fd„¦   «         Zˆ xZS )ÚFunnelForTokenClassificationr   r   Nc                 ó6  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        ¦  «        | _        t          j	        |j
        |j        ¦  «        | _        |                      ¦   «          d S r5   )r   r    rÃ  r�  rZ  r   r*   r+   r,   rÑ   r#   rÄ  r‚  r-   s     €r0   r    z%FunnelForTokenClassification.__init__Ã  sy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå! &Ñ)Ô)ˆŒÝ”z &Ô"7Ñ8Ô8ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr1   r2   rI   rJ   r3   rª  rô   r$  r%  c	           	      óÀ  — |�|n| j         j        }|                      |||||||¬¦  «        }
|
d         }|                      |¦  «        }|                      |¦  «        }d}|�Ft          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }|s|f|
dd…         z   }|�|f|z   n|S t          |||
j	        |
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]`.
        Nr¬  r   ra   r   r­  )r   r%  rZ  r,   rÄ  r   rö   rÃ  r   r-  r.  )r.   r2   rI   rJ   r3   rª  rô   r$  r%  r—  r¥  r,  rW  r|  r¯  rº   s                   r0   r7   z$FunnelForTokenClassification.forwardÎ  s  € ð" &1Ð%<�k�kÀ$Ä+ÔBYˆà—+’+ØØ)Ø)Ø'Ø/Ø!5Ø#ð ñ 
ô 
ˆð $ AœJÐØ ŸLšLÐ):Ñ;Ô;ÐØ—’Ð!2Ñ3Ô3ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r1   rš  )r:   r;   r<   r   r    r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   rÓ  rÓ  Á  s  ø€ € € € € ð	˜|ð 	°ð 	ð 	ð 	ð 	ð 	ð 	ð ð *.Ø.2Ø.2Ø-1Ø&*Ø)-Ø,0Ø#'ð.
ð .
à”< $Ñ&ð.
ð œ tÑ+ð.
ð œ tÑ+ð	.
ð
 ”| dÑ*ð.
ð ”˜tÑ#ð.
ð   $™;ð.
ð # T™kð.
ð ˜D‘[ð.
ð 
Ð&Ñ	&ð.
ð .
ð .
ñ „^ð.
ð .
ð .
ð .
ð .
r1   rÓ  c                   óô   ‡ — e Zd Zdeddfˆ 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dz  de	e
z  fd„¦   «         Zˆ xZS )ÚFunnelForQuestionAnsweringr   r   Nc                 óú   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r5   )
r   r    rÃ  r�  rZ  r   rÑ   r#   Ú
qa_outputsr‚  r-   s     €r0   r    z#FunnelForQuestionAnswering.__init__  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå! &Ñ)Ô)ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr1   r2   rI   rJ   r3   Ú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        |j        ¬¦  «        S )	Nr¬  r   r   ra   rb   )Úignore_indexrC   )r|  Ústart_logitsÚ
end_logitsr-  r.  )r   r%  rZ  rÙ  rê   rV  Ú
contiguousrM  rL   ÚsquezeÚclampr   r   r-  r.  )r.   r2   rI   rJ   r3   rÚ  rÛ  rô   r$  r%  r—  r¥  r,  rW  rÞ  rß  Ú
total_lossÚignored_indexr¯  Ú
start_lossÚend_lossrº   s                         r0   r7   z"FunnelForQuestionAnswering.forward  s  € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà—+’+ØØ)Ø)Ø'Ø/Ø!5Ø#ð ñ 
ô 
ˆð $ AœJÐà—’Ð!2Ñ3Ô3ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"8Ò"8¸Ñ"<Ô"<�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨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å+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r1   )	NNNNNNNNN)r:   r;   r<   r   r    r   r=   r>   r  r¡   r   r7   r?   r@   s   @r0   r×  r×     s+  ø€ € € € € ð˜|ð °ð ð ð ð ð ð ð ð *.Ø.2Ø.2Ø-1Ø/3Ø-1Ø)-Ø,0Ø#'ð;
ð ;
à”< $Ñ&ð;
ð œ tÑ+ð;
ð œ tÑ+ð	;
ð
 ”| dÑ*ð;
ð œ¨Ñ,ð;
ð ”| dÑ*ð;
ð   $™;ð;
ð # T™kð;
ð ˜D‘[ð;
ð 
Ð-Ñ	-ð;
ð ;
ð ;
ñ „^ð;
ð ;
ð ;
ð ;
ð ;
r1   r×  )	r  r´  rÌ  r§  r×  rÁ  rÓ  r�  rY  )TF)=r¿   Údataclassesr   Únumpyrc  r=   r   Útorch.nnr   r   r   Ú r	   re  Úactivationsr
   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_funnelr   Ú
get_loggerr:   Úloggerrø   ÚModuler   rB   r>   rÀ   rÊ   rÌ   r  r  r  r  rB  rD  rP  rY  rr  r{  r  r�  r§  r´  rÁ  rÌ  rÓ  r×  Ú__all__r  r1   r0   ú<module>rô     sk  ðð (Ð 'à !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø .Ð .Ð .Ð .Ð .Ð .ð 
ˆÔ	˜HÑ	%Ô	%€ð 
€ðð ð ð ð �r”yñ ô ð ð"A ð A ð A ð A ð A ˜rœyñ A ô A ð A ðH¨E¬Lð Àsð ÐSVð Ð[`Ô[gð ð ð ð ð MGð MGð MGð MGð MG "¤)ñ MGô MGð MGð`+ð +ð +ð +ð +˜BœIñ +ô +ð +ð&Eð Eð Eð Eð E�"”)ñ Eô Eð Eð&<uð <uð <uð <uð <u�B”Iñ <uô <uð <uð@ diðð Ø„|ðØ ðØ.1ðØAEðØ\`ðà
„\ðð ð ð ð,.uð .uð .uð .uð .u�B”Iñ .uô .uð .uðbð ð ð ð  R¤Yñ ô ð ð  ð_ð _ð _ð _ð _˜Oñ _ô _ñ „ð_ð>'ð 'ð 'ð 'ð '˜rœyñ 'ô 'ð 'ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ñ 7ô 7ñ „ñô ð7ð €ððñ ô ð?ð ?ð ?ð ?ð ?Ð+ñ ?ô ?ñô ð?ðD ðZ
ð Z
ð Z
ð Z
ð Z
Ð'ñ Z
ô Z
ñ „ðZ
ðz €ððñ ô ðM
ð M
ð M
ð M
ð M
Ð0ñ M
ô M
ñô ðM
ð` ðB
ð B
ð B
ð B
ð B
Ð-ñ B
ô B
ñ „ðB
ðJ €ððñ ô ðN
ð N
ð N
ð N
ð N
Ð&;ñ N
ô N
ñô ðN
ðb ðE
ð E
ð E
ð E
ð E
Ð3ñ E
ô E
ñ „ðE
ðP ð;
ð ;
ð ;
ð ;
ð ;
Ð#8ñ ;
ô ;
ñ „ð;
ð| ðG
ð G
ð G
ð G
ð G
Ð!6ñ G
ô G
ñ „ðG
ðT
ð 
ð 
€€€r1   