Ë
    T^(hÁÖ  ã                   óÎ  — d Z ddlZddlmZ ddlmZmZ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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m Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&  e$jN                  e(«      Z)dZ*dZ+da,d„ Z-d„ Z.d„ Z/d„ Z0 G d„ dejb                  jd                  «      Z3 G d„ dejb                  jd                  «      Z4 G d„ de
jj                  «      Z6 G d„ de
jj                  «      Z7 G d„ de
jj                  «      Z8 G d„ d e
jj                  «      Z9 G d!„ d"e
jj                  «      Z: G d#„ d$e
jj                  «      Z; G d%„ d&e
jj                  «      Z< G d'„ d(e
jj                  «      Z= G d)„ d*e
jj                  «      Z> G d+„ d,e
jj                  «      Z? G d-„ d.e
jj                  «      Z@ G d/„ d0e«      ZAd1ZBd2ZC e d3eB«       G d4„ d5eA«      «       ZD e d6eB«       G d7„ d8eA«      «       ZE G d9„ d:e
jj                  «      ZF e d;eB«       G d<„ d=eA«      «       ZG e d>eB«       G d?„ d@eA«      «       ZH e dAeB«       G dB„ dCeA«      «       ZI e dDeB«       G dE„ dFeA«      «       ZJg dG¢ZKy)HzPyTorch YOSO model.é    N)ÚPath)ÚOptionalÚTupleÚUnion)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)Ú"BaseModelOutputWithCrossAttentionsÚMaskedLMOutputÚMultipleChoiceModelOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚPreTrainedModel)Úapply_chunking_to_forwardÚ find_pruneable_heads_and_indicesÚprune_linear_layer)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚis_ninja_availableÚis_torch_cuda_availableÚloggingé   )Ú
YosoConfigzuw-madison/yoso-4096r   c                  óH   — ddl m}  d„ } |g d¢«      } | d|d¬«       dd lay )Nr   )Úloadc                 ó´   — t        t        «      j                  «       j                  j                  j                  dz  dz  }| D �cg c]  }||z  ‘Œ	 c}S c c}w )NÚkernelsÚyoso)r   Ú__file__ÚresolveÚparent)ÚfilesÚ
src_folderÚfiles      úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/yoso/modeling_yoso.pyÚappend_rootz&load_cuda_kernels.<locals>.append_root=   sJ   € Üœ(“^×+Ñ+Ó-×4Ñ4×;Ñ;×BÑBÀYÑNÐQWÑWˆ
Ø.3Ö4 d�
˜TÓ!Ò4Ð4ùÒ4s   ÁA)zfast_lsh_cumulation_torch.cppzfast_lsh_cumulation.cuzfast_lsh_cumulation_cuda.cuÚfast_lsh_cumulationT)Úverbose)Útorch.utils.cpp_extensionr    r,   Úlsh_cumulation)r    r+   Ú	src_filess      r*   Úload_cuda_kernelsr1   9   s'   € å.ò5ñ ÒvÓw€IáÐ	 	°4Õ8ä0ó    c                 óÞ   — t        | t        «      r<g }| D ]3  }|j                  «       s|j                  «       }|j	                  |«       Œ5 |S | j                  «       s| j                  «       } | S ©N)Ú
isinstanceÚlistÚis_contiguousÚ
contiguousÚappend©Úinput_tensorsÚoutÚtensors      r*   Úto_contiguousr>   H   sm   € Ü�-¤Ô&ØˆØ#ò 	ˆFØ×'Ñ'Ô)Ø×*Ñ*Ó,�Ø�J‰J�vÕð	ð ˆ
à×*Ñ*Ô,Ø)×4Ñ4Ó6ˆMØÐr2   c                 óÞ   — t        | t        «      r<g }| D ]3  }|j                  t        j                  j                  |dd¬«      «       Œ5 |S t        j                  j                  | dd¬«      S )Né   éÿÿÿÿ)ÚpÚdim)r5   r6   r9   r   Ú
functionalÚ	normalizer:   s      r*   rE   rE   V   se   € Ü�-¤Ô&ØˆØ#ò 	EˆFØ�J‰J”r—}‘}×.Ñ.¨v¸ÀÐ.ÓCÕDð	Eàˆ
ä�}‰}×&Ñ& }¸¸rÐ&ÓBÐBr2   c                 óz  — t        | j                  «       «      dk7  rt        d«      ‚t        |j                  «       «      dk7  rt        d«      ‚t        j                  | j                  d«      | j                  d«      ||z  | j
                  ¬«      }dt        j                  || j
                  ¬«      z  }t        j                  | |«      j                  | j                  d«      | j                  d«      ||«      }t        j                  ||«      j                  |j                  d«      |j                  d«      ||«      }|dkD  j                  «       }|dkD  j                  «       }	t        j                  ||z  d¬	«      }
t        j                  |	|z  d¬	«      }
|
j                  «       |
j                  «       fS )
Nr   zQuery has incorrect size.zKey has incorrect size.r   r@   ©Údevicer   rA   ©rC   )ÚlenÚsizeÚ
ValueErrorÚtorchÚrandnrH   ÚarangeÚmatmulÚreshapeÚintÚsum)ÚqueryÚkeyÚnum_hashÚhash_lenÚrmatÚ	raise_powÚquery_projectionÚkey_projectionÚquery_binaryÚ
key_binaryÚ
query_hashs              r*   Úhashingr_   `   sX  € Ü
ˆ5�:‰:‹<Ó˜AÒÜÐ4Ó5Ð5Ü
ˆ3�8‰8‹:ƒ˜!ÒÜÐ2Ó3Ð3ä�;‰;�u—z‘z !“} e§j¡j°£m°XÀÑ5HÐQV×Q]ÑQ]Ô^€DØ”U—\‘\ (°5·<±<Ô@Ñ@€Iä—|‘| E¨4Ó0×8Ñ8¸¿¹ÀA»ÈÏ
É
ÐSTËÐW_ÐaiÓjÐÜ—\‘\ # tÓ,×4Ñ4°S·X±X¸a³[À#Ç(Á(È1Ã+ÈxÐYaÓb€NØ$ qÑ(×-Ñ-Ó/€LØ  1Ñ$×)Ñ)Ó+€JÜ—‘˜<¨)Ñ3¸Ô<€JÜ—‘˜:¨	Ñ1°rÔ:€Jà�>‰>Ó˜ZŸ^™^Ó-Ð-Ð-r2   c                   ó,   — e Zd Zed„ «       Zed„ «       Zy)ÚYosoCumulationc           
      óN  — |d   }dt        j                  t        j                  ||j                  dd«      «      «      t        j
                  z  z
  |z  }||d d …d d …d f   z  |d d …d d d …f   z  }t        j                  ||«      }	| j                  ||||||«       || _        |	S )NÚhash_code_lenr   rA   éþÿÿÿ)rM   ÚacosrP   Ú	transposeÚmathÚpiÚsave_for_backwardÚconfig)
ÚctxÚ
query_maskÚkey_maskrT   rU   Úvaluerj   rc   ÚexpectationÚcumulation_values
             r*   ÚforwardzYosoCumulation.forwardt   s¢   € à˜Ñ/ˆàœ5Ÿ:™:¤e§l¡l°5¸#¿-¹-ÈÈBÓ:OÓ&PÓQÔTX×T[ÑT[Ñ[Ñ[Ð`mÑmˆØ! Jªq²!°T¨zÑ$:Ñ:¸XÂaÈÊqÀjÑ=QÑQˆÜ Ÿ<™<¨°UÓ;Ðà×Ñ˜j¨(°KÀÈÈUÔSØˆŒ
àÐr2   c                 óž  — t        |«      }| j                  \  }}}}}}| j                  }|d   }	t        j                  ||j                  dd«      «      |z  }
t        j                  |
|	dz  |z  «      }t        j                  |
j                  dd«      |	dz  |z  «      }t        j                  |j                  dd«      |«      }d d |||d fS )Nrc   rA   rd   r@   )r>   Úsaved_tensorsrj   rM   rP   rf   )rk   Úgradrl   rm   ro   rT   rU   rn   rj   rc   Úweighted_expÚ
grad_queryÚgrad_keyÚ
grad_values                 r*   ÚbackwardzYosoCumulation.backward�   sÊ   € ä˜TÓ"ˆà?B×?PÑ?PÑ<ˆ
�H˜k¨5°#°uØ—‘ˆà˜Ñ/ˆä—|‘| D¨%¯/©/¸"¸bÓ*AÓBÀ[ÑPˆÜ—\‘\ ,°ÀÑ1BÀcÑ0IÓJˆ
Ü—<‘< × 6Ñ 6°r¸2Ó >ÀÐQRÑARÐV[Ñ@[Ó\ˆÜ—\‘\ +×"7Ñ"7¸¸BÓ"?ÀÓFˆ
à�T˜: x°¸TÐAÐAr2   N©Ú__name__Ú
__module__Ú__qualname__Ústaticmethodrq   ry   © r2   r*   ra   ra   s   s*   „ Øñ
 ó ð
 ð ñBó ñBr2   ra   c                   ó,   — e Zd Zed„ «       Zed„ «       Zy)ÚYosoLSHCumulationc           
      ó‚  — |j                  d«      |j                  d«      k7  rt        d«      ‚|j                  d«      |j                  d«      k7  rt        d«      ‚|j                  d«      |j                  d«      k7  rt        d«      ‚|j                  d«      |j                  d«      k7  rt        d«      ‚|j                  d«      |j                  d«      k7  rt        d«      ‚|j                  d«      |j                  d«      k7  rt        d	«      ‚t        |||||g«      \  }}}}}|j                  }|d
   }|d   }	t	        d|	z  «      }
|d   r t
        j                  ||||||	|d«      \  }}nt        ||||	«      \  }}t
        j                  ||||||
|d«      }| j                  |||||||«       || _	        |S )Nr   z6Query mask and Key mask differ in sizes in dimension 0z3Query mask and Query differ in sizes in dimension 0z1Query mask and Key differ in sizes in dimension 0z8Query mask and Value mask differ in sizes in dimension 0r   z,Key and Value differ in sizes in dimension 1r@   z,Query and Key differ in sizes in dimension 2rV   rc   Úuse_fast_hash)
rK   rL   r>   Úis_cudarR   r/   Ú	fast_hashr_   ri   rj   )rk   rl   rm   rT   rU   rn   rj   Úuse_cudarV   rc   Úhashtable_capacityÚquery_hash_codeÚkey_hash_coderp   s                 r*   rq   zYosoLSHCumulation.forward“   sÈ  € à�?‰?˜1Ó §¡¨qÓ!1Ò1ÜÐUÓVÐVØ�?‰?˜1Ó §¡¨A£Ò.ÜÐRÓSÐSØ�?‰?˜1Ó §¡¨!£Ò,ÜÐPÓQÐQØ�?‰?˜1Ó §¡¨A£Ò.ÜÐWÓXÐXØ�8‰8�A‹;˜%Ÿ*™* Q›-Ò'ÜÐKÓLÐLØ�:‰:�a‹=˜CŸH™H Q›KÒ'ÜÐKÓLÐLä2?ÀÈXÐW\Ð^aÐchÐ@iÓ2jÑ/ˆ
�H˜e S¨%à×%Ñ%ˆØ˜*Ñ%ˆØ˜Ñ/ˆÜ   MÑ!1Ó2Ðà�/Ò"Ü-;×-EÑ-EØ˜E 8¨S°(¸MÈ8ÐUVó.Ñ*ˆO™]ô .5°U¸CÀÈ=Ó-YÑ*ˆO˜]ä)×8Ñ8Ø˜¨°=À%ÐI[Ð]eÐghó
Ðð 	×Ñ˜j¨(°OÀ]ÐTYÐ[^Ð`eÔfØˆŒ
àÐr2   c                 ó‚  — t        |«      }| j                  \  }}}}}}}| j                  }	|j                  }
|	d   }t	        d|z  «      }|	d   rft
        j                  |||||||
d«      }t
        j                  |||||||dz  |z  ||
d«
      }t
        j                  |||||||dz  |z  ||
d«
      }�ndt        j                  t        j                  ||j                  dd«      «      «      t        j                  z  z
  |z  }||d d …d d …d f   z  |d d …d d d …f   z  }t        j                  ||j                  dd«      «      |z  }t        j                  ||dz  |z  «      }t        j                  |j                  dd«      |dz  |z  «      }t        j                  |j                  dd«      |«      }d d |||d fS )Nrc   r@   Úlsh_backwardr   é   rA   rd   )r>   rs   rj   r„   rR   r/   Úlsh_weighted_cumulationrM   re   rP   rf   rg   rh   )rk   rt   rl   rm   rˆ   r‰   rT   rU   rn   rj   r†   rc   r‡   rx   rv   rw   ro   ru   s                     r*   ry   zYosoLSHCumulation.backward¹   sé  € ä˜TÓ"ˆàRU×RcÑRcÑOˆ
�H˜o¨}¸eÀSÈ%Ø—‘ˆà—<‘<ˆØ˜Ñ/ˆÜ   MÑ!1Ó2Ðà�.Ò!Ü'×6Ñ6Ø˜-¨°_ÀdÐL^Ð`hÐjkóˆJô (×?Ñ?ØØØØØØØ Ñ" cÑ)Ø"ØØóˆJô &×=Ñ=ØØØØØØØ Ñ" eÑ+Ø"ØØóŠHð œuŸz™z¬%¯,©,°u¸c¿m¹mÈBÐPRÓ>SÓ*TÓUÔX\×X_ÑX_Ñ_Ñ_ÐdqÑqˆKØ%¨
²1²a¸°:Ñ(>Ñ>ÀÊ!ÈTÒSTÈ*ÑAUÑUˆKÜ Ÿ<™<¨¨e¯o©o¸bÀ"Ó.EÓFÈÑTˆLÜŸ™ l°]ÀQÑ5FÈ#Ñ4MÓNˆJÜ—|‘| L×$:Ñ$:¸2¸rÓ$BÀ]ÐUVÑEVÐZ_ÑD_Ó`ˆHÜŸ™ k×&;Ñ&;¸BÀÓ&CÀTÓJˆJà�T˜: x°¸TÐAÐAr2   Nrz   r   r2   r*   r�   r�   ’   s+   „ Øñ# ó ð# ðJ ñ.Bó ñ.Br2   r�   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚYosoEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ót  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  dz   |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      dz   d¬«       t+        |dd	«      | _        | j#                  d
t%        j.                  | j0                  j3                  «       t$        j4                  | j0                  j6                  ¬«      d¬«       y )N)Úpadding_idxr@   ©ÚepsÚposition_ids)r   rA   F)Ú
persistentÚposition_embedding_typeÚabsoluteÚtoken_type_ids©ÚdtyperH   )Ú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ÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferrM   rO   ÚexpandÚgetattrr–   Úzerosr”   rK   ÚlongrH   ©Úselfrj   Ú	__class__s     €r*   rœ   zYosoEmbeddings.__init__ï   sL  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐQRÑ0RÐTZ×TfÑTfÓ#gˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"ô Ÿ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐ[\Ñ\Ðinð 	ô 	
ô (/¨vÐ7PÐR\Ó']ˆÔ$Ø×ÑØÜ�K‰K˜×)Ñ)×.Ñ.Ó0¼¿
¹
È4×K\ÑK\×KcÑKcÔdØð 	õ 	
r2   c                 óT  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …d |…f   }|€st        | d«      r-| j                  d d …d |…f   }|j	                  |d   |«      }|}n:t        j                  |t
        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }	||	z   }
| j                  dk(  r| j                  |«      }|
|z  }
| j                  |
«      }
| j                  |
«      }
|
S )NrA   r   r˜   r   r™   r—   )rK   r”   Úhasattrr˜   r¬   rM   r®   r¯   rH   r¡   r¥   r–   r£   r¦   rª   )r±   Ú	input_idsr˜   r”   Úinputs_embedsÚinput_shapeÚ
seq_lengthÚbuffered_token_type_idsÚ buffered_token_type_ids_expandedr¥   Ú
embeddingsr£   s               r*   rq   zYosoEmbeddings.forward  s=  € ØÐ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLð
 Ð!Ü�tÐ-Ô.Ø*.×*=Ñ*=ºaÀÀ*À¸nÑ*MÐ'Ø3J×3QÑ3QÐR]Ð^_ÑR`ÐblÓ3mÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐà"Ð%:Ñ:ˆ
Ø×'Ñ'¨:Ò5Ø"&×":Ñ":¸<Ó"HÐØÐ-Ñ-ˆJØ—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr2   )NNNN©r{   r|   r}   Ú__doc__rœ   rq   Ú__classcell__©r²   s   @r*   r�   r�   ì   s   ø„ ÙQô
÷, r2   r�   c                   ó.   ‡ — e Zd Zdˆ fd„	Zd„ Zdd„Zˆ xZS )ÚYosoSelfAttentionc                 óª  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚t        d u}t        «       rt        «       r|s	 t        «        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t!        j"                  |j                  | j                  «      | _        t!        j"                  |j                  | j                  «      | _        t!        j"                  |j                  | j                  «      | _        t!        j*                  |j,                  «      | _        |�|n|j0                  | _        |j2                  | _        |j4                  | _        |j6                  d u| _        |j:                  | _        |j<                  | _        |j>                  | _        | j4                  | j:                  | j<                  | j>                  dœ| _         |j6                  �Zt!        jB                  |j                  |j                  |j6                  df|j6                  d	z  dfd
|j                  ¬«      | _"        y y # t        $ r#}t        j                  d|› �«       Y d }~�ŒFd }~ww xY w)Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)zGCould not load the custom kernel for multi-scale deformable attention: )rc   rƒ   rV   r‹   r   r@   F)Úin_channelsÚout_channelsÚkernel_sizeÚpaddingÚbiasÚgroups)#r›   rœ   rŸ   Únum_attention_headsr´   rL   r/   r   r   r1   Ú	ExceptionÚloggerÚwarningrR   Úattention_head_sizeÚall_head_sizer   ÚLinearrT   rU   rn   r¨   Úattention_probs_dropout_probrª   r–   Úuse_expectationrc   Úconv_windowÚuse_convrƒ   rV   r‹   Ú
lsh_configÚConv2dÚconv)r±   rj   r–   Úkernel_loadedÚer²   s        €r*   rœ   zYosoSelfAttention.__init__)  so  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ô '¨dÐ2ˆÜ"Ô$Ô);Ô)=ÁmðnÜ!Ô#ð $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà'>Ð'JÑ#ÐPV×PnÑPnð 	Ô$ð  &×5Ñ5ˆÔØ#×1Ñ1ˆÔØ×*Ñ*°$Ð6ˆŒØ#×1Ñ1ˆÔØŸ™ˆŒØ"×/Ñ/ˆÔð "×/Ñ/Ø!×/Ñ/ØŸ™Ø ×-Ñ-ñ	
ˆŒð ×ÑÐ)ÜŸ	™	Ø"×6Ñ6Ø#×7Ñ7Ø#×/Ñ/°Ð3Ø×+Ñ+¨qÑ0°!Ð4ØØ×1Ñ1ôˆD�Ið *øô= ò nÜ—‘Ð!hÐijÐhkÐl×mÒmûðnús   Á=
J& Ê&	KÊ/KËKc                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )NrA   r   r@   r   r   )rK   rË   rÏ   ÚviewÚpermute)r±   ÚlayerÚnew_layer_shapes      r*   Útranspose_for_scoresz&YosoSelfAttention.transpose_for_scores\  sO   € ØŸ*™*›, s¨Ð+¨t×/GÑ/GÈ×IaÑIaÐ.bÑbˆØ�—
‘
˜OÐ,ˆØ�}‰}˜Q  1 aÓ(Ð(r2   c                 óB  — | j                  |«      }| j                  | j                  |«      «      }| j                  | j                  |«      «      }| j                  |«      }| j                  r| j                  ||d d …d d d …d f   z  «      }|j                  «       \  }	}
}}|j                  |	|
z  ||«      }|j                  |	|
z  ||«      }|j                  |	|
z  ||«      }d|dz  z   }|j                  d«      j                  |
d¬«      j                  |	|
z  |«      j                  «       }d}| j                  s¸||k  r³|	|
z  |||z
  f}t        j                  |t        j                  ||j                  ¬«      gd¬«      }t        j                  |t        j                  ||j                  ¬«      gd¬«      }t        j                  |t        j                  ||j                  ¬«      gd¬«      }| j                  s| j                   rt#        ||g«      \  }}| j                  r%t$        j'                  |||||| j(                  «      }n$t*        j'                  |||||| j(                  «      }| j                  s||k  r|d d …d d …d |…f   }t#        |«      }|j                  |	|
||«      }| j                  r|z  }|j-                  dd	dd
«      j/                  «       }|j                  «       d d | j0                  fz   } |j2                  |Ž }|r||f}|S |f}|S )Nç      ð?g     ˆÃ@r   rI   é    rG   rA   r   r@   r   rd   )rT   rà   rU   rn   rÕ   rØ   rK   rQ   Ú	unsqueezeÚrepeat_interleaverR   rÓ   rM   Úcatr®   rH   ÚtrainingrE   ra   ÚapplyrÖ   r�   rÝ   r8   rÐ   rÜ   )r±   Úhidden_statesÚattention_maskÚoutput_attentionsÚmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚconv_value_layerÚ
batch_sizeÚ	num_headsÚseq_lenÚhead_dimÚgpu_warp_sizeÚpad_sizeÚcontext_layerÚnew_context_layer_shapeÚoutputss                     r*   rq   zYosoSelfAttention.forwarda  s0  € Ø ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆà�=Š=Ø#Ÿy™y¨°~ÂaÈÊqÐRVÐFVÑ7WÑ)WÓXÐà3>×3CÑ3CÓ3EÑ0ˆ
�I˜w¨à!×)Ñ)¨*°yÑ*@À'È8ÓTˆØ×%Ñ% j°9Ñ&<¸gÀxÓPˆ	Ø!×)Ñ)¨*°yÑ*@À'È8ÓTˆà˜~°Ñ7Ñ7ˆà×$Ñ$ QÓ'ßÑ˜y¨aÐÓ0ß‰W�Z )Ñ+¨WÓ5ß‰S‹Uð	 	ð ˆà×$Ò$¨(°]Ò*BØ! IÑ-¨w¸ÈÑ8PÐPˆHäŸ)™)àÜ—K‘K °×1CÑ1CÔDðð ôˆKô Ÿ	™	àÜ—K‘K °×1AÑ1AÔBðð ôˆIô  Ÿ)™)àÜ—K‘K °×1CÑ1CÔDðð ôˆKð ×Ò 4§=¢=Ü%.°¸YÐ/GÓ%HÑ"ˆK˜à×ÒÜ*×0Ñ0Ø °¸YÈÐUY×UdÑUdó‰Mô .×3Ñ3Ø °¸YÈÐUY×UdÑUdóˆMð ×$Ò$¨(°]Ò*BØ)ª!ªQ°	°°	¨/Ñ:ˆMä! -Ó0ˆà%×-Ñ-¨j¸)ÀWÈhÓWˆà�=Š=ØÐ-Ñ-ˆMà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆá4E�= -Ð0ˆàˆð MZÐK[ˆàˆr2   r4   ©NF)r{   r|   r}   rœ   rà   rq   r¾   r¿   s   @r*   rÁ   rÁ   (  s   ø„ õ1òf)÷
Qr2   rÁ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚYosoSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr’   )r›   rœ   r   rÑ   rŸ   Údenser¦   r§   r¨   r©   rª   r°   s     €r*   rœ   zYosoSelfOutput.__init__·  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r2   ré   Úinput_tensorÚreturnc                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r4   ©rÿ   rª   r¦   ©r±   ré   r   s      r*   rq   zYosoSelfOutput.forward½  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr2   ©r{   r|   r}   rœ   rM   ÚTensorrq   r¾   r¿   s   @r*   rü   rü   ¶  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r2   rü   c                   ó.   ‡ — e Zd Zdˆ fd„	Zd„ Zdd„Zˆ xZS )ÚYosoAttentionc                 ó„   •— t         ‰| �  «        t        ||¬«      | _        t	        |«      | _        t        «       | _        y )N)r–   )r›   rœ   rÁ   r±   rü   ÚoutputÚsetÚpruned_heads)r±   rj   r–   r²   s      €r*   rœ   zYosoAttention.__init__Å  s3   ø€ Ü‰ÑÔÜ% fÐF]Ô^ˆŒ	Ü$ VÓ,ˆŒÜ›EˆÕr2   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   rI   )rJ   r   r±   rË   rÏ   r  r   rT   rU   rn   r  rÿ   rÐ   Úunion)r±   ÚheadsÚindexs      r*   Úprune_headszYosoAttention.prune_headsË  s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr2   c                 óh   — | j                  |||«      }| j                  |d   |«      }|f|dd  z   }|S )Nr   r   )r±   r  )r±   ré   rê   rë   Úself_outputsÚattention_outputrù   s          r*   rq   zYosoAttention.forwardÝ  sC   € Ø—y‘y °Ð@QÓRˆØŸ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr2   r4   rú   )r{   r|   r}   rœ   r  rq   r¾   r¿   s   @r*   r
  r
  Ä  s   ø„ õ"ò;÷$r2   r
  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚYosoIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r4   )r›   rœ   r   rÑ   rŸ   Úintermediate_sizerÿ   r5   Ú
hidden_actÚstrr   Úintermediate_act_fnr°   s     €r*   rœ   zYosoIntermediate.__init__æ  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r2   ré   r  c                 óJ   — | j                  |«      }| j                  |«      }|S r4   )rÿ   r  ©r±   ré   s     r*   rq   zYosoIntermediate.forwardî  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr2   r  r¿   s   @r*   r  r  å  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r2   r  c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )Ú
YosoOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rþ   )r›   rœ   r   rÑ   r  rŸ   rÿ   r¦   r§   r¨   r©   rª   r°   s     €r*   rœ   zYosoOutput.__init__ö  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r2   ré   r   r  c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r4   r  r  s      r*   rq   zYosoOutput.forwardü  r  r2   r  r¿   s   @r*   r!  r!  õ  r  r2   r!  c                   ó,   ‡ — e Zd Zˆ fd„Zdd„Zd„ Zˆ xZS )Ú	YosoLayerc                 óÔ   •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        |j                  | _        t        |«      | _        t        |«      | _
        y ©Nr   )r›   rœ   Úchunk_size_feed_forwardÚseq_len_dimr
  Ú	attentionÚadd_cross_attentionr  Úintermediater!  r  r°   s     €r*   rœ   zYosoLayer.__init__  sW   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& vÓ.ˆŒØ#)×#=Ñ#=ˆÔ Ü,¨VÓ4ˆÔÜ  Ó(ˆ�r2   c                 ó¦   — | j                  |||¬«      }|d   }|dd  }t        | j                  | j                  | j                  |«      }|f|z   }|S )N)rë   r   r   )r*  r   Úfeed_forward_chunkr(  r)  )r±   ré   rê   rë   Úself_attention_outputsr  rù   Úlayer_outputs           r*   rq   zYosoLayer.forward  sh   € Ø!%§¡°¸~Ðar Ó!sÐØ1°!Ñ4Ðà(¨¨Ð,ˆä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆàˆr2   c                 óL   — | j                  |«      }| j                  ||«      }|S r4   )r,  r  )r±   r  Úintermediate_outputr0  s       r*   r.  zYosoLayer.feed_forward_chunk  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr2   rú   )r{   r|   r}   rœ   rq   r.  r¾   r¿   s   @r*   r%  r%    s   ø„ ô)óör2   r%  c                   ó0   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 dd„Zˆ xZS )ÚYosoEncoderc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w rú   )
r›   rœ   rj   r   Ú
ModuleListÚrangeÚnum_hidden_layersr%  rÞ   Úgradient_checkpointing)r±   rj   Ú_r²   s      €r*   rœ   zYosoEncoder.__init__!  sN   ø€ Ü‰ÑÔØˆŒÜ—]‘]¼uÀV×E]ÑE]Ó?^Ö#_¸!¤I¨fÕ$5Ò#_Ó`ˆŒ
Ø&+ˆÕ#ùò $`s   ½A#c                 ób  — |rdnd }|rdnd }t        | j                  «      D ]_  \  }	}
|r||fz   }| j                  r+| j                  r| j	                  |
j
                  |||«      }n
 |
|||«      }|d   }|sŒW||d   fz   }Œa |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )Nr   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr4   r   )Ú.0Úvs     r*   ú	<genexpr>z&YosoEncoder.forward.<locals>.<genexpr>I  s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š)Úlast_hidden_stateré   Ú
attentions)Ú	enumeraterÞ   r9  rç   Ú_gradient_checkpointing_funcÚ__call__Útupler   )r±   ré   rê   Ú	head_maskrë   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesÚall_self_attentionsÚiÚlayer_moduleÚlayer_outputss               r*   rq   zYosoEncoder.forward'  sï   € ñ #7™B¸DÐÙ$5™b¸4Ðä(¨¯©Ó4ò 	P‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!à×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø"Ø%ó	!‘ñ !-¨]¸NÐL]Ó ^�à)¨!Ñ,ˆMÚ Ø&9¸]È1Ñ=MÐ<OÑ&OÑ#ð!	Pñ$  Ø 1°]Ð4DÑ DÐáÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmÜ1Ø+Ø+Ø*ô
ð 	
r2   )NNFFT)r{   r|   r}   rœ   rq   r¾   r¿   s   @r*   r4  r4     s   ø„ ô,ð ØØØ"Ø÷'
r2   r4  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚYosoPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y rþ   )r›   rœ   r   rÑ   rŸ   rÿ   r5   r  r  r   Útransform_act_fnr¦   r§   r°   s     €r*   rœ   z$YosoPredictionHeadTransform.__init__S  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�r2   ré   r  c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r4   )rÿ   rQ  r¦   r  s     r*   rq   z#YosoPredictionHeadTransform.forward\  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr2   r  r¿   s   @r*   rO  rO  R  s$   ø„ ôUð U§\¡\ð °e·l±l÷ r2   rO  c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚYosoLMPredictionHeadc                 óH  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        t	        j                  t        j                  |j                  «      «      | _        | j                  | j                  _        y )NF)rÉ   )r›   rœ   rO  Ú	transformr   rÑ   rŸ   rž   ÚdecoderÚ	ParameterrM   r®   rÉ   r°   s     €r*   rœ   zYosoLMPredictionHead.__init__e  sm   ø€ Ü‰ÑÔÜ4°VÓ<ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒä—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆŒ	ð !ŸI™Iˆ�‰Õr2   c                 ó:   — | j                   | j                  _         y r4   )rÉ   rW  ©r±   s    r*   Ú_tie_weightsz!YosoLMPredictionHead._tie_weightsr  s   € Ø ŸI™Iˆ�‰Õr2   c                 óJ   — | j                  |«      }| j                  |«      }|S r4   )rV  rW  r  s     r*   rq   zYosoLMPredictionHead.forwardu  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr2   )r{   r|   r}   rœ   r[  rq   r¾   r¿   s   @r*   rT  rT  d  s   ø„ ô&ò&ör2   rT  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚYosoOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y r4   )r›   rœ   rT  Úpredictionsr°   s     €r*   rœ   zYosoOnlyMLMHead.__init__}  s   ø€ Ü‰ÑÔÜ/°Ó7ˆÕr2   Úsequence_outputr  c                 ó(   — | j                  |«      }|S r4   )r`  )r±   ra  Úprediction_scoress      r*   rq   zYosoOnlyMLMHead.forward�  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð r2   r  r¿   s   @r*   r^  r^  |  s#   ø„ ô8ð! u§|¡|ð !¸¿¹÷ !r2   r^  c                   ó"   — e Zd ZdZeZdZdZd„ Zy)ÚYosoPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    r#   Tc                 ó  — t        |t        j                  «      rm|j                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rz|j                  j                  j                  d| j                  j                  ¬«       |j                  �2|j                  j                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yy)zInitialize the weightsg        )ÚmeanÚstdNrâ   )r5   r   rÑ   ÚweightÚdataÚnormal_rj   Úinitializer_rangerÉ   Úzero_r�   r‘   r¦   Úfill_)r±   Úmodules     r*   Ú_init_weightsz!YosoPreTrainedModel._init_weights�  s  € ä�fœbŸi™iÔ(ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)ð .r2   N)	r{   r|   r}   r½   r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingrp  r   r2   r*   re  re  †  s   „ ñð
 €LØÐØ&*Ð#ó*r2   re  aG  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`YosoConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a5
  
    Args:
        input_ids (`torch.LongTensor` of shape `({0})`):
            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)
        attention_mask (`torch.FloatTensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        token_type_ids (`torch.LongTensor` of shape `({0})`, *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 `({0})`, *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)
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        inputs_embeds (`torch.FloatTensor` of shape `({0}, 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.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
z^The bare YOSO Model transformer outputting raw hidden-states without any specific head on top.c                   ó|  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Z eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 ddeej                      deej                      d	eej                      d
eej                      deej                      deej                      dee   dee   dee   deeef   fd„«       «       Zˆ xZS )Ú	YosoModelc                 ó’   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        | j                  «        y r4   )r›   rœ   rj   r�   r»   r4  ÚencoderÚ	post_initr°   s     €r*   rœ   zYosoModel.__init__ã  s;   ø€ Ü‰Ñ˜Ô ØˆŒä(¨Ó0ˆŒÜ" 6Ó*ˆŒð 	�‰Õr2   c                 ó.   — | j                   j                  S r4   ©r»   r¡   rZ  s    r*   Úget_input_embeddingszYosoModel.get_input_embeddingsí  s   € Ø�‰×.Ñ.Ð.r2   c                 ó&   — || j                   _        y r4   rz  )r±   rn   s     r*   Úset_input_embeddingszYosoModel.set_input_embeddingsð  s   € Ø*/ˆ�‰Õ'r2   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)Úitemsrw  rÞ   r*  r  )r±   Úheads_to_prunerÞ   r  s       r*   Ú_prune_headszYosoModel._prune_headsó  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr2   úbatch_size, sequence_length©Ú
checkpointÚoutput_typerq  rµ   rê   r˜   r”   rF  r¶   rë   rG  rH  r  c
                 ó¾  — |�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	|�|�t	        d«      ‚|�#| j                  ||«       |j                  «       }
n!|�|j                  «       d d }
nt	        d«      ‚|
\  }}|�|j                  n|j                  }|€t        j                  ||f|¬«      }|€pt        | j                  d«      r4| j                  j                  d d …d |…f   }|j                  ||«      }|}n&t        j                  |
t        j                  |¬«      }| j!                  || j                   j"                  «      }| j                  ||||¬«      }| j%                  ||||||	¬«      }|d	   }|	s	|f|d
d  z   S t'        ||j(                  |j*                  |j,                  ¬«      S )NzDYou cannot specify both input_ids and inputs_embeds at the same timerA   z5You have to specify either input_ids or inputs_embedsrG   r˜   r™   )rµ   r”   r˜   r¶   )rê   rF  rë   rG  rH  r   r   )r@  ré   rA  Úcross_attentions)rj   rë   rG  Úuse_return_dictrL   Ú%warn_if_padding_and_no_attention_maskrK   rH   rM   Úonesr´   r»   r˜   r¬   r®   r¯   Úget_head_maskr8  rw  r   ré   rA  r‡  )r±   rµ   rê   r˜   r”   rF  r¶   rë   rG  rH  r·   rñ   r¸   rH   r¹   rº   Úembedding_outputÚencoder_outputsra  s                      r*   rq   zYosoModel.forwardû  s  € ð$ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3‰KäÐTÓUÐUà!,Ñˆ
�JØ%.Ð%:�×!Ò!À×@TÑ@TˆàÐ!Ü"ŸZ™Z¨*°jÐ)AÈ6ÔRˆNàÐ!Ü�t—‘Ð(8Ô9Ø*.¯/©/×*HÑ*HÊÈKÈZÈKÈÑ*XÐ'Ø3J×3QÑ3QÐR\Ð^hÓ3iÐ0Ø!A‘ä!&§¡¨[ÄÇ
Á
ÐSYÔ!Z�ð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	àŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðð Ÿ,™,ØØ)ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆáØ#Ð%¨¸¸Ð(;Ñ;Ð;ä1Ø-Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô	
ð 	
r2   )	NNNNNNNNN)r{   r|   r}   rœ   r{  r}  r�  r   ÚYOSO_INPUTS_DOCSTRINGÚformatr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCr   rM   r  Úboolr   r   rq   r¾   r¿   s   @r*   ru  ru  Þ  s-  ø„ ô
ò/ò0òCñ +Ð+@×+GÑ+GÐHeÓ+fÓgÙØ&Ø6Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø,0Ø/3Ø&*ñI
à˜EŸL™LÑ)ðI
ð ! §¡Ñ.ðI
ð ! §¡Ñ.ð	I
ð
 ˜uŸ|™|Ñ,ðI
ð ˜EŸL™LÑ)ðI
ð   §¡Ñ-ðI
ð $ D™>ðI
ð ' t™nðI
ð ˜d‘^ðI
ð 
ˆuÐ8Ð8Ñ	9òI
óó hôI
r2   ru  z2YOSO Model with a `language modeling` head on top.c                   óž  ‡ — e Zd ZddgZˆ fd„Zd„ Zd„ Z eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 	 ddeej                      d	eej                      d
eej                      deej                      deej                      deej                      deej                      dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚYosoForMaskedLMzcls.predictions.decoder.weightzcls.predictions.decoder.biasc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r4   )r›   rœ   ru  r#   r^  Úclsrx  r°   s     €r*   rœ   zYosoForMaskedLM.__init__Q  s4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü" 6Ó*ˆŒð 	�‰Õr2   c                 óB   — | j                   j                  j                  S r4   )r–  r`  rW  rZ  s    r*   Úget_output_embeddingsz%YosoForMaskedLM.get_output_embeddingsZ  s   € Ø�x‰x×#Ñ#×+Ñ+Ð+r2   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r4   )r–  r`  rW  rÉ   )r±   Únew_embeddingss     r*   Úset_output_embeddingsz%YosoForMaskedLM.set_output_embeddings]  s,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!r2   r‚  rƒ  rµ   rê   r˜   r”   rF  r¶   Úlabelsrë   rG  rH  r  c                 óš  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }d}|�Ft	        «       } ||j                  d| j                   j                  «      |j                  d«      «      }|
s|f|dd z   }|�|f|z   S |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]`.
        N©rê   r˜   r”   rF  r¶   rë   rG  rH  r   rA   r   ©ÚlossÚlogitsré   rA  )
rj   rˆ  r#   r–  r	   rÜ   rž   r   ré   rA  )r±   rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  rù   ra  rc  Úmasked_lm_lossÚloss_fctr  s                    r*   rq   zYosoForMaskedLM.forwarda  sú   € ð2 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNáØ'Ð)¨G°A°B¨KÑ7ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r2   ©
NNNNNNNNNN)r{   r|   r}   Ú_tied_weights_keysrœ   r˜  r›  r   rŽ  r�  r   r�  r   r‘  r   rM   r  r’  r   r   rq   r¾   r¿   s   @r*   r”  r”  M  s<  ø„ à:Ð<ZÐ[Ðôò,ò8ñ +Ð+@×+GÑ+GÐHeÓ+fÓgÙØ&Ø"Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø)-Ø,0Ø/3Ø&*ñ2
à˜EŸL™LÑ)ð2
ð ! §¡Ñ.ð2
ð ! §¡Ñ.ð	2
ð
 ˜uŸ|™|Ñ,ð2
ð ˜EŸL™LÑ)ð2
ð   §¡Ñ-ð2
ð ˜Ÿ™Ñ&ð2
ð $ D™>ð2
ð ' t™nð2
ð ˜d‘^ð2
ð 
ˆu�nÐ$Ñ	%ò2
óó hô2
r2   r”  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚYosoClassificationHeadz-Head for sentence-level classification tasks.c                 ó4  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _
        || _        y r4   )r›   rœ   r   rÑ   rŸ   rÿ   r¨   r©   rª   Ú
num_labelsÚout_projrj   r°   s     €r*   rœ   zYosoClassificationHead.__init__Ÿ  sg   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü—z‘z &×"<Ñ"<Ó=ˆŒÜŸ	™	 &×"4Ñ"4°f×6GÑ6GÓHˆŒàˆ�r2   c                 óê   — |d d …dd d …f   }| j                  |«      }| j                  |«      }t        | j                  j                     |«      }| j                  |«      }| j                  |«      }|S )Nr   )rª   rÿ   r   rj   r  rª  )r±   ÚfeaturesÚkwargsÚxs       r*   rq   zYosoClassificationHead.forward§  se   € Ø’Q˜š1�WÑˆØ�L‰L˜‹OˆØ�J‰J�q‹MˆÜ�4—;‘;×)Ñ)Ñ*¨1Ó-ˆØ�L‰L˜‹OˆØ�M‰M˜!ÓˆØˆr2   r¼   r¿   s   @r*   r§  r§  œ  s   ø„ Ù7ôör2   r§  z’YOSO 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ej                  d«      «       eee	e
¬«      	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     deej                     d	eej                     d
eej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )ÚYosoForSequenceClassificationc                 ó¦   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |«      | _        | j                  «        y r4   )r›   rœ   r©  ru  r#   r§  Ú
classifierrx  r°   s     €r*   rœ   z&YosoForSequenceClassification.__init__·  sA   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ˜fÓ%ˆŒ	Ü0°Ó8ˆŒð 	�‰Õr2   r‚  rƒ  rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  r  c                 ó  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }d}|��‡| j                   j                  €�| j
                  dk(  rd| j                   _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                   _        nd| j                   _        | j                   j                  dk(  rIt        «       }| j
                  dk(  r& ||j                  «       |j                  «       «      }nŒ |||«      }n‚| j                   j                  dk(  r=t        «       } ||j                  d| j
                  «      |j                  d«      «      }n,| j                   j                  dk(  rt        «       } |||«      }|
s|f|dd z   }|�|f|z   S |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Ÿ  )rj   rˆ  r#   r²  Úproblem_typer©  rš   rM   r¯   rR   r
   Úsqueezer	   rÜ   r   r   ré   rA  )r±   rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  rù   ra  r¡  r   r£  r  s                    r*   rq   z%YosoForSequenceClassification.forwardÀ  sÚ  € ð2 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆØ—‘ Ó1ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r2   r¤  )r{   r|   r}   rœ   r   rŽ  r�  r   r�  r   r‘  r   rM   r  r’  r   r   rq   r¾   r¿   s   @r*   r°  r°  ±  s4  ø„ ôñ +Ð+@×+GÑ+GÐHeÓ+fÓgÙØ&Ø,Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø)-Ø,0Ø/3Ø&*ñC
à˜EŸL™LÑ)ðC
ð ! §¡Ñ.ðC
ð ! §¡Ñ.ð	C
ð
 ˜uŸ|™|Ñ,ðC
ð ˜EŸL™LÑ)ðC
ð   §¡Ñ-ðC
ð ˜Ÿ™Ñ&ðC
ð $ D™>ðC
ð ' t™nðC
ð ˜d‘^ðC
ð 
ˆuÐ.Ð.Ñ	/òC
óó hôC
r2   r°  z›YOSO Model with a multiple choice classification head on top (a linear layer on top of
    the pooled output and a softmax) e.g. for RocStories/SWAG tasks.c                   óŠ  ‡ — e Zd Zˆ fd„Z eej                  d«      «       eee	e
¬«      	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     deej                     d	eej                     d
eej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )ÚYosoForMultipleChoicec                 ó  •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  «      | _        t	        j
                  |j                  d«      | _        | j                  «        y r'  )
r›   rœ   ru  r#   r   rÑ   rŸ   Úpre_classifierr²  rx  r°   s     €r*   rœ   zYosoForMultipleChoice.__init__  s_   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü Ÿi™i¨×(:Ñ(:¸F×<NÑ<NÓOˆÔÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰Õr2   z(batch_size, num_choices, sequence_lengthrƒ  rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  r  c                 ó’  — |
�|
n| j                   j                  }
|�|j                  d   n|j                  d   }|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�!|j                  d|j	                  d«      «      nd}|�1|j                  d|j	                  d«      |j	                  d«      «      nd}| j                  ||||||||	|
¬«	      }|d   }|dd…df   }| j                  |«      } t        j                  «       |«      }| j                  |«      }|j                  d|«      }d}|�t        «       } |||«      }|
s|f|dd z   }|�|f|z   S |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   rd   rž  r   rŸ  )rj   rˆ  ÚshaperÜ   rK   r#   r¼  r   ÚReLUr²  r	   r   ré   rA  )r±   rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  Únum_choicesrù   Úhidden_stateÚpooled_outputr¡  Úreshaped_logitsr   r£  r  s                       r*   rq   zYosoForMultipleChoice.forward  sÿ  € ð2 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØ,5Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð —)‘)ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð ó 

ˆð ˜q‘zˆØ$¢Q¨ TÑ*ˆØ×+Ñ+¨MÓ:ˆØ!œŸ™›	 -Ó0ˆØ—‘ Ó/ˆà Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDáØ%Ð'¨'°!°"¨+Ñ5ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r2   r¤  )r{   r|   r}   rœ   r   rŽ  r�  r   r�  r   r‘  r   rM   r  r’  r   r   rq   r¾   r¿   s   @r*   rº  rº    s4  ø„ ôñ +Ð+@×+GÑ+GÐHrÓ+sÓtÙØ&Ø-Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø)-Ø,0Ø/3Ø&*ñB
à˜EŸL™LÑ)ðB
ð ! §¡Ñ.ðB
ð ! §¡Ñ.ð	B
ð
 ˜uŸ|™|Ñ,ðB
ð ˜EŸL™LÑ)ðB
ð   §¡Ñ-ðB
ð ˜Ÿ™Ñ&ðB
ð $ D™>ðB
ð ' t™nðB
ð ˜d‘^ðB
ð 
ˆuÐ/Ð/Ñ	0òB
óó uôB
r2   rº  z™YOSO Model with a token classification head on top (a linear layer on top of
    the hidden-states output) e.g. for Named-Entity-Recognition (NER) tasks.c                   óŠ  ‡ — e Zd Zˆ fd„Z eej                  d«      «       eee	e
¬«      	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     deej                     d	eej                     d
eej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )ÚYosoForTokenClassificationc                 ó,  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r4   )r›   rœ   r©  ru  r#   r   r¨   r©   rª   rÑ   rŸ   r²  rx  r°   s     €r*   rœ   z#YosoForTokenClassification.__init__m  si   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜fÓ%ˆŒ	Ü—z‘z &×"<Ñ"<Ó=ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr2   r‚  rƒ  rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  r  c                 óÄ  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }| j	                  |«      }d}|�Êt        «       }|�Œ|j                  d«      dk(  }|j                  d| j                  «      }t        j                  ||j                  d«      t        j                  |j                  «      j                  |«      «      } |||«      }n2 ||j                  d| j                  «      |j                  d«      «      }|
s|f|dd z   }|�|f|z   S |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Ÿ  )rj   rˆ  r#   rª   r²  r	   rÜ   r©  rM   Úwherer=   Úignore_indexÚtype_asr   ré   rA  )r±   rµ   rê   r˜   r”   rF  r¶   rœ  rë   rG  rH  rù   ra  r¡  r   r£  Úactive_lossÚactive_logitsÚactive_labelsr  s                       r*   rq   z"YosoForTokenClassification.forwardx  sk  € ð. &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHàÐ)Ø,×1Ñ1°"Ó5¸Ñ:�Ø &§¡¨B°·±Ó @�Ü %§¡Ø §¡¨R£´%·,±,¸x×?TÑ?TÓ2U×2]Ñ2]Ð^dÓ2eó!�ñ   ¨}Ó=‘á §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR�áØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r2   r¤  )r{   r|   r}   rœ   r   rŽ  r�  r   r�  r   r‘  r   rM   r  r’  r   r   rq   r¾   r¿   s   @r*   rÅ  rÅ  g  s'  ø„ ô	ñ +Ð+@×+GÑ+GÐHeÓ+fÓgÙØ&Ø)Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø)-Ø,0Ø/3Ø&*ñ;
à˜EŸL™LÑ)ð;
ð ! §¡Ñ.ð;
ð ! §¡Ñ.ð	;
ð
 ˜uŸ|™|Ñ,ð;
ð ˜EŸL™LÑ)ð;
ð   §¡Ñ-ð;
ð ˜Ÿ™Ñ&ð;
ð $ D™>ð;
ð ' t™nð;
ð ˜d‘^ð;
ð 
ˆuÐ+Ð+Ñ	,ò;
óó hô;
r2   rÅ  zÓYOSO Model with a span classification head on top for extractive question-answering tasks like SQuAD (a linear
    layers on top of the hidden-states output to compute `span start logits` and `span end logits`).c                   óª  ‡ — e Zd Zˆ fd„Z eej                  d«      «       eee	e
¬«      	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     deej                     d	eej                     d
eej                     deej                     dee   dee   dee   deee	f   fd„«       «       Zˆ xZS )ÚYosoForQuestionAnsweringc                 óò   •— t         ‰| �  |«       d|_        |j                  | _        t        |«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y )Nr@   )
r›   rœ   r©  ru  r#   r   rÑ   rŸ   Ú
qa_outputsrx  r°   s     €r*   rœ   z!YosoForQuestionAnswering.__init__Â  s[   ø€ Ü‰Ñ˜Ô àˆÔØ ×+Ñ+ˆŒä˜fÓ%ˆŒ	ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr2   r‚  rƒ  rµ   rê   r˜   r”   rF  r¶   Ústart_positionsÚend_positionsrë   rG  rH  r  c                 óð  — |�|n| j                   j                  }| j                  |||||||	|
|¬«	      }|d   }| j                  |«      }|j	                  dd¬«      \  }}|j                  d«      }|j                  d«      }d}|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   dz  }|s||f|dd z   }|�|f|z   S |S t        ||||j                  |j                  ¬	«      S )
a  
        start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the start of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the end of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        Nrž  r   r   rA   rI   )rÉ  r@   )r   Ústart_logitsÚ
end_logitsré   rA  )rj   rˆ  r#   rÑ  Úsplitr¸  rJ   rK   Úclampr	   r   ré   rA  )r±   rµ   rê   r˜   r”   rF  r¶   rÒ  rÓ  rë   rG  rH  rù   ra  r¡  rÕ  rÖ  Ú
total_lossÚignored_indexr£  Ú
start_lossÚend_lossr  s                          r*   rq   z YosoForQuestionAnswering.forwardÎ  s°  € ð< &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#ð ó 

ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/ˆØ×'Ñ'¨Ó+ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJáØ" JÐ/°'¸!¸"°+Ñ=ˆFØ/9Ð/E�Z�M FÑ*ÐQÈ6ÐQä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r2   )NNNNNNNNNNN)r{   r|   r}   rœ   r   rŽ  r�  r   r�  r   r‘  r   rM   r  r’  r   r   rq   r¾   r¿   s   @r*   rÏ  rÏ  ¼  sK  ø„ ô
ñ +Ð+@×+GÑ+GÐHeÓ+fÓgÙØ&Ø0Ø$ôð -1Ø15Ø15Ø/3Ø,0Ø04Ø26Ø04Ø,0Ø/3Ø&*ñH
à˜EŸL™LÑ)ðH
ð ! §¡Ñ.ðH
ð ! §¡Ñ.ð	H
ð
 ˜uŸ|™|Ñ,ðH
ð ˜EŸL™LÑ)ðH
ð   §¡Ñ-ðH
ð " %§,¡,Ñ/ðH
ð   §¡Ñ-ðH
ð $ D™>ðH
ð ' t™nðH
ð ˜d‘^ðH
ð 
ˆuÐ2Ð2Ñ	3òH
óó hôH
r2   rÏ  )r”  rº  rÏ  r°  rÅ  r%  ru  re  )Lr½   rg   Úpathlibr   Útypingr   r   r   rM   Útorch.utils.checkpointr   Útorch.nnr   r	   r
   Úactivationsr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   Úpytorch_utilsr   r   r   Úutilsr   r   r   r   r   r   Úconfiguration_yosor   Ú
get_loggerr{   rÍ   r�  r‘  r/   r1   r>   rE   r_   ÚautogradÚFunctionra   r�   ÚModuler�   rÁ   rü   r
  r  r!  r%  r4  rO  rT  r^  re  ÚYOSO_START_DOCSTRINGrŽ  ru  r”  r§  r°  rº  rÅ  rÏ  Ú__all__r   r2   r*   ú<module>rí     s°  ðñ ã Ý ß )Ñ )ã Û Ý ß AÑ Aå !÷÷ õ .ß lÑ l÷÷ õ +ð 
ˆ×	Ñ	˜HÓ	%€à,Ð Ø€ð €ò1òòCò.ô&B�U—^‘^×,Ñ,ô Bô>VB˜Ÿ™×/Ñ/ô VBôt9�R—Y‘Yô 9ôxJ˜Ÿ	™	ô Jô\�R—Y‘Yô ô�B—I‘Iô ôB�r—y‘yô ô �—‘ô ô�—	‘	ô ô:.
�"—)‘)ô .
ôd "§)¡)ô ô$˜2Ÿ9™9ô ô0!�b—i‘iô !ô*˜/ô *ð6	Ð ð/Ð ñd ØdØóôh
Ð#ó h
ó	ðh
ñV ÐNÐPdÓeôK
Ð)ó K
ó fðK
ô\˜RŸY™Yô ñ* ð/àóô
S
Ð$7ó S
óð
S
ñl ðHàóô
S
Ð/ó S
óð
S
ñl ðPàóô
M
Ð!4ó M
óð
M
ñ` ðhàóô
[
Ð2ó [
óð
[
ò|	�r2   