Ë
    S^(ht  ã                   óÞ   — d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	  e	j                  e«      Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zy)a·  
Very heavily inspired by the official evaluation script for SQuAD version 2.0 which was modified by XLNet authors to
update `find_best_threshold` scripts for SQuAD V2.0

In addition to basic functionality, we also compute additional statistics and plot precision-recall curves if an
additional na_prob.json file is provided. This file is expected to map question ID's to the model's predicted
probability that a question is unanswerable.
é    Né   )ÚBasicTokenizer)Úloggingc           	      óN   — d„ }d„ }d„ }d„ } | | | || «      «      «      «      S )zALower text and remove punctuation, articles and extra whitespace.c                 óx   — t        j                  dt         j                  «      }t        j                  |d| «      S )Nz\b(a|an|the)\bú )ÚreÚcompileÚUNICODEÚsub)ÚtextÚregexs     úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/data/metrics/squad_metrics.pyÚremove_articlesz)normalize_answer.<locals>.remove_articles'   s*   € Ü—
‘
Ð,¬b¯j©jÓ9ˆÜ�v‰v�e˜S $Ó'Ð'ó    c                 ó@   — dj                  | j                  «       «      S )Nr   )ÚjoinÚsplit©r   s    r   Úwhite_space_fixz)normalize_answer.<locals>.white_space_fix+   s   € Ø�x‰x˜Ÿ
™
›Ó%Ð%r   c                 ój   ‡— t        t        j                  «      Šdj                  ˆfd„| D «       «      S )NÚ c              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­w©N© )Ú.0ÚchÚexcludes     €r   ú	<genexpr>z8normalize_answer.<locals>.remove_punc.<locals>.<genexpr>0   s   øè ø€ Ò>˜b¨B°gÒ,=”rÑ>ùs   ƒ	�)ÚsetÚstringÚpunctuationr   )r   r   s    @r   Úremove_puncz%normalize_answer.<locals>.remove_punc.   s(   ø€ Ü”f×(Ñ(Ó)ˆØ�w‰wÓ> DÔ>Ó>Ð>r   c                 ó"   — | j                  «       S r   )Úlowerr   s    r   r%   znormalize_answer.<locals>.lower2   s   € Ø�z‰z‹|Ðr   r   )Úsr   r   r#   r%   s        r   Únormalize_answerr'   $   s1   € ò(ò&ò?òñ ™?©;±u¸Q³xÓ+@ÓAÓBÐBr   c                 ó<   — | sg S t        | «      j                  «       S r   )r'   r   )r&   s    r   Ú
get_tokensr)   8   s   € ÙØˆ	Ü˜AÓ×$Ñ$Ó&Ð&r   c                 óB   — t        t        | «      t        |«      k(  «      S r   )Úintr'   )Úa_goldÚa_preds     r   Úcompute_exactr.   >   s   € ÜÔ Ó'Ô+;¸FÓ+CÑCÓDÐDr   c                 óz  — t        | «      }t        |«      }t        j                  |«      t        j                  |«      z  }t        |j	                  «       «      }t        |«      dk(  st        |«      dk(  rt        ||k(  «      S |dk(  ryd|z  t        |«      z  }d|z  t        |«      z  }d|z  |z  ||z   z  }|S )Nr   ç      ð?é   )r)   ÚcollectionsÚCounterÚsumÚvaluesÚlenr+   )	r,   r-   Ú	gold_toksÚ	pred_toksÚcommonÚnum_sameÚ	precisionÚrecallÚf1s	            r   Ú
compute_f1r>   B   s¸   € Ü˜6Ó"€IÜ˜6Ó"€IÜ× Ñ  Ó+¬k×.AÑ.AÀ)Ó.LÑL€FÜ�6—=‘=“?Ó#€HÜ
ˆ9ƒ~˜Òœc )›n°Ò1ä�9 	Ñ)Ó*Ð*Ø�1‚}ØØ�h‘¤ Y£Ñ/€IØ�8‰^œc )›nÑ,€FØ
ˆi‰-˜&Ñ
  Y°Ñ%7Ñ	8€BØ€Ir   c                 ó0  ‡— i }i }| D ]„  }|j                   }|j                  D �cg c]  }t        |d   «      sŒ|d   ‘Œ }}|sdg}||vrt        d|› �«       ŒR||   Št	        ˆfd„|D «       «      ||<   t	        ˆfd„|D «       «      ||<   Œ† ||fS c c}w )zV
    Computes the exact and f1 scores from the examples and the model predictions
    r   r   zMissing prediction for c              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr   )r.   ©r   ÚaÚ
predictions     €r   r   z!get_raw_scores.<locals>.<genexpr>f   s   øè ø€ Ò"VÀA¤=°°J×#?Ñ"Vùó   ƒc              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr   )r>   rA   s     €r   r   z!get_raw_scores.<locals>.<genexpr>g   s   øè ø€ ÒP¸a¤
¨1¨j× 9ÑPùrD   )Úqas_idÚanswersr'   ÚprintÚmax)	ÚexamplesÚpredsÚexact_scoresÚ	f1_scoresÚexamplerF   ÚanswerÚgold_answersrC   s	           @r   Úget_raw_scoresrQ   R   s¾   ø€ ð €LØ€Iàò QˆØ—‘ˆØ5<·_±_Öi¨6ÔHXÐY_Ð`fÑYgÕHh˜˜v›ÐiˆÐiáà˜4ˆLà˜ÑÜÐ+¨F¨8Ð4Ô5Øà˜6‘]ˆ
Ü"Ó"VÈÔ"VÓVˆ�VÑÜÓPÀ<ÔPÓPˆ	�&ÒðQð  ˜Ð"Ð"ùò js
   ¥B¹Bc                 ó~   — i }| j                  «       D ]'  \  }}||   |kD  }|rt        ||    «      ||<   Œ#|||<   Œ) |S r   )ÚitemsÚfloat)ÚscoresÚna_probsÚqid_to_has_ansÚna_prob_threshÚ
new_scoresÚqidr&   Úpred_nas           r   Úapply_no_ans_thresholdr\   l   sX   € Ø€JØ—,‘,“.ò  ‰ˆˆQØ˜3‘- .Ñ0ˆÙÜ#¨°sÑ(;Ð$;Ó<ˆJ�sŠOàˆJ�sŠOð ð Ðr   c           	      ó‚  ‡ ‡— |sct        ‰ «      }t        j                  ddt        ‰ j	                  «       «      z  |z  fddt        ‰j	                  «       «      z  |z  fd|fg«      S t        |«      }t        j                  ddt        ˆ fd„|D «       «      z  |z  fddt        ˆfd„|D «       «      z  |z  fd|fg«      S )NÚexactç      Y@r=   Útotalc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   )r   ÚkrL   s     €r   r   z!make_eval_dict.<locals>.<genexpr>…   s   øè ø€ Ò%H¸! l°1¥oÑ%Hùó   ƒc              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wr   r   )r   rb   rM   s     €r   r   z!make_eval_dict.<locals>.<genexpr>†   s   øè ø€ Ò"B°A 9¨Q¥<Ñ"Bùrc   )r6   r2   ÚOrderedDictr4   r5   )rL   rM   Úqid_listr`   s   ``  r   Úmake_eval_dictrg   w   sÕ   ù€ ÙÜ�LÓ!ˆÜ×&Ñ&à˜%¤# l×&9Ñ&9Ó&;Ó"<Ñ<¸uÑDÐEØ�uœs 9×#3Ñ#3Ó#5Ó6Ñ6¸Ñ>Ð?Ø˜%Ð ðó
ð 	
ô �H“ˆÜ×&Ñ&à˜%¤#Ó%H¸xÔ%HÓ"HÑHÈ5ÑPÐQØ�uœsÓ"B¸Ô"BÓBÑBÀUÑJÐKØ˜%Ð ðó
ð 	
r   c                 ó,   — |D ]  }||   | |› d|› �<   Œ y )NÚ_r   )Ú	main_evalÚnew_evalÚprefixrb   s       r   Ú
merge_evalrm   Œ   s)   € Øò 1ˆØ%-¨a¡[ˆ	�V�H˜A˜a˜S�/Ò"ñ1r   c                 óT  ‡‡— t        ˆfd„‰D «       «      }|}|}d}t        ‰ˆfd„¬«      }t        |«      D ]1  \  }	}
|
|vrŒ‰|
   r||
   }n
| |
   rd}nd}||z  }||kD  sŒ+|}‰|
   }Œ3 d\  }}|D ]  }
‰|
   sŒ	|dz  }|
|vrŒ|||
   z  }Œ d	|z  t        |«      z  |d
|z  |z  fS )Nc              3   ó.   •K  — | ]  }‰|   rŒ	d –— Œ y­w©é   Nr   ©r   rb   rW   s     €r   r   z&find_best_thresh_v2.<locals>.<genexpr>’   ó   øè ø€ ÒH˜1°nÀQÓ6G”QÑHùó   ƒ
Žç        c                 ó   •— ‰|    S r   r   ©rb   rV   s    €r   ú<lambda>z%find_best_thresh_v2.<locals>.<lambda>–   ó   ø€ ¨h°q©k€ r   ©Úkeyéÿÿÿÿr   )r   r   rq   r_   r0   ©r4   ÚsortedÚ	enumerater6   )rK   rU   rV   rW   Ú
num_no_ansÚ	cur_scoreÚ
best_scoreÚbest_threshrf   ÚirZ   ÚdiffÚhas_ans_scoreÚhas_ans_cnts     ``          r   Úfind_best_thresh_v2rˆ   ‘   s  ù€ ÜÓH ÔHÓH€JØ€IØ€JØ€KÜ�hÓ$9Ô:€HÜ˜HÓ%ò (‰ˆˆ3Ø�fÑØØ˜#ÒØ˜#‘;‰Dà�SŠzØ‘à�Ø�TÑˆ	Ø�zÓ!Ø"ˆJØ" 3™-‰Kð(ð "&Ñ€M�;Øò %ˆØ˜cÒ"ØØ�qÑˆà�fÑØØ˜ ™Ñ$‰ð%ð �:Ñ¤ F£Ñ+¨[¸#ÀÑ:MÐP[Ñ:[Ð[Ð[r   c                 óˆ   — t        ||||«      \  }}}t        ||||«      \  }	}
}|| d<   || d<   |	| d<   |
| d<   || d<   || d<   y )NÚ
best_exactÚbest_exact_threshÚbest_f1Úbest_f1_threshÚhas_ans_exactÚ
has_ans_f1)rˆ   )rj   rK   Ú	exact_rawÚf1_rawrV   rW   rŠ   Úexact_threshrŽ   rŒ   Ú	f1_threshr�   s               r   Úfind_all_best_thresh_v2r”   ³   sq   € Ü.AÀ%ÈÐT\Ð^lÓ.mÑ+€J�˜mÜ%8¸ÀÈÐR`Ó%aÑ"€GˆY˜
Ø(€IˆlÑØ%1€IÐ!Ñ"Ø"€IˆiÑØ"+€IÐÑØ!.€IˆoÑØ(€IˆlÒr   c                 óþ   ‡‡— t        ˆfd„‰D «       «      }|}|}d}t        ‰ˆfd„¬«      }t        |«      D ]1  \  }	}
|
|vrŒ‰|
   r||
   }n
| |
   rd}nd}||z  }||kD  sŒ+|}‰|
   }Œ3 d|z  t        |«      z  |fS )Nc              3   ó.   •K  — | ]  }‰|   rŒ	d –— Œ y­wrp   r   rr   s     €r   r   z#find_best_thresh.<locals>.<genexpr>¿   rs   rt   ru   c                 ó   •— ‰|    S r   r   rw   s    €r   rx   z"find_best_thresh.<locals>.<lambda>Ã   ry   r   rz   r|   r   r_   r}   )rK   rU   rV   rW   r€   r�   r‚   rƒ   rf   ri   rZ   r…   s     ``        r   Úfind_best_threshr˜   ¾   s¯   ù€ ÜÓH ÔHÓH€JØ€IØ€JØ€KÜ�hÓ$9Ô:€HÜ˜HÓ%ò (‰ˆˆ3Ø�fÑØØ˜#ÒØ˜#‘;‰Dà�SŠzØ‘à�Ø�TÑˆ	Ø�zÓ!Ø"ˆJØ" 3™-‰Kð(ð �:Ñ¤ F£Ñ+¨[Ð8Ð8r   c                 óp   — t        ||||«      \  }}t        ||||«      \  }}	|| d<   || d<   || d<   |	| d<   y )NrŠ   r‹   rŒ   r�   )r˜   )
rj   rK   r�   r‘   rV   rW   rŠ   r’   rŒ   r“   s
             r   Úfind_all_best_threshrš   Õ   sV   € Ü/°°yÀ(ÈNÓ[Ñ€J�Ü)¨%°¸À>ÓRÑ€GˆYà(€IˆlÑØ%1€IÐ!Ñ"Ø"€IˆiÑØ"+€IÐÒr   c                 óL  — | D �ci c]"  }|j                   t        |j                  «      “Œ$ }}|j                  «       D ��cg c]
  \  }}|sŒ	|‘Œ }}}|j                  «       D ��cg c]
  \  }}|rŒ	|‘Œ }	}}|€t        j                  |d«      }t        | |«      \  }
}t        |
|||«      }t        ||||«      }t        ||«      }|rt        |||¬«      }t        ||d«       |	rt        |||	¬«      }t        ||d«       |rt        |||
|||«       |S c c}w c c}}w c c}}w )Nru   )rf   ÚHasAnsÚNoAns)rF   ÚboolrG   rS   ÚdictÚfromkeysrQ   r\   rg   rm   rš   )rJ   rK   Úno_answer_probsÚno_answer_probability_thresholdrN   Úqas_id_to_has_answerrF   Ú
has_answerÚhas_answer_qidsÚno_answer_qidsr^   r=   Úexact_thresholdÚf1_thresholdÚ
evaluationÚhas_ans_evalÚno_ans_evals                    r   Úsquad_evaluater¬   ß   s-  € ØQYÖZÀg˜GŸN™N¬D°·±Ó,AÑAÐZÐÐZØ8L×8RÑ8RÓ8T×cÑ"4 &¨*ÒXb’vÐc€OÑcØ7K×7QÑ7QÓ7S×fÑ!3 ¨Ò[e’fÐf€NÑfàÐÜŸ-™-¨¨sÓ3ˆä˜x¨Ó/�I€Eˆ2ä,ØˆÐ 4Ð6Uó€Oô *¨"¨oÐ?SÐUtÓu€Lä °Ó>€JáÜ% o°|ÈoÔ^ˆÜ�:˜|¨XÔ6áÜ$ _°lÈ^Ô\ˆÜ�:˜{¨GÔ4áÜ˜Z¨°°r¸?ÐL`ÔaàÐùò7 [ùÛcùÛfs   …'DÁ
DÁDÁ&
D Á1D c                 ó–  — d„ }t        |¬«      }dj                  |j                  |«      «      }|j                  | «      }|dk(  r |rt        j                  d| › d|› d�«       |S |t        | «      z   dz
  } ||«      \  }	}
 ||«      \  }}t        |	«      t        |«      k7  r |rt        j                  d	|	› d
|› d�«       |S i }|j                  «       D ]
  \  }}|||<   Œ d}||v r||   }||
v r|
|   }|€|rt        j                  d«       |S d}||v r||   }||
v r|
|   }|€|rt        j                  d«       |S |||dz    }|S )z;Project the tokenized prediction back to the original text.c                 óÈ   — g }t        j                  «       }t        | «      D ]*  \  }}|dk(  rŒ||t        |«      <   |j	                  |«       Œ, dj                  |«      }||fS )Nr   r   )r2   re   r   r6   Úappendr   )r   Úns_charsÚns_to_s_mapr„   ÚcÚns_texts         r   Ú_strip_spacesz%get_final_text.<locals>._strip_spaces  sk   € ØˆÜ!×-Ñ-Ó/ˆÜ˜d“Oò 	‰DˆAˆqØ�CŠxØØ)*ˆKœ˜H›Ñ&Ø�O‰O˜AÕð		ð
 —'‘'˜(Ó#ˆØ˜Ð%Ð%r   )Údo_lower_caser   r|   zUnable to find text: 'z' in 'ú'rq   z*Length not equal after stripping spaces: 'z' vs 'NzCouldn't map start positionzCouldn't map end position)r   r   ÚtokenizeÚfindÚloggerÚinfor6   rS   )Ú	pred_textÚ	orig_textrµ   Úverbose_loggingr´   Ú	tokenizerÚtok_textÚstart_positionÚend_positionÚorig_ns_textÚorig_ns_to_s_mapÚtok_ns_textÚtok_ns_to_s_mapÚtok_s_to_ns_mapr„   Ú	tok_indexÚorig_start_positionÚns_start_positionÚorig_end_positionÚns_end_positionÚoutput_texts                        r   Úget_final_textrÍ   þ   s®  € ò8	&ô ¨]Ô;€Ià�x‰x˜	×*Ñ*¨9Ó5Ó6€Hà—]‘] 9Ó-€NØ˜ÒÙÜ�K‰KÐ0°°¸6À)ÀÈAÐNÔOØÐØ!¤C¨	£NÑ2°QÑ6€Lá'4°YÓ'?Ñ$€\Ð#Ù%2°8Ó%<Ñ"€[�/ä
ˆ<ÓœC Ó,Ò,ÙÜ�K‰KÐDÀ\ÀNÐRXÐYdÐXeÐefÐgÔhØÐð €OØ'×-Ñ-Ó/ò '‰ˆˆ9Ø%&ˆ˜	Ò"ð'ð ÐØ˜Ñ(Ø+¨NÑ;ÐØÐ 0Ñ0Ø"2Ð3DÑ"EÐàÐ"ÙÜ�K‰KÐ5Ô6ØÐàÐØ�Ñ&Ø)¨,Ñ7ˆØÐ.Ñ.Ø 0°Ñ AÐàÐ ÙÜ�K‰KÐ3Ô4ØÐàÐ/Ð3DÀqÑ3HÐJ€KØÐr   c                 óª   — t        t        | «      d„ d¬«      }g }t        t        |«      «      D ]!  }||k\  r |S |j	                  ||   d   «       Œ# |S )z"Get the n-best logits from a list.c                 ó   — | d   S )Nrq   r   ©Úxs    r   rx   z#_get_best_indexes.<locals>.<lambda>^  s
   € ¸aÀ¹d€ r   T©r{   Úreverser   )r~   r   Úranger6   r¯   )ÚlogitsÚn_best_sizeÚindex_and_scoreÚbest_indexesr„   s        r   Ú_get_best_indexesrÙ   \  sf   € äœY vÓ.±NÈDÔQ€Oà€LÜ”3�Ó'Ó(ò 3ˆØ�ÒØàÐð 	×Ñ˜O¨AÑ.¨qÑ1Õ2ð3ð Ðr   c                 óà   — | sg S d}| D ]  }|�||kD  sŒ|}Œ g }d}| D ]0  }t        j                  ||z
  «      }|j                  |«       ||z  }Œ2 g }|D ]  }|j                  ||z  «       Œ |S )z,Compute softmax probability over raw logits.Nru   )ÚmathÚexpr¯   )rU   Ú	max_scoreÚscoreÚ
exp_scoresÚ	total_sumrÑ   Úprobss          r   Ú_compute_softmaxrâ   h  s¡   € áØˆ	à€IØò ˆØÐ ¨	Ó 1Ø‰Iðð €JØ€IØò ˆÜ�H‰H�U˜YÑ&Ó'ˆØ×Ñ˜!ÔØ�Q‰‰	ðð
 €EØò (ˆØ�‰�U˜YÑ&Õ'ð(à€Lr   c                 ó�  — |rt         j                  d|› �«       |rt         j                  d|› �«       |r|
rt         j                  d|› �«       t        j                  t        «      }|D ]   }||j
                     j                  |«       Œ" i }|D ]  }|||j                  <   Œ t        j                  dg d¢«      }t        j                  «       }t        j                  «       }t        j                  «       }t        | «      D �]Ó  \  }}||   }g }d}d}d}d}t        |«      D �]N  \  }}||j                     }t        |j                  |«      }t        |j                  |«      }|
rF|j                  d   |j                  d   z   } | |k  r"| }|}|j                  d   }|j                  d   }|D ]À  }!|D ]¹  }"|!t        |j                  «      k\  rŒ|"t        |j                  «      k\  rŒ5|!|j                   vrŒD|"|j                   vrŒS|j"                  j%                  |!d«      sŒp|"|!k  rŒv|"|!z
  d	z   }#|#|kD  rŒ„|j                   |||!|"|j                  |!   |j                  |"   ¬«      «       Œ» ŒÂ �ŒQ |
r|j                   ||dd||¬«      «       t'        |d
„ d¬«      }t        j                  dg d¢«      }$i }%g }&|D �]<  }'t        |&«      |k\  r �n+||'j(                     }|'j*                  dkD  rÕ|j                  |'j*                  |'j,                  d	z    }(|j                   |'j*                     })|j                   |'j,                     }*|j.                  |)|*d	z    }+|j1                  |(«      },|,j3                  «       },dj5                  |,j7                  «       «      },dj5                  |+«      }-t9        |,|-||	«      }.|.|%v r�Œd|%|.<   nd}.d|%|.<   |&j                   |$|.|'j:                  |'j<                  ¬«      «       �Œ? |
rGd|%vr|&j                   |$d||¬«      «       t        |&«      d	k(  r|&j?                  d |$ddd¬«      «       |&s|&j                   |$ddd¬«      «       t        |&«      d	k  rtA        d«      ‚g }/d}0|&D ]<  }1|/j                  |1j:                  |1j<                  z   «       |0rŒ.|1jB                  sŒ;|1}0Œ> tE        |/«      }2g }3t        |&«      D ]_  \  }4}1t        j                  «       }5|1jB                  |5d<   |2|4   |5d<   |1j:                  |5d<   |1j<                  |5d<   |3j                  |5«       Œa t        |3«      d	k  rtA        d«      ‚|
s|3d   d   ||jF                  <   nY||0j:                  z
  |0j<                  z
  }6|6||jF                  <   |6|kD  rd||jF                  <   n|0jB                  ||jF                  <   |3||jF                  <   �ŒÖ |r>tI        |d«      5 }7|7jK                  tM        jN                  |d¬«      dz   «       ddd«       |r>tI        |d«      5 }7|7jK                  tM        jN                  |d¬«      dz   «       ddd«       |rB|
r@tI        |d«      5 }7|7jK                  tM        jN                  |d¬«      dz   «       ddd«       |S |S # 1 sw Y   Œ�xY w# 1 sw Y   Œ[xY w# 1 sw Y   |S xY w)zHWrite final predictions to the json file and log-odds of null if needed.úWriting predictions to: zWriting nbest to: zWriting null_log_odds to: ÚPrelimPrediction)Úfeature_indexÚstart_indexÚ	end_indexÚstart_logitÚ	end_logité@B r   Frq   c                 ó4   — | j                   | j                  z   S r   )ré   rê   rÐ   s    r   rx   z,compute_predictions_logits.<locals>.<lambda>â  s   € ÀqÇ}Á}ÐWX×WbÑWbÑGb€ r   TrÒ   ÚNbestPrediction)r   ré   rê   r   r   Úemptyru   úNo valid predictionsNr   Úprobabilityré   rê   Úwé   ©Úindentú
)(r¹   rº   r2   ÚdefaultdictÚlistÚexample_indexr¯   Ú	unique_idÚ
namedtuplere   r   rÙ   Ústart_logitsÚ
end_logitsr6   ÚtokensÚtoken_to_orig_mapÚtoken_is_max_contextÚgetr~   ræ   rç   rè   Ú
doc_tokensÚconvert_tokens_to_stringÚstripr   r   rÍ   ré   rê   ÚinsertÚ
ValueErrorr   râ   rF   ÚopenÚwriteÚjsonÚdumps)8Úall_examplesÚall_featuresÚall_resultsrÖ   Úmax_answer_lengthrµ   Úoutput_prediction_fileÚoutput_nbest_fileÚoutput_null_log_odds_filer½   Úversion_2_with_negativeÚnull_score_diff_thresholdr¾   Úexample_index_to_featuresÚfeatureÚunique_id_to_resultÚresultÚ_PrelimPredictionÚall_predictionsÚall_nbest_jsonÚscores_diff_jsonrø   rN   ÚfeaturesÚprelim_predictionsÚ
score_nullÚmin_null_feature_indexÚnull_start_logitÚnull_end_logitræ   Ústart_indexesÚend_indexesÚfeature_null_scorerç   rè   ÚlengthÚ_NbestPredictionÚseen_predictionsÚnbestÚpredÚ
tok_tokensÚorig_doc_startÚorig_doc_endÚorig_tokensr¿   r¼   Ú
final_textÚtotal_scoresÚbest_non_null_entryÚentryrá   Ú
nbest_jsonr„   ÚoutputÚ
score_diffÚwriters8                                                           r   Úcompute_predictions_logitsr5    s0  € ñ  Ü�‰Ð.Ð/EÐ.FÐGÔHÙÜ�‰Ð(Ð):Ð(;Ð<Ô=Ù Ñ%<Ü�‰Ð0Ð1JÐ0KÐLÔMä +× 7Ñ 7¼Ó =ÐØò IˆØ! '×"7Ñ"7Ñ8×?Ñ?ÀÕHðIð ÐØò 7ˆØ06Ð˜F×,Ñ,Ò-ð7ô $×.Ñ.ØÒeóÐô "×-Ñ-Ó/€OÜ ×,Ñ,Ó.€NÜ"×.Ñ.Ó0Ðä"+¨LÓ"9ó W4Ñˆ�wØ,¨]Ñ;ˆàÐàˆ
Ø!"ÐØÐØˆÜ&/°Ó&9ó (	Ñ"ˆM˜7Ø(¨×):Ñ):Ñ;ˆFÜ-¨f×.AÑ.AÀ;ÓOˆMÜ+¨F×,=Ñ,=¸{ÓKˆKá&Ø%+×%8Ñ%8¸Ñ%;¸f×>OÑ>OÐPQÑ>RÑ%RÐ"Ø%¨
Ò2Ø!3�JØ-:Ð*Ø'-×':Ñ':¸1Ñ'=Ð$Ø%+×%6Ñ%6°qÑ%9�NØ,ò �Ø!,ò �Ið #¤c¨'¯.©.Ó&9Ò9Ø Ø ¤C¨¯©Ó$7Ò7Ø Ø"¨'×*CÑ*CÑCØ Ø ¨×(AÑ(AÑAØ Ø"×7Ñ7×;Ñ;¸KÈÔOØ Ø  ;Ò.Ø Ø&¨Ñ4°qÑ8�FØÐ 1Ò1Ø Ø&×-Ñ-Ù)Ø*7Ø(3Ø&/Ø(.×(;Ñ(;¸KÑ(HØ&,×&7Ñ&7¸	Ñ&Bôõñ'òð(	ñR #Ø×%Ñ%Ù!Ø"8Ø !ØØ 0Ø,ôôô $Ð$6Ñ<cÐmqÔrÐä&×1Ñ1ØÒCó
Ðð ÐØˆØ&ó  	tˆDÜ�5‹z˜[Ò(ÚØ˜t×1Ñ1Ñ2ˆGØ×Ñ !Ò#Ø$Ÿ^™^¨D×,<Ñ,<ÀÇÁÐQRÑ@RÐT�
Ø!(×!:Ñ!:¸4×;KÑ;KÑ!L�Ø&×8Ñ8¸¿¹ÑH�Ø%×0Ñ0°À<ÐRSÑCSÐU�à$×=Ñ=¸jÓI�ð $Ÿ>™>Ó+�ØŸ8™8 H§N¡NÓ$4Ó5�ØŸH™H [Ó1�	ä+¨H°iÀÐP_Ó`�
ØÐ!1Ñ1Ùà/3Ð  Ò,à�
Ø/3Ð  Ñ,à�L‰LÑ)¨zÀt×GWÑGWÐcg×cqÑcqÔrÖsðA 	tñD #ØÐ)Ñ)Ø—‘Ñ-°2ÐCSÐ_mÔnÔoô �5‹z˜QŠØ—‘˜QÑ 0°gÈ3ÐZ]Ô ^Ô_ñ Ø�L‰LÑ)¨wÀCÐSVÔWÔXäˆu‹:˜Š>ÜÐ3Ó4Ð4àˆØ"ÐØò 	0ˆEØ×Ñ × 1Ñ 1°E·O±OÑ CÔDÚ&Ø—:“:Ø*/Ñ'ð		0ô ! Ó.ˆàˆ
Ü! %Ó(ò 	&‰HˆAˆuÜ ×,Ñ,Ó.ˆFØ"ŸZ™ZˆF�6‰NØ$)¨!¡HˆF�=Ñ!Ø$)×$5Ñ$5ˆF�=Ñ!Ø"'§/¡/ˆF�;ÑØ×Ñ˜fÕ%ð	&ô ˆz‹?˜QÒÜÐ3Ó4Ð4á&Ø.8¸©m¸FÑ.CˆO˜GŸN™NÒ+ð $Ð&9×&EÑ&EÑEÐI\×IfÑIfÑgˆJØ/9Ð˜WŸ^™^Ñ,ØÐ5Ò5Ø24� §¡Ò/à2E×2JÑ2J� §¡Ñ/Ø)3ˆ�w—~‘~Ó&ðoW4ñr ÜÐ(¨#Ó.ð 	G°&Ø�L‰LœŸ™ O¸AÔ>ÀÑEÔF÷	Gñ ÜÐ# SÓ)ð 	F¨VØ�L‰LœŸ™ N¸1Ô=ÀÑDÔE÷	Fñ !Ñ%<ÜÐ+¨SÓ1ð 	H°VØ�L‰LœŸ™Ð$4¸QÔ?À$ÑFÔG÷	Hð Ðˆ?Ð÷	Gð 	Gú÷	Fð 	Fú÷	Hð Ðús$   ×+*Z#Ø+*Z/Ù-*Z;Ú#Z,Ú/Z8Ú;[c                 ó  — t        j                  dg d¢«      }t        j                  dg d¢«      }t        j                  d|› �«       t        j                  t
        «      }|D ]   }||j                     j                  |«       Œ" i }|D ]  }|||j                  <   Œ t        j                  «       }t        j                  «       }t        j                  «       }t        | «      D �]²  \  }}||   }g }d}t        |«      D �]  \  }}||j                     }|j                  }t        ||«      }t        |«      D ]É  }t        |	«      D ]¹  }|j                  |   }|j                  |   } ||	z  |z   }!|j                   |!   }"|j"                  |!   }#| |j$                  dz
  k\  rŒZ|#|j$                  dz
  k\  rŒm|j&                  j)                  | d«      sŒŠ|#| k  rŒ�|#| z
  dz   }$|$|kD  rŒž|j                   ||| |#||"¬«      «       Œ» ŒË �Œ t+        |d	„ d
¬«      }i }%g }&|D �]J  }'t-        |&«      |k\  r �n9||'j.                     }|j0                  |'j2                  |'j4                  dz    }(|j6                  |'j2                     })|j6                  |'j4                     }*|j8                  |)|*dz    }+|j;                  |(«      },|,j=                  «       },dj?                  |,jA                  «       «      },dj?                  |+«      }-tC        |d«      r|jD                  }.n|jF                  }.tI        |,|-|.|«      }/|/|%v r�Œd
|%|/<   |&j                   ||/|'jJ                  |'jL                  ¬«      «       �ŒM |&s|&j                   |ddd¬«      «       g }0d}1|&D ]/  }2|0j                  |2jJ                  |2jL                  z   «       |1rŒ.|2}1Œ1 tO        |0«      }3g }4t        |&«      D ]_  \  }}2t        j                  «       }5|2jP                  |5d<   |3|   |5d<   |2jJ                  |5d<   |2jL                  |5d<   |4j                  |5«       Œa t-        |4«      dk  rtS        d«      ‚|1€tS        d«      ‚|}6|6||jT                  <   |1jP                  ||jT                  <   |4||jT                  <   �Œµ tW        |d«      5 }7|7jY                  t[        j\                  |d¬«      dz   «       ddd«       tW        |d«      5 }7|7jY                  t[        j\                  |d¬«      dz   «       ddd«       |
r@tW        |d«      5 }7|7jY                  t[        j\                  |d¬«      dz   «       ddd«       |S |S # 1 sw Y   Œ‹xY w# 1 sw Y   ŒYxY w# 1 sw Y   |S xY w)zµ
    XLNet write prediction logic (more complex than Bert's). Write final predictions to the json file and log-odds of
    null if needed.

    Requires utils_squad_evaluate.py
    rå   )ræ   rç   rè   Ústart_log_probÚend_log_probrí   )r   r7  r8  rä   rë   rq   Fc                 ó4   — | j                   | j                  z   S r   )r7  r8  rÐ   s    r   rx   z/compute_predictions_log_probs.<locals>.<lambda>­  s   € ¨q×/?Ñ/?À!Ç.Á.Ñ/P€ r   TrÒ   r   rµ   r   g    €„.ÁNr   rð   r7  r8  rï   rñ   rò   ró   rõ   )/r2   rú   r¹   rº   rö   r÷   rø   r¯   rù   re   r   Ú
cls_logitsÚminrÔ   rû   Ústart_top_indexrü   Úend_top_indexÚparagraph_lenrÿ   r   r~   r6   ræ   rý   rç   rè   rþ   r  r  r  r   r   Úhasattrrµ   Údo_lowercase_and_remove_accentrÍ   r7  r8  râ   r   r  rF   r  r  r  r	  )8r
  r  r  rÖ   r  r  r  r  Ústart_n_topÚ	end_n_topr  r¾   r½   r  r%  r  r  r  r  r  r  r  rø   rN   r  r  r  ræ   Úcur_null_scorer„   Újr7  rç   Új_indexr8  rè   r$  r&  r'  r(  r)  r*  r+  r,  r¿   r¼   rµ   r-  r.  r/  r0  rá   r1  r2  r3  r4  s8                                                           r   Úcompute_predictions_log_probsrF  N  sÝ  € ô* $×.Ñ.ØÒkóÐô #×-Ñ-ØÒEóÐô ‡K�KÐ*Ð+AÐ*BÐCÔDä +× 7Ñ 7¼Ó =ÐØò IˆØ! '×"7Ñ"7Ñ8×?Ñ?ÀÕHðIð ÐØò 7ˆØ06Ð˜F×,Ñ,Ò-ð7ô "×-Ñ-Ó/€OÜ ×,Ñ,Ó.€NÜ"×.Ñ.Ó0Ðä"+¨LÓ"9ó F4Ñˆ�wØ,¨]Ñ;ˆàÐàˆ
ä&/°Ó&9ó *	Ñ"ˆM˜7Ø(¨×):Ñ):Ñ;ˆFà#×.Ñ.ˆNô ˜Z¨Ó8ˆJä˜;Ó'ò "�Ü˜yÓ)ò !�AØ%+×%8Ñ%8¸Ñ%;�NØ"(×"8Ñ"8¸Ñ";�Kà )™m¨aÑ/�Gà#)×#4Ñ#4°WÑ#=�LØ &× 4Ñ 4°WÑ =�Ið
 # g×&;Ñ&;¸aÑ&?Ò?Ø Ø  G×$9Ñ$9¸AÑ$=Ò=Ø à"×7Ñ7×;Ñ;¸KÈÔOØ Ø  ;Ò.Ø Ø&¨Ñ4°qÑ8�FØÐ 1Ò1Ø à&×-Ñ-Ù)Ø*7Ø(3Ø&/Ø+9Ø)5ôõñ3!ò"ð*	ôX $ØÑ$QÐ[_ô
Ðð ÐØˆØ&ó )	ˆDÜ�5‹z˜[Ò(ÚØ˜t×1Ñ1Ñ2ˆGð !Ÿ™¨×(8Ñ(8¸D¿N¹NÈQÑ<NÐPˆJØ$×6Ñ6°t×7GÑ7GÑHˆNØ"×4Ñ4°T·^±^ÑDˆLØ!×,Ñ,¨^¸|ÈaÑ?OÐQˆKØ ×9Ñ9¸*ÓEˆHð  —~‘~Ó'ˆHØ—x‘x §¡Ó 0Ó1ˆHØŸ™ Ó-ˆIä�y /Ô2Ø )× 7Ñ 7‘à )× HÑ H�ä'¨°)¸]ÈOÓ\ˆJàÐ-Ñ-Ùà+/Ð˜ZÑ(à�L‰LÙ  jÀ×ATÑATÐcg×ctÑctÔuöðO)	ñZ Ø�L‰LÑ)¨rÀ$ÐUYÔZÔ[àˆØ"ÐØò 	,ˆEØ×Ñ × 4Ñ 4°u×7IÑ7IÑ IÔJÚ&Ø&+Ñ#ð	,ô
 ! Ó.ˆàˆ
Ü! %Ó(ò 	&‰HˆAˆuÜ ×,Ñ,Ó.ˆFØ"ŸZ™ZˆF�6‰NØ$)¨!¡HˆF�=Ñ!Ø',×';Ñ';ˆFÐ#Ñ$Ø%*×%7Ñ%7ˆF�>Ñ"Ø×Ñ˜fÕ%ð	&ô ˆz‹?˜QÒÜÐ3Ó4Ð4ØÐ&ÜÐ3Ó4Ð4àˆ
Ø+5Ð˜Ÿ™Ñ(ð +>×*BÑ*Bˆ˜Ÿ™Ñ'à)3ˆ�w—~‘~Ó&ðMF4ôP 
Ð$ cÓ	*ð C¨fØ�‰”T—Z‘Z ¸Ô:¸TÑAÔB÷Cô 
Ð Ó	%ð B¨Ø�‰”T—Z‘Z °qÔ9¸DÑ@ÔA÷Bñ ÜÐ+¨SÓ1ð 	H°VØ�L‰LœŸ™Ð$4¸QÔ?À$ÑFÔG÷	Hð Ðˆ?Ð÷Cð Cú÷Bð Bú÷	Hð Ðús$   Ò(*UÓ&*U(Ô&*U4ÕU%Õ(U1Õ4U>r   )Nr0   )F)Ú__doc__r2   r  rÛ   r	   r!   Úmodels.bertr   Úutilsr   Ú
get_loggerÚ__name__r¹   r'   r)   r.   r>   rQ   r\   rg   rm   rˆ   r”   r˜   rš   r¬   rÍ   rÙ   râ   r5  rF  r   r   r   ú<module>rL     s˜   ðñó Û Û Û 	Û å )Ý ð 
ˆ×	Ñ	˜HÓ	%€òCò('òEòò #ò4ó
ò*1ò
\òD)ò9ò.,óó>[ò|	òò.Ló^}r   