o
    rZŽhê%  ã                   @   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   úZ/var/www/auris/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Ú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   ó   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   r;   çš™™™™™Ù?r   r   r    r   r#   çÍÌÌÌÌÌì?)r   Úuntranslated_spansr   r   Úfuture_scorer   )r   r(   Zfuture_score_tabler   rA   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   r6   )Nr7   )r   r   r   r8   r   r   r   r:   ~   r;   z5TestStackDecoder.test_valid_phrases.<locals>.<lambda>r   r   r   r   )r   r   é   rC   )©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.   )rG   rG   gffffffæ?)r
   Zcheese©r   r    )r   r   ç{®Gáz„?)r   r   r   )rG   rG   rG   )r   r   Úspam©r   )rJ   )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
   r-   rH   )r   )r   rK   ç333333Ó?r.   rG   r1   c                    s   ˆ | S r<   r   )r9   Úphrase©Zlanguage_probr   r   r:   ¢   r;   )r   r   ÚtypeÚobject)r3   r   rP   r   r/   –   s   ÿz+TestStackDecoder.create_fake_language_modelN)Ú__name__Ú
__module__Ú__qualname__r   r*   r,   r4   r5   rB   rF   Ú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   rC   )ÚhelloÚworld)Z	raw_scorer&   Z
trg_phraseÚpreviousr>   rE   )ÚandÚgoodbye)r   Úhypothesis_chain)r   ÚrootÚchildZ
grandchildr   r   r   ÚsetUp¨   s   üü
zTestHypothesis.setUpc                 C   s   | j  ¡ }|  |g d¢¡ d S )N)rX   rY   r[   r\   )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   ra   r   )r   r(   rb   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   re   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   rg   r   r   r   Útest_translated_positionsÐ   s   
z(TestHypothesis.test_translated_positionsc                 C   s    | j  d¡}|  |g d¢¡ d S )Nr$   )rD   )r   r   )rC   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)
rS   rT   rU   r`   rc   rd   rf   ri   rj   rk   r   r   r   r   rW   §   s    
rW   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   rI   gš™™™™™É?rM   rN   ©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    rI   g;ßO—n‚?r?   rm   )r   rp   rq   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    rI   r?   rm   ro   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   rn   r   Úbest)r   rp   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   ru   )r   rp   r   r   r   Ú*test_best_returns_none_when_stack_is_empty!  s   z4TestStack.test_best_returns_none_when_stack_is_emptyN)rS   rT   rU   rr   rs   rt   rv   rw   r   r   r   r   rl   ê   s    rl   )Ú__doc__ZunittestÚcollectionsr   Úmathr   Znltk.translater   r   Znltk.translate.stack_decoderr   r   ZTestCaser   rW   rl   r   r   r   r   Ú<module>   s    C