o
    ¹iê%  ã                   @   s~   d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ G dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZdS )z
Tests for stack decoder
é    N)Údefaultdict)Úlog)ÚPhraseTableÚStackDecoder)Ú_HypothesisÚ_Stackc                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZdS )ÚTestStackDecoderc                 C   sŽ   t  ¡ }t|d ƒ}d}| |¡}|  |d dg¡ |  |d dg¡ |  |d dg¡ |  |d ddg¡ |  |d ¡ |  |d dg¡ d S )	N©ÚmyÚ
hovercraftÚisÚfullÚofÚeelsr   é   é   é   é   é   é   )r   Úcreate_fake_phrase_tabler   Úfind_all_src_phrasesÚassertEqualÚassertFalse)ÚselfÚphrase_tableÚstack_decoderÚsentenceÚsrc_phrase_spans© r   úf/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nltk/test/unit/translate/test_stack_decoder.pyÚtest_find_all_src_phrases   s   

z*TestStackDecoder.test_find_all_src_phrasesc                 C   sF   t d d ƒ}d|_tƒ }d|_| |d¡}t|jƒd }|  ||¡ d S )Nç      à?©r   r   ©é   é
   r   )r   Údistortion_factorr   Úsrc_phrase_spanÚdistortion_scorer   r   )r   r   Ú
hypothesisÚscoreÚexpected_scorer   r   r    Útest_distortion_score&   s   
z&TestStackDecoder.test_distortion_scorec                 C   s2   t d d ƒ}d|_tƒ }| |d¡}|  |d¡ d S )Nr"   r$   ç        )r   r'   r   r)   r   )r   r   r*   r+   r   r   r    Ú(test_distortion_score_of_first_expansion4   s
   
z9TestStackDecoder.test_distortion_score_of_first_expansionc                 C   s€   t  ¡ }t  ¡ }t||ƒ}d}| |¡}|  |d d | d¡d j| d¡ ¡ |  |d d | d¡d j| d¡ ¡ d S )Nr	   r   r   ©r   r   ©r
   r   )	r   r   Úcreate_fake_language_modelr   Úcompute_future_scoresr   Útranslations_forÚlog_probÚprobability©r   r   Úlanguage_modelr   r   Úfuture_scoresr   r   r    Útest_compute_future_costsA   s"   


ÿý
ÿýz*TestStackDecoder.test_compute_future_costsc                 C   sT   t  ¡ }t  ¡ }t||ƒ}d}| |¡}|  |d d |d d |d d  ¡ d S )Nr	   r   r   r   )r   r   r2   r   r3   r   r7   r   r   r    Ú9test_compute_future_costs_for_phrases_not_in_phrase_table[   s   


þzJTestStackDecoder.test_compute_future_costs_for_phrases_not_in_phrase_tablec                 C   s\   t ƒ }dd„ |_tdd„ ƒ}d|d d< d|d d	< td d ƒ}| ||d	¡}|  |d
¡ d S )Nc                 S   ó   ddgS )N©r   r   )r   r%   r   ©Ú_r   r   r    Ú<lambda>n   ó    z4TestStackDecoder.test_future_score.<locals>.<lambda>c                   S   s   t tƒS ©N)r   Úfloatr   r   r   r    r@   o   rA   çš™™™™™Ù?r   r   r"   r   r%   çÍÌÌÌÌÌì?)r   Úuntranslated_spansr   r   Úfuture_scorer   )r   r*   Úfuture_score_tabler   rG   r   r   r    Útest_future_scorek   s   

z"TestStackDecoder.test_future_scorec                 C   sP   t ƒ }dd„ |_ddgdgg dgg d¢g dgg}t ||¡}|  |g d	¢¡ d S )
Nc                 S   r<   )Nr=   )r   r   r   r>   r   r   r    r@   ~   rA   z5TestStackDecoder.test_valid_phrases.<locals>.<lambda>r   r   r   r   )r   r   é   rJ   )©r   r   ©r   r   r#   )r   r   )r   r   )r   rF   r   Úvalid_phrasesr   )r   r*   Úall_phrases_fromÚphrase_spansr   r   r    Útest_valid_phrasesz   s
   
 z#TestStackDecoder.test_valid_phrasesc                  C   s–   t ƒ } |  ddd¡ |  ddd¡ |  ddd¡ |  ddd¡ |  ddd	¡ |  d
dd¡ |  ddd	¡ |  ddd	¡ |  ddd	¡ |  ddd	¡ | S )Nr0   )Ú gš™™™™™é?r1   )rQ   rQ   gffffffæ?)r
   Úcheese©r   r"   )r   r   ç{®Gáz„?)r   r   r   )rQ   rQ   rQ   )r   r   Úspam©r   )rU   )r   Úadd)r   r   r   r    r   ‡   s   z)TestStackDecoder.create_fake_phrase_tablec                     s€   t dd„ ƒ‰ tdƒˆ d< tdƒˆ d< tdƒˆ d< tdƒˆ d< tdƒˆ d< tdƒˆ d	< td
ƒˆ d< tdtfd‡ fdd„iƒƒ } | S )Nc                   S   s   dS )Ng     8Àr   r   r   r   r    r@   ™   s    z=TestStackDecoder.create_fake_language_model.<locals>.<lambda>çš™™™™™¹?)r
   r0   rS   )r   )r   rV   ç333333Ó?r1   rQ   r6   c                    s   ˆ | S rB   r   )r?   Úphrase©Úlanguage_probr   r    r@   ¢   rA   )r   r   ÚtypeÚobject)r8   r   r[   r    r2   –   s   ÿz+TestStackDecoder.create_fake_language_modelN)Ú__name__Ú
__module__Ú__qualname__r!   r-   r/   r:   r;   rI   rP   Ústaticmethodr   r2   r   r   r   r    r      s    
r   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestHypothesisc                 C   s0   t ƒ }t ddd|d}t ddd|d}|| _d S )Nr"   )r   rJ   )ÚhelloÚworld)Ú	raw_scorer(   Ú
trg_phraseÚpreviousrD   rL   )ÚandÚgoodbye)r   Úhypothesis_chain)r   ÚrootÚchildÚ
grandchildr   r   r    ÚsetUp¨   s   üü
zTestHypothesis.setUpc                 C   s   | j  ¡ }|  |g d¢¡ d S )N)rd   re   ri   rj   )rk   Útranslation_so_farr   )r   Útranslationr   r   r    Útest_translation_so_far¸   s   
z&TestHypothesis.test_translation_so_farc                 C   s   t ƒ }| ¡ }|  |g ¡ d S rB   )r   rp   r   )r   r*   rq   r   r   r    Ú,test_translation_so_far_for_empty_hypothesis¿   s   z;TestHypothesis.test_translation_so_far_for_empty_hypothesisc                 C   s   | j  ¡ }|  |d¡ d S )Nr   )rk   Útotal_translated_wordsr   )r   rt   r   r   r    Útest_total_translated_wordsÉ   s   
z*TestHypothesis.test_total_translated_wordsc                 C   s&   | j  ¡ }| ¡  |  |g d¢¡ d S )N)r   r   r   r   r   )rk   Útranslated_positionsÚsortr   )r   rv   r   r   r    Útest_translated_positionsÐ   s   
z(TestHypothesis.test_translated_positionsc                 C   s    | j  d¡}|  |g d¢¡ d S )Nr&   )rK   )r   r   )rJ   r&   )rk   rF   r   )r   rF   r   r   r    Útest_untranslated_spansØ   s   z&TestHypothesis.test_untranslated_spansc                 C   s"   t ƒ }| d¡}|  |dg¡ d S )Nr&   )r   r&   )r   rF   r   )r   r*   rF   r   r   r    Ú,test_untranslated_spans_for_empty_hypothesisß   s   
z;TestHypothesis.test_untranslated_spans_for_empty_hypothesisN)
r_   r`   ra   ro   rr   rs   ru   rx   ry   rz   r   r   r   r    rc   §   s    
rc   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	TestStackc                 C   sV   t dƒ}tdƒ}| tdƒ¡ | |¡ | tdƒ¡ | tdƒ¡ |  ||v ¡ d S )Nr   rT   gš™™™™™É?rX   rY   ©r   r   Úpushr   ©r   ÚstackÚpoor_hypothesisr   r   r    Ú7test_push_bumps_off_worst_hypothesis_when_stack_is_fullë   s   
zATestStack.test_push_bumps_off_worst_hypothesis_when_stack_is_fullc                 C   s\   t ddƒ}tdƒ}tdƒ}| |¡ | |¡ | tdƒ¡ |  ||v ¡ |  ||v ¡ d S )Nr   r"   rT   g;ßO—n‚?rE   r|   )r   r   r€   Úworse_hypothesisr   r   r    Ú;test_push_removes_hypotheses_that_fall_below_beam_thresholdù   s   


zETestStack.test_push_removes_hypotheses_that_fall_below_beam_thresholdc                 C   s<   t ddƒ}tdƒ}| tdƒ¡ | |¡ |  ||v ¡ d S )Nr   r"   rT   rE   r|   r~   r   r   r    ÚAtest_push_does_not_add_hypothesis_that_falls_below_beam_threshold  s
   

zKTestStack.test_push_does_not_add_hypothesis_that_falls_below_beam_thresholdc                 C   sJ   t dƒ}tdƒ}| tdƒ¡ | |¡ | tdƒ¡ |  | ¡ |¡ d S )Nr   g®Gáz®ï?r.   r"   )r   r   r}   r   Úbest)r   r   Úbest_hypothesisr   r   r    Ú%test_best_returns_the_best_hypothesis  s   
z/TestStack.test_best_returns_the_best_hypothesisc                 C   s   t dƒ}|  | ¡ d ¡ d S )Nr   )r   r   r…   )r   r   r   r   r    Ú*test_best_returns_none_when_stack_is_empty!  s   z4TestStack.test_best_returns_none_when_stack_is_emptyN)r_   r`   ra   r   rƒ   r„   r‡   rˆ   r   r   r   r    r{   ê   s    r{   )Ú__doc__ÚunittestÚcollectionsr   Úmathr   Únltk.translater   r   Únltk.translate.stack_decoderr   r   ÚTestCaser   rc   r{   r   r   r   r    Ú<module>   s    C