a
    Kb%                     @   sJ   d Z ddlZddlmZ ddlmZmZ ddlmZ G dd dej	Z
dS )z4
Tests for common methods of IBM translation models
    Ndefaultdict)AlignedSentIBMModel)AlignmentInfoc                   @   s|   e Zd Zg dZg dZdd Zdd Zdd Zd	d
 Zd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 )TestIBMModel)j'aimebienjambonilovehamc                 C   s^   t g dg dt g dg dt g dgg}t|}| t|jd | t|jd d S )N)oneZtwoZthreeZfour)ZunZdeuxZtrois)Zfiver   six)ZquatreZcinqr   Zsept      )r   r   assertEquallen	src_vocab	trg_vocabselfZparallel_corpora	ibm_model r   Flib/python3.9/site-packages/nltk/test/unit/translate/test_ibm_model.py!test_vocabularies_are_initialized   s    
z.TestIBMModel.test_vocabularies_are_initializedc                 C   s4   g }t |}| t|jd | t|jd d S )N   r   )r   r   r   r   r   r   r   r   r   9test_vocabularies_are_initialized_even_with_empty_corpora   s    zFTestIBMModel.test_vocabularies_are_initialized_even_with_empty_corporac                 C   s   t tjtj}ddddddddddddddddddd	}td
d }tg }||_||_||}| 	|j
dd  d | 	|jg dgdgg dgg d S )N?皙?{Gz?Q?r   r   r	   r
   r   N{Gz?Gz?r   c                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   dS Ng?r   r   r   r   r   <lambda>.       zoTestIBMModel.test_best_model2_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   .   r)   z]TestIBMModel.test_best_model2_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   .   r)   zKTestIBMModel.test_best_model2_alignment.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   .   r)   z9TestIBMModel.test_best_model2_alignment.<locals>.<lambda>r   )r         r*      r   r    _TestIBMModel__TEST_TRG_SENTENCE _TestIBMModel__TEST_SRC_SENTENCEr   r   translation_tablealignment_tablebest_model2_alignmentr   	alignmentceptsr   sentence_pairr0   r1   r   a_infor   r   r   test_best_model2_alignment"   s     
z'TestIBMModel.test_best_model2_alignmentc              	   C   s   t tjtj}ddddddddddddddddddd	}td
d }tg }||_||_||dd}| 	|j
dd  d | 	|jg dgg g ddgg d S )Nr    r!   r"   r#   r   r$   r%   r&   r   c                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   dS r'   r   r   r   r   r   r(   G   r)   zTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   G   r)   z~TestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   G   r)   zlTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   G   r)   zZTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>r*   r+   r   )r   r+   r+   r,   r-   r5   r   r   r   ;test_best_model2_alignment_does_not_change_pegged_alignment<   s     zHTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignmentc              
   C   s   t g dtj}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d}tdd }tg }||_||_||}| |j	dd  d | |j
dgdgdgddgdgg d S )N)r   really,r:   r   r   r    r!   r"   r#   r   r$   r%   g
ףp=
?g333333?ffffff?r&   )r   r:   r;   r   r   c                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   t dd S )Nc                   S   s   dS r'   r   r   r   r   r   r(   c   r)   zTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   c   r)   zsTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   c   r)   zaTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>r   r   r   r   r   r(   c   r)   zOTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>r   )r   r,   r   r,   r*   r+   r,      r*   r+   r   )r   r   r/   r   r   r0   r1   r2   r   r3   r4   r5   r   r   r   0test_best_model2_alignment_handles_fertile_wordsT   s&    
z=TestIBMModel.test_best_model2_alignment_handles_fertile_wordsc                 C   sL   t tjg }tg }||}| |jdd  d | |jg dg d S )Nr   )r   r   r   )r   r*   r,   )r   r   r.   r   r2   r   r3   r4   r   r6   r   r7   r   r   r   5test_best_model2_alignment_handles_empty_src_sentenceq   s
    
zBTestIBMModel.test_best_model2_alignment_handles_empty_src_sentencec                 C   sP   t g tj}tg }||}| |jdd  d | |jg g g g g g d S )Nr   r   )r   r   r/   r   r2   r   r3   r4   r?   r   r   r   5test_best_model2_alignment_handles_empty_trg_sentence}   s
    
zBTestIBMModel.test_best_model2_alignment_handles_empty_trg_sentencec                 C   s`   t dddg g dgdgg}tg }||}t }|D ]}||j q6h d}| || d S )Nr   r,   r*   NZdesu   œufsZvertsZUNUSEDZgreenZeggsr*   r   >   )r   r,   r   )r   r,   r   )r   r*   r,   r   r,   r,   r   r   r*   r   r   r*   r   r*   r*   rB   r   r   neighboringsetaddr3   r   r   r7   r   	neighborsZneighbor_alignmentsneighborZexpected_alignmentsr   r   r   *test_neighboring_finds_neighbor_alignments   s    
z7TestIBMModel.test_neighboring_finds_neighbor_alignmentsc                 C   s   t dddg g dgdgg}tg }||}|D ]"}|jdkrD|}q0|jdkr0|}q0| |jg g ddgg g | |jg g dgdgg d S )NrB   rC   rD   r*   r   rH   )r   r   rJ   r3   r   r4   )r   r7   r   rN   rO   Zmoved_alignmentZswapped_alignmentr   r   r   -test_neighboring_sets_neighbor_alignment_info   s    


z:TestIBMModel.test_neighboring_sets_neighbor_alignment_infoc                 C   sb   t dddg g dgdgg}tg }||d}t }|D ]}||j q8h d}| || d S )NrB   rC   rD   r*   r   >   rG   rH   rF   rB   rI   rM   r   r   r   8test_neighboring_returns_neighbors_with_pegged_alignment   s    	zETestIBMModel.test_neighboring_returns_neighbors_with_pegged_alignmentc                 C   sN   t dd d d }dd }dd }tg }||_||_||}| |jd d S )NrB   c                 S   sR   | j dkr&tdd d d tdd d d hS | j dkrLtdd d d tdd d d hS t S )NrB   rH   r   r   r   rE   r   r+   r+   )r3   r   rK   )ajr   r   r   neighboring_mock   s    

z5TestIBMModel.test_hillclimb.<locals>.neighboring_mockc                 S   s   dddddd}| | jdS )Ng      ?g333333?g?r<   )rB   rH   rS   rE   rT   r%   )getr3   )rU   Zprob_valuesr   r   r   prob_t_a_given_s_mock   s    z:TestIBMModel.test_hillclimb.<locals>.prob_t_a_given_s_mockrT   )r   r   rJ   prob_t_a_given_sZ	hillclimbr   r3   )r   Zinitial_alignmentrW   rY   r   best_alignmentr   r   r   test_hillclimb   s    

zTestIBMModel.test_hillclimbc                 C   sB   t tjtj}tg }dd |_||\}}| t|d d S )Nc                 S   s   dS )NgMbP?r   )xr   r   r   r(     r)   z*TestIBMModel.test_sample.<locals>.<lambda>=   )	r   r   r.   r/   r   rZ   Zsampler   r   )r   r6   r   Zsamplesr[   r   r   r   test_sample  s    
zTestIBMModel.test_sampleN)__name__
__module____qualname__r/   r.   r   r   r8   r9   r>   r@   rA   rP   rQ   rR   r\   r_   r   r   r   r   r      s    %r   )__doc__Zunittestcollectionsr   Znltk.translater   r   Znltk.translate.ibm_modelr   ZTestCaser   r   r   r   r   <module>   s
   