§
    ‚ŠtjÇ|  ã                   óü  — d Z ddlmZ ddlmZ ddlZddlmZ ddlmZ ddl	m
Z dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddl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" ddl#m$Z$ ddl%m&Z& ddl'm(Z(  e!j)        e*¦  «        Z+ G d„ dej,        ¦  «        Z-	 d@dej,        dej.        dej.        dej.        dej.        dz  de/de/fd„Z0 G d „ d!ej,        ¦  «        Z1 G d"„ d#ej,        ¦  «        Z2 G d$„ d%ej,        ¦  «        Z3 G d&„ d'ej,        ¦  «        Z4 G d(„ d)ej,        ¦  «        Z5 G d*„ d+e¦  «        Z6 G d,„ d-ej,        ¦  «        Z7e G d.„ d/e¦  «        ¦   «         Z8e G d0„ d1e8¦  «        ¦   «         Z9 G d2„ d3ej,        ¦  «        Z: G d4„ d5ej,        ¦  «        Z;e G d6„ d7e8¦  «        ¦   «         Z< ed8¬9¦  «        e G d:„ d;e¦  «        ¦   «         ¦   «         Z= ed<¬9¦  «         G d=„ d>e8¦  «        ¦   «         Z>g d?¢Z?dS )AzPyTorch Splinter model.é    )ÚCallable)Ú	dataclassN)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚModelOutputÚQuestionAnsweringModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚSplinterConfigc                   óˆ   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 d
dej        dz  dej        dz  dej        dz  dej        dz  def
d	„Z	ˆ xZ
S )ÚSplinterEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó8  •— t          ¦   «                              ¦   «          t          j        |j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¦  «        | _	        t          j        |j
        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j        ¦  «        | _        |                      dt%          j        |j        ¦  «                             d¦  «        d¬¦  «         d S )N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistent)Ú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_bufferÚtorchÚarangeÚexpand©ÚselfÚconfigÚ	__class__s     €úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/splinter/modeling_splinter.pyr'   zSplinterEmbeddings.__init__+   sî   ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    NÚ	input_idsÚtoken_type_idsr"   Úinputs_embedsÚreturnc                 óê  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|€| j        d d …d |…f         }|€+t          j        |t          j        | j        j        ¬¦  «        }|€|                      |¦  «        }|                      |¦  «        }||z   }|                      |¦  «        }	||	z  }|  	                    |¦  «        }|  
                    |¦  «        }|S )Nr$   r   ©ÚdtypeÚdevice)Úsizer"   r7   ÚzerosÚlongrG   r,   r0   r.   r1   r5   )
r;   r@   rA   r"   rB   Úinput_shapeÚ
seq_lengthr0   Ú
embeddingsr.   s
             r>   ÚforwardzSplinterEmbeddings.forward9   s   € ð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ!Ý"œ[¨½E¼JÈtÔO`ÔOgÐhÑhÔhˆNàÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ)Ñ)ˆ
à—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐr?   )NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r7   Ú
LongTensorÚFloatTensorÚtuplerN   Ú__classcell__©r=   s   @r>   r   r   (   sµ   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð  .2Ø26Ø04Ø26ðð àÔ# dÑ*ðð Ô(¨4Ñ/ðð Ô&¨Ñ-ð	ð
 Ô(¨4Ñ/ðð 
ðð ð ð ð ð ð ð r?   r   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingr5   c                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Né   r   r$   )ÚdimrF   )ÚpÚtrainingr   )r7   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32ÚtorF   r5   rc   Ú
contiguous)
rY   rZ   r[   r\   r]   r^   r5   ÚkwargsÚattn_weightsÚattn_outputs
             r>   Úeager_attention_forwardrn   [   sÃ   € õ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KØ˜Ð$Ð$r?   c                   óŠ   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         de	ej        ej        dz  f         fd„Z
ˆ xZS )	ÚSplinterSelfAttentionc                 ó¨  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        | j	        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        | j        dz  | _        d S )Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)g      à¿)r&   r'   r*   Únum_attention_headsÚhasattrÚ
ValueErrorr<   ÚintÚattention_head_sizeÚall_head_sizer   ÚLinearrZ   r[   r\   r3   Úattention_probs_dropout_probr5   Úattention_dropoutr^   r:   s     €r>   r'   zSplinterSelfAttention.__init__s   s:  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð8 FÔ$6ð 8ð 8Ø Ô4ð8ð 8ð 8ñô ð ð
 ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
å”z &Ô"EÑFÔFˆŒØ!'Ô!DˆÔØÔ/°Ñ5ˆŒˆˆr?   NÚhidden_statesr]   rk   rC   c                 ó‚  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|
|fS )Nr$   r   r`   rX   )r5   r^   )Úshaperx   rZ   Úviewre   r[   r\   r   Úget_interfacer<   Ú_attn_implementationrn   rc   r|   r^   Úreshaperj   )r;   r}   r]   rk   rK   Úhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerm   rl   s               r>   rN   zSplinterSelfAttention.forwardˆ   sf  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆà—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆØ—X’X˜mÑ,Ô,×1Ò1°,Ñ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø—z’z -Ñ0Ô0×5Ò5°lÑCÔC×MÒMÈaÐQRÑSÔSˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(r?   ©N)rO   rP   rQ   r'   r7   ÚTensorrT   r   r   rU   rN   rV   rW   s   @r>   rp   rp   r   sŸ   ø€ € € € € ð6ð 6ð 6ð 6ð 6ð0 48ð)ð )à”|ð)ð Ô)¨DÑ0ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )r?   rp   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚSplinterSelfOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr    )r&   r'   r   rz   r*   Údenser1   r2   r3   r4   r5   r:   s     €r>   r'   zSplinterSelfOutput.__init__ª   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr?   r}   Úinput_tensorrC   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r‰   ©r�   r5   r1   ©r;   r}   r�   s      r>   rN   zSplinterSelfOutput.forward°   ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐr?   ©rO   rP   rQ   r'   r7   rŠ   rN   rV   rW   s   @r>   rŒ   rŒ   ©   ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r?   rŒ   c            	       ój   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         dej        fd„Z	ˆ xZ
S )	ÚSplinterAttentionc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r‰   )r&   r'   rp   r;   rŒ   Úoutputr:   s     €r>   r'   zSplinterAttention.__init__¹   s;   ø€ Ý‰Œ×ÒÑÔÐÝ)¨&Ñ1Ô1ˆŒ	Ý(¨Ñ0Ô0ˆŒˆˆr?   Nr}   r]   rk   rC   c                 ó\   — |} | j         |fd|i|¤Ž\  }}|                      ||¦  «        }|S ©Nr]   )r;   rš   )r;   r}   r]   rk   ÚresidualÚ_s         r>   rN   zSplinterAttention.forward¾   sV   € ð !ˆØ$˜4œ9Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qð
 Ÿš M°8Ñ<Ô<ˆØÐr?   r‰   )rO   rP   rQ   r'   r7   rŠ   rT   r   r   rN   rV   rW   s   @r>   r˜   r˜   ¸   sŽ   ø€ € € € € ð1ð 1ð 1ð 1ð 1ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r?   r˜   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSplinterIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r‰   )r&   r'   r   rz   r*   Úintermediate_sizer�   Ú
isinstanceÚ
hidden_actÚstrr	   Úintermediate_act_fnr:   s     €r>   r'   zSplinterIntermediate.__init__Ð   sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r?   r}   rC   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r‰   )r�   r¦   )r;   r}   s     r>   rN   zSplinterIntermediate.forwardØ   s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr?   r•   rW   s   @r>   r    r    Ï   s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r?   r    c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚSplinterOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S rŽ   )r&   r'   r   rz   r¢   r*   r�   r1   r2   r3   r4   r5   r:   s     €r>   r'   zSplinterOutput.__init__à   sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr?   r}   r�   rC   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r‰   r’   r“   s      r>   rN   zSplinterOutput.forwardæ   r”   r?   r•   rW   s   @r>   r©   r©   ß   r–   r?   r©   c            	       óp   ‡ — e Zd Zˆ fd„Z	 d	dej        dej        dz  dee         dej        fd„Z	d„ Z
ˆ xZS )
ÚSplinterLayerc                 óæ   •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        d S )Nr   )
r&   r'   Úchunk_size_feed_forwardÚseq_len_dimr˜   Ú	attentionr    Úintermediater©   rš   r:   s     €r>   r'   zSplinterLayer.__init__ï   s^   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ*¨6Ñ2Ô2ˆŒÝ0°Ñ8Ô8ˆÔÝ$ VÑ,Ô,ˆŒˆˆr?   Nr}   r]   rk   rC   c                 óh   —  | j         |fd|i|¤Ž}t          | j        | j        | j        |¦  «        }|S rœ   )r±   r   Úfeed_forward_chunkr¯   r°   )r;   r}   r]   rk   s       r>   rN   zSplinterLayer.forward÷   s]   € ð '˜œØð
ð 
à)ð
ð ð
ð 
ˆõ 2ØÔ# TÔ%AÀ4ÔCSÐUbñ
ô 
ˆð Ðr?   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r‰   )r²   rš   )r;   Úattention_outputÚintermediate_outputÚlayer_outputs       r>   r´   z SplinterLayer.feed_forward_chunk	  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐr?   r‰   )rO   rP   rQ   r'   r7   rŠ   rT   r   r   rN   r´   rV   rW   s   @r>   r­   r­   î   s�   ø€ € € € € ð-ð -ð -ð -ð -ð 48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð$ð ð ð ð ð ð r?   r­   c            	       ó`   ‡ — e Zd Zˆ fd„Z	 ddej        dej        dz  dee         de	fd„Z
ˆ xZS )	ÚSplinterEncoderc                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r­   )Ú.0Úir<   s     €r>   ú
<listcomp>z,SplinterEncoder.__init__.<locals>.<listcomp>  s!   ø€ Ð#cÐ#cÐ#c¸a¥M°&Ñ$9Ô$9Ð#cÐ#cÐ#cr?   F)	r&   r'   r<   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerÚgradient_checkpointingr:   s    `€r>   r'   zSplinterEncoder.__init__  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#cÐ#cÐ#cÐ#cÅ5ÈÔIaÑCbÔCbÐ#cÑ#cÔ#cÑdÔdˆŒ
Ø&+ˆÔ#Ð#Ð#r?   Nr}   r]   rk   rC   c                 óJ   — | j         D ]} |||fi |¤Ž}Œt          |¬¦  «        S )N©Úlast_hidden_state)rÄ   r   )r;   r}   r]   rk   Úlayer_modules        r>   rN   zSplinterEncoder.forward  sY   € ð !œJð 	ð 	ˆLØ(˜LØØðð ð ðð ˆMˆMõ Ø+ð
ñ 
ô 
ð 	
r?   r‰   )rO   rP   rQ   r'   r7   rŠ   rT   r   r   r   rN   rV   rW   s   @r>   rº   rº     sŒ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð 48ð
ð 
à”|ð
ð Ô)¨DÑ0ð
ð Ð+Ô,ð	
ð
 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r?   rº   c                   ó<   ‡ — e Zd ZU eed<   dZdZeedœZ	ˆ fd„Z
ˆ xZS )ÚSplinterPreTrainedModelr<   ÚsplinterT)r}   Ú
attentionsc                 ó  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rQt	          j        |j        t          j        |j        j	        d         ¦  «         
                    d¦  «        ¦  «         d S d S )Nr$   r#   )r&   Ú_init_weightsr£   r   ÚinitÚcopy_r"   r7   r8   r   r9   )r;   rY   r=   s     €r>   rÏ   z%SplinterPreTrainedModel._init_weights3  s{   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ0Ñ1Ô1ð 	iÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhð	ið 	ir?   )rO   rP   rQ   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingr­   rp   Ú_can_record_outputsrÏ   rV   rW   s   @r>   rË   rË   )  sn   ø€ € € € € € àÐÐÑØ"ÐØ&*Ð#à&Ø+ðð Ðð
ið ið ið ið ið ið ið ið ir?   rË   c                   óð   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zee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e         deez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚSplinterModela2  
    The model is an encoder (with only self-attention) following the architecture described in [Attention is all you
    need](https://huggingface.co/papers/1706.03762) by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones,
    Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin.
    c                 óÐ   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r‰   )r&   r'   r<   r   rM   rº   ÚencoderÚ	post_initr:   s     €r>   r'   zSplinterModel.__init__A  sX   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒð 	�ŠÑÔÐÐÐr?   c                 ó   — | j         j        S r‰   ©rM   r,   )r;   s    r>   Úget_input_embeddingsz"SplinterModel.get_input_embeddingsK  s   € ØŒÔ.Ð.r?   c                 ó   — || j         _        d S r‰   rÜ   )r;   r\   s     r>   Úset_input_embeddingsz"SplinterModel.set_input_embeddingsN  s   € Ø*/ˆŒÔ'Ð'Ð'r?   Nr@   r]   rA   r"   rB   rk   rC   c                 ó2  — |�|�t          d¦  «        ‚|�+|                      ||¦  «         |                     ¦   «         }n.|�|                     ¦   «         dd…         }nt          d¦  «        ‚|\  }}	|�|j        n|j        }
|€t	          j        ||	f|
¬¦  «        }|€!t	          j        |t          j        |
¬¦  «        }|                      ||||¬¦  «        }t          | j
        ||¬¦  «        } | j        |fd	|i|¤Ž}|d
         }t          |¬¦  «        S )aã  
        token_type_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

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

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

            [What are position IDs?](../glossary#position-ids)
        NzDYou cannot specify both input_ids and inputs_embeds at the same timer$   z5You have to specify either input_ids or inputs_embeds©rG   rE   )r@   r"   rA   rB   )r<   rB   r]   r]   r   rÇ   )rv   Ú%warn_if_padding_and_no_attention_maskrH   rG   r7   ÚonesrI   rJ   rM   r
   r<   rÙ   r   )r;   r@   r]   rA   r"   rB   rk   rK   Ú
batch_sizerL   rG   Úembedding_outputÚencoder_outputsÚsequence_outputs                 r>   rN   zSplinterModel.forwardQ  ss  € ð6 Ð  ]Ð%>ÝÐcÑdÔdÐdØÐ"Ø×6Ò6°yÀ.ÑQÔQÐQØ#Ÿ.š.Ñ*Ô*ˆKˆKØÐ&Ø'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKˆKåÐTÑUÔUÐUà!,Ñˆ
�JØ%.Ð%:�Ô!Ð!ÀÔ@TˆàÐ!Ý"œZ¨*°jÐ)AÈ6ÐRÑRÔRˆNØÐ!Ý"œ[¨½E¼JÈvÐVÑVÔVˆNàŸ?š?ØØ%Ø)Ø'ð	 +ñ 
ô 
Ðõ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð '˜$œ,Øð
ð 
à)ð
ð ð
ð 
ˆð
 *¨!Ô,ˆåØ-ð
ñ 
ô 
ð 	
r?   )NNNNN)rO   rP   rQ   rR   r'   rÝ   rß   r   r   r   r7   rŠ   r   r   rU   r   rN   rV   rW   s   @r>   r×   r×   9  s-  ø€ € € € € ðð ðð ð ð ð ð/ð /ð /ð0ð 0ð 0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1ð@
ð @
à”< $Ñ&ð@
ð œ tÑ+ð@
ð œ tÑ+ð	@
ð
 ”l TÑ)ð@
ð ”| dÑ*ð@
ð Ð+Ô,ð@
ð 
�Ñ	 ð@
ð @
ð @
ñ „^ñ „_ñ  Ôð@
ð @
ð @
ð @
ð @
r?   r×   c                   óD   ‡ — e Zd Zdˆ fd„	Zdej        dej        fd„Zˆ xZS )ÚSplinterFullyConnectedLayerÚgeluc                 ó  •— t          ¦   «                              ¦   «          || _        || _        t	          j        | j        | j        ¦  «        | _        t          |         | _        t	          j	        | j        ¦  «        | _	        d S r‰   )
r&   r'   Ú	input_dimÚ
output_dimr   rz   r�   r	   Úact_fnr1   )r;   rì   rí   r¤   r=   s       €r>   r'   z$SplinterFullyConnectedLayer.__init__˜  sa   ø€ Ý‰Œ×ÒÑÔÐà"ˆŒØ$ˆŒå”Y˜tœ~¨t¬Ñ?Ô?ˆŒ
Ý˜ZÔ(ˆŒÝœ d¤oÑ6Ô6ˆŒˆˆr?   ÚinputsrC   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r‰   )r�   rî   r1   )r;   rï   r}   s      r>   rN   z#SplinterFullyConnectedLayer.forward¢  s;   € ØŸ
š
 6Ñ*Ô*ˆØŸš MÑ2Ô2ˆØŸš }Ñ5Ô5ˆØÐr?   )rê   r•   rW   s   @r>   ré   ré   —  sc   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð 7ð˜eœlð ¨u¬|ð ð ð ð ð ð ð ð r?   ré   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚQuestionAwareSpanSelectionHeadzf
    Implementation of Question-Aware Span Selection (QASS) head, described in Splinter's paper:

    c                 óØ  •— t          ¦   «                              ¦   «          t          |j        |j        ¦  «        | _        t          |j        |j        ¦  «        | _        t          |j        |j        ¦  «        | _        t          |j        |j        ¦  «        | _        t          j	        |j        |j        d¬¦  «        | _
        t          j	        |j        |j        d¬¦  «        | _        d S )NF)Úbias)r&   r'   ré   r*   Úquery_start_transformÚquery_end_transformÚstart_transformÚend_transformr   rz   Ústart_classifierÚend_classifierr:   s     €r>   r'   z'QuestionAwareSpanSelectionHead.__init__¯  sÁ   ø€ Ý‰Œ×ÒÑÔÐå%@ÀÔASÐU[ÔUgÑ%hÔ%hˆÔ"Ý#>¸vÔ?QÐSYÔSeÑ#fÔ#fˆÔ Ý:¸6Ô;MÈvÔOaÑbÔbˆÔÝ8¸Ô9KÈVÔM_Ñ`Ô`ˆÔå "¤	¨&Ô*<¸fÔ>PÐW\Ð ]Ñ ]Ô ]ˆÔÝ œi¨Ô(:¸FÔ<NÐUZÐ[Ñ[Ô[ˆÔÐÐr?   c                 óh  — |                      ¦   «         \  }}}|                     d¦  «                             dd|¦  «        }t          j        |d|¬¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }	|                      |¦  «        }
|  	                    |¦  «        }|	 
                    ddd¦  «        }	t          j        ||	¦  «        }|                      |¦  «        }|
 
                    ddd¦  «        }
t          j        ||
¦  «        }||fS )Nr$   r   )ra   Úindexr   r`   )rH   Ú	unsqueezeÚrepeatr7   Úgatherrõ   rö   r÷   rø   rù   Úpermuterd   rú   )r;   rï   Ú	positionsrž   ra   rü   Úgathered_repsÚquery_start_repsÚquery_end_repsÚ
start_repsÚend_repsr}   Ústart_logitsÚ
end_logitss                 r>   rN   z&QuestionAwareSpanSelectionHead.forwardº  s  € Ø—K’K‘M”M‰	ˆˆ1ˆcØ×#Ò# BÑ'Ô'×.Ò.¨q°!°SÑ9Ô9ˆÝœ V°¸%Ð@Ñ@Ô@ˆà×5Ò5°mÑDÔDÐØ×1Ò1°-Ñ@Ô@ˆØ×)Ò)¨&Ñ1Ô1ˆ
Ø×%Ò% fÑ-Ô-ˆà×-Ò-Ð.>Ñ?Ô?ˆØ×'Ò'¨¨1¨aÑ0Ô0ˆ
Ý”| M°:Ñ>Ô>ˆà×+Ò+¨NÑ;Ô;ˆØ×#Ò# A q¨!Ñ,Ô,ˆÝ”\ -°Ñ:Ô:ˆ
à˜ZÐ'Ð'r?   )rO   rP   rQ   rR   r'   rN   rV   rW   s   @r>   rò   rò   ©  sV   ø€ € € € € ðð ð
	\ð 	\ð 	\ð 	\ð 	\ð(ð (ð (ð (ð (ð (ð (r?   rò   c                   ó  ‡ — e Zd Zˆ fd„Ze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j        dz  d
ej        dz  de	e
         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚSplinterForQuestionAnsweringc                 óÚ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        | _        |                      ¦   «          d S r‰   ©r&   r'   r×   rÌ   rò   Úsplinter_qassÚquestion_token_idrÚ   r:   s     €r>   r'   z%SplinterForQuestionAnswering.__init__Ñ  ó]   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å% fÑ-Ô-ˆŒÝ;¸FÑCÔCˆÔØ!'Ô!9ˆÔð 	�ŠÑÔÐÐÐr?   Nr@   r]   rA   r"   rB   Ústart_positionsÚend_positionsÚquestion_positionsrk   rC   c	                 ó®  — d}
|€™|�At          j        t          j        || j        ¦  «                             ¦   «         d¬¦  «        }n?t          j        |                     d¦  «        t           j        |j        |j	        ¬¦  «        }| 
                    d¦  «        }d}
 | j        |f||||dœ|	¤Ž}|d         }|                      ||¦  «        \  }}|
r*|                     d	¦  «        |                     d	¦  «        }}|�N|d	|z
  t          j        |j        ¦  «        j        z  z   }|d	|z
  t          j        |j        ¦  «        j        z  z   }d}|�ç|�åt#          |                     ¦   «         ¦  «        d	k    r|                     d¦  «        }t#          |                     ¦   «         ¦  «        d	k    r|                     d¦  «        }|                     d	¦  «        }|                     d|¦  «         |                     d|¦  «         t'          |¬
¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t)          ||||j        |j        ¬¦  «        S )aÉ  
        token_type_ids (`torch.LongTensor` of shape `batch_size, sequence_length`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

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

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

            [What are position IDs?](../glossary#position-ids)
        question_positions (`torch.LongTensor` of shape `(batch_size, num_questions)`, *optional*):
            The positions of all question tokens. If given, start_logits and end_logits will be of shape `(batch_size,
            num_questions, sequence_length)`. If None, the first question token in each sequence in the batch will be
            the only one for which start_logits and end_logits are calculated and they will be of shape `(batch_size,
            sequence_length)`.
        FNr$   )ra   r   )rF   ÚlayoutrG   T©r]   rA   r"   rB   r   ©Úignore_indexr`   ©Úlossr  r  r}   rÍ   )r7   ÚargmaxÚeqr  rw   rI   rH   rJ   r  rG   rý   rÌ   r  ÚsqueezeÚfinforF   ÚminÚlenÚclamp_r   r   r}   rÍ   )r;   r@   r]   rA   r"   rB   r  r  r  rk   Úquestion_positions_were_noneÚ"question_position_for_each_exampleÚoutputsrç   r  r  Ú
total_lossÚignored_indexÚloss_fctÚ
start_lossÚend_losss                        r>   rN   z$SplinterForQuestionAnswering.forwardÛ  s   € ðD (-Ð$ØÐ%ØÐ$Ý5:´\Ý”X˜i¨Ô)?Ñ@Ô@×EÒEÑGÔGÈRð6ñ 6ô 6Ð2Ð2õ 6;´[Ø!×&Ò& qÑ)Ô)µ´ÀMÔDXÐanÔauð6ñ 6ô 6Ð2ð "D×!MÒ!MÈbÑ!QÔ!QÐØ+/Ð(à�$”-Øð
à)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆØ#'×#5Ò#5°oÐGYÑ#ZÔ#ZÑ ˆ�jà'ð 	VØ'3×';Ò';¸AÑ'>Ô'>À
×@RÒ@RÐSTÑ@UÔ@U˜*ˆLàÐ%Ø'¨1¨~Ñ+=ÅÄÈ\ÔM_ÑA`ÔA`ÔAdÑ*dÑdˆLØ# q¨>Ñ'9½U¼[ÈÔIYÑ=ZÔ=ZÔ=^Ñ&^Ñ^ˆJàˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ×"Ò" 1 mÑ4Ô4Ð4Ø× Ò   MÑ2Ô2Ð2å'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r?   ©NNNNNNNN)rO   rP   rQ   r'   r   r   r7   rŠ   rS   r   r   rU   r   rN   rV   rW   s   @r>   r
  r
  Ï  s>  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø37Ø15Ø6:ðW
ð W
à”< $Ñ&ðW
ð œ tÑ+ðW
ð œ tÑ+ð	W
ð
 ”l TÑ)ðW
ð ”| dÑ*ðW
ð Ô)¨DÑ0ðW
ð Ô'¨$Ñ.ðW
ð "Ô,¨tÑ3ðW
ð Ð+Ô,ðW
ð 
Ð-Ñ	-ðW
ð W
ð W
ñ „^ñ ÔðW
ð W
ð W
ð W
ð W
r?   r
  zB
    Class for outputs of Splinter as a span selection model.
    )Úcustom_introc                   óÂ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
eej                 dz  ed<   dZeej                 dz  ed<   dS )ÚSplinterForPreTrainingOutputaë  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when start and end positions are provided):
        Total span extraction loss is the sum of a Cross-Entropy for the start and end positions.
    start_logits (`torch.FloatTensor` of shape `(batch_size, num_questions, sequence_length)`):
        Span-start scores (before SoftMax).
    end_logits (`torch.FloatTensor` of shape `(batch_size, num_questions, sequence_length)`):
        Span-end scores (before SoftMax).
    Nr  r  r  r}   rÍ   )rO   rP   rQ   rR   r  r7   rT   rÒ   r  r  r}   rU   rÍ   r½   r?   r>   r,  r,  7  s    € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r?   r,  zý
    Splinter Model for the recurring span selection task as done during the pretraining. The difference to the QA task
    is that we do not have a question, but multiple question tokens that replace the occurrences of recurring spans
    instead.
    c                   ó6  ‡ — e Zd Zˆ fd„Ze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j        dz  d
ej        dz  de	e
         deez  fd„¦   «         ¦   «         Zdej        dej        fd„Zˆ xZS )ÚSplinterForPreTrainingc                 óÚ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        | _        |                      ¦   «          d S r‰   r  r:   s     €r>   r'   zSplinterForPreTraining.__init__V  r  r?   Nr@   r]   rA   r"   rB   r  r  r  rk   rC   c	                 óB  — |€|�|�t          d¦  «        ‚|€|€t          d¦  «        ‚|€|                      |¦  «        } | j        |f||||dœ|	¤Ž}
|
d         }|                     ¦   «         \  }}}|                      ||¦  «        \  }}|                     d¦  «        }|�x|                     d¦  «                             |||¦  «        }|d|z
  t          j        |j	        ¦  «        j
        z  z   }|d|z
  t          j        |j	        ¦  «        j
        z  z   }d}|�ä|�â|                     dt          d|dz
  ¦  «        ¦  «         |                     dt          d|dz
  ¦  «        ¦  «         t          | j        j        ¬¦  «        } ||                     ||z  |¦  «        |                     ||z  ¦  «        ¦  «        } ||                     ||z  |¦  «        |                     ||z  ¦  «        ¦  «        }||z   dz  }t#          ||||
j        |
j        ¬	¦  «        S )
a  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_questions, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

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

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

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

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

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_questions, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert *input_ids* indices into associated vectors than the
            model's internal embedding lookup matrix.
        start_positions (`torch.LongTensor` of shape `(batch_size, num_questions)`, *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, num_questions)`, *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.
        question_positions (`torch.LongTensor` of shape `(batch_size, num_questions)`, *optional*):
            The positions of all question tokens. If given, start_logits and end_logits will be of shape `(batch_size,
            num_questions, sequence_length)`. If None, the first question token in each sequence in the batch will be
            the only one for which start_logits and end_logits are calculated and they will be of shape `(batch_size,
            sequence_length)`.
        NzCquestion_positions must be specified in order to calculate the lossz?question_positions must be specified when inputs_embeds is usedr  r   r   r  r`   r  )Ú	TypeErrorÚ_prepare_question_positionsrÌ   rH   r  rý   r9   r7   r  rF   r  r   Úmaxr   r<   r+   r€   r,  r}   rÍ   )r;   r@   r]   rA   r"   rB   r  r  r  rk   r#  rç   rä   Úsequence_lengthra   r  r  Únum_questionsÚ attention_mask_for_each_questionr$  r&  r'  r(  s                          r>   rN   zSplinterForPreTraining.forward`  sŒ  € ðj Ð%¨/Ð*EÈ-ÐJcÝÐaÑbÔbÐbàÐ'¨IÐ,=ÝÐ]Ñ^Ô^Ð^àÐ'Ø!%×!AÒ!AÀ)Ñ!LÔ!LÐà�$”-Øð
à)Ø)Ø%Ø'ð
ð 
ð ð
ð 
ˆð " !œ*ˆØ+:×+?Ò+?Ñ+AÔ+AÑ(ˆ
�O Sà#'×#5Ò#5°oÐGYÑ#ZÔ#ZÑ ˆ�jà*×/Ò/°Ñ2Ô2ˆØÐ%Ø/=×/GÒ/GÈÑ/JÔ/J×/QÒ/QØ˜M¨?ñ0ô 0Ð,ð (¨1Ð/OÑ+OÕSXÔS^Ð_kÔ_qÑSrÔSrÔSvÑ*vÑvˆLØ# qÐ+KÑ'KÍuÌ{Ð[eÔ[kÑOlÔOlÔOpÑ&pÑpˆJàˆ
àÐ&¨=Ð+Dà×"Ò" 1¥c¨!¨_¸qÑ-@Ñ&AÔ&AÑBÔBÐBØ× Ò  ¥C¨¨?¸QÑ+>Ñ$?Ô$?Ñ@Ô@Ð@õ (°T´[Ô5MÐNÑNÔNˆHØ!˜Ø×!Ò! *¨}Ñ"<¸oÑNÔNØ×$Ò$ Z°-Ñ%?Ñ@Ô@ñô ˆJð  �xØ—’ 
¨]Ñ :¸OÑLÔLØ×"Ò" :°Ñ#=Ñ>Ô>ñô ˆHð % xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r?   c                 ó:  — t          j        || j        j        k    ¦  «        \  }}t          j        |¦  «        }t          |                     d¦  «        |                     d¦  «        k    d¦  «         t          j        ||d¬¦  «        }t          j        |                     d¦  «        |j	        ¬¦  «        |z
  }t          j
        |                     d¦  «        |                     ¦   «         f| j        j        t           j        |j	        ¬¦  «        }||||f<   |S )Nr   z?All samples in the batch must have at least one question token.Úleft)Úsiderá   rE   )r7   Úwherer<   r  Úbincountr   rH   Úsearchsortedr8   rG   Úfullr3  r+   rJ   )r;   r@   ÚrowsÚflat_positionsr5  Ú	first_idxÚcolsr  s           r>   r2  z2SplinterForPreTraining._prepare_question_positionsÒ  s  € Ý$œ{¨9¸¼Ô8UÒ+UÑVÔVÑˆˆnÝœ tÑ,Ô,ˆÝØ×Ò˜qÑ!Ô! Y§^¢^°AÑ%6Ô%6Ò6ØMñ	
ô 	
ð 	
õ
 Ô& t¨T¸Ð?Ñ?Ô?ˆ	ÝŒ|˜DŸIšI a™LœL°´Ð=Ñ=Ô=À	ÑIˆÝ”JØ�^Š^˜AÑÔ × 1Ò 1Ñ 3Ô 3Ð4ØŒKÔ$Ý”*ØÔ#ð	
ñ 
ô 
ˆ	ð !/ˆ	�$˜�*ÑØÐr?   r)  )rO   rP   rQ   r'   r   r   r7   rŠ   rS   r   r   rU   r,  rN   r2  rV   rW   s   @r>   r.  r.  N  sa  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø37Ø15Ø6:ðn
ð n
à”< $Ñ&ðn
ð œ tÑ+ðn
ð œ tÑ+ð	n
ð
 ”l TÑ)ðn
ð ”| dÑ*ðn
ð Ô)¨DÑ0ðn
ð Ô'¨$Ñ.ðn
ð "Ô,¨tÑ3ðn
ð Ð+Ô,ðn
ð 
Ð-Ñ	-ðn
ð n
ð n
ñ „^ñ Ôðn
ð`°U´\ð ÀeÄlð ð ð ð ð ð ð ð r?   r.  )r
  r.  r­   r×   rË   )rX   )@rR   Úcollections.abcr   Údataclassesr   r7   r   Útorch.nnr   Ú r   rÐ   Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_splinterr   Ú
get_loggerrO   ÚloggerÚModuler   rŠ   Úfloatrn   rp   rŒ   r˜   r    r©   r­   rº   rË   r×   ré   rò   r
  r,  r.  Ú__all__r½   r?   r>   ú<module>rV     s%  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð/ð /ð /ð /ð /˜œñ /ô /ð /ðt ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.3)ð 3)ð 3)ð 3)ð 3)˜BœIñ 3)ô 3)ð 3)ðnð ð ð ð ˜œñ ô ð ðð ð ð ð ˜œ	ñ ô ð ð.ð ð ð ð ˜2œ9ñ ô ð ð ð ð ð ð �R”Yñ ô ð ðð ð ð ð Ð.ñ ô ð ðD
ð 
ð 
ð 
ð 
�b”iñ 
ô 
ð 
ð2 ðið ið ið ið i˜oñ iô iñ „ðið ðZ
ð Z
ð Z
ð Z
ð Z
Ð+ñ Z
ô Z
ñ „ðZ
ðzð ð ð ð  "¤)ñ ô ð ð$#(ð #(ð #(ð #(ð #( R¤Yñ #(ô #(ð #(ðL ðd
ð d
ð d
ð d
ð d
Ð#:ñ d
ô d
ñ „ðd
ðN €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ;ñ 7ô 7ñ „ñô ð7ð" €ððñ ô ðNð Nð Nð Nð NÐ4ñ Nô Nñô ðNðbð ð €€€r?   