a
    ±Kb'  ã                   @   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   Zfind_all_src_phrasesÚassertEqualÚassertFalse)ÚselfÚphrase_tableÚstack_decoderÚsentenceZsrc_phrase_spans© r   úJlib/python3.9/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ÚscoreZ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   Ztranslations_forZlog_probÚprobability©r   r   Úlanguage_modelr   r   Z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   r/   r   r0   r   r2   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   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   r9   o   r:   çš™™™™™Ù?r   r   r    r   r#   çÍÌÌÌÌÌì?)r   Úuntranslated_spansr   r   Úfuture_scorer   )r   r(   Zfuture_score_tabler   r@   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   s   ddgS )Nr6   )r   r   r   r7   r   r   r   r9   ~   r:   z5TestStackDecoder.test_valid_phrases.<locals>.<lambda>r   r   r   r   )r   r   é   rB   )©r   r   ©r   r   r!   )r   r   )r   r   )r   r?   r   Zvalid_phrasesr   )r   r(   Zall_phrases_fromZ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 )Nr-   )Ú gš™™™™™é?r.   )rF   rF   gffffffæ?)r
   Zcheese©r   r    )r   r   ç{®Gáz„?)r   r   r   )rF   rF   rF   )r   r   Úspam©r   )rI   )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   r9   ™   r:   z=TestStackDecoder.create_fake_language_model.<locals>.<lambda>çš™™™™™¹?)r
   r-   rG   )r   )r   rJ   ç333333Ó?r.   rF   r1   c                    s   ˆ | S r;   r   )r8   Úphrase©Zlanguage_probr   r   r9   ¢   r:   )r   r   ÚtypeÚobject)r3   r   rO   r   r/   –   s    ÿz+TestStackDecoder.create_fake_language_modelN)Ú__name__Ú
__module__Ú__qualname__r   r*   r,   r4   r5   rA   rE   Ústaticmethodr   r/   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   rB   )ÚhelloÚworld)Z	raw_scorer&   Z
trg_phraseZpreviousr=   rD   )ÚandÚgoodbye)r   Úhypothesis_chain)r   ÚrootÚchildZ
grandchildr   r   r   ÚsetUp¨   s    üüzTestHypothesis.setUpc                 C   s   | j  ¡ }|  |g d¢¡ d S )N)rW   rX   rY   rZ   )r[   Útranslation_so_farr   )r   Útranslationr   r   r   Útest_translation_so_far¸   s    
z&TestHypothesis.test_translation_so_farc                 C   s   t ƒ }| ¡ }|  |g ¡ d S r;   )r   r_   r   )r   r(   r`   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   )r[   Útotal_translated_wordsr   )r   rc   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   )r[   Útranslated_positionsÚsortr   )r   re   r   r   r   Útest_translated_positionsÐ   s    
z(TestHypothesis.test_translated_positionsc                 C   s    | j  d¡}|  |g d¢¡ d S )Nr$   )rC   )r   r   )rB   r$   )r[   r?   r   )r   r?   r   r   r   Útest_untranslated_spansØ   s    z&TestHypothesis.test_untranslated_spansc                 C   s"   t ƒ }| d¡}|  |dg¡ d S )Nr$   )r   r$   )r   r?   r   )r   r(   r?   r   r   r   Ú,test_untranslated_spans_for_empty_hypothesisß   s    
z;TestHypothesis.test_untranslated_spans_for_empty_hypothesisN)
rR   rS   rT   r^   ra   rb   rd   rg   rh   ri   r   r   r   r   rV   §   s   
rV   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   rH   gš™™™™™É?rL   rM   ©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    rH   g;ßO—n‚?r>   rk   )r   rn   ro   Z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    rH   r>   rk   rm   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   rl   r   Úbest)r   rn   Z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   rs   )r   rn   r   r   r   Ú*test_best_returns_none_when_stack_is_empty!  s    z4TestStack.test_best_returns_none_when_stack_is_emptyN)rR   rS   rT   rp   rq   rr   rt   ru   r   r   r   r   rj   ê   s
   rj   )Ú__doc__ZunittestÚcollectionsr   Zmathr   Znltk.translater   r   Znltk.translate.stack_decoderr   r   ZTestCaser   rV   rj   r   r   r   r   Ú<module>   s    C