o
    i$                     @   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)onetwothreefour)undeuxtrois)fiver   six)quatrecinqr   sept      )r   r   assertEquallen	src_vocab	trg_vocabselfparallel_corpora	ibm_model r&   b/var/www/edux/Edux_v2/venv/lib/python3.10/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      t dd S )Nc                   S   r2   )Nc                   S   r2   )Nc                   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'   r5   .       z]TestIBMModel.test_best_model2_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   .   r7   zKTestIBMModel.test_best_model2_alignment.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   .   r7   z9TestIBMModel.test_best_model2_alignment.<locals>.<lambda>r)   )r)         r8      r   r    _TestIBMModel__TEST_TRG_SENTENCE _TestIBMModel__TEST_SRC_SENTENCEr   r   translation_tablealignment_tablebest_model2_alignmentr   	alignmentceptsr#   sentence_pairr>   r?   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/   r0   r1   r   c                   S   r2   )Nc                   S   r2   )Nc                   S   r2   )Nc                   S   r3   r4   r&   r&   r&   r&   r'   r5   G   r6   zTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   G   r7   z~TestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   G   r7   zlTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   G   r7   zZTestIBMModel.test_best_model2_alignment_does_not_change_pegged_alignment.<locals>.<lambda>r8   r9   r)   )r)   r9   r9   r:   r;   rC   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,rH   r   r   r+   r,   r-   r.   r   r/   r0   g
ףp=
?g333333?ffffff?r1   )r   rH   rI   r   r   c                   S   r2   )Nc                   S   r2   )Nc                   S   r2   )Nc                   S   r3   r4   r&   r&   r&   r&   r'   r5   c   r6   zTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   c   r7   zsTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   c   r7   zaTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>.<locals>.<lambda>r   r&   r&   r&   r'   r5   c   r7   zOTestIBMModel.test_best_model2_alignment_handles_fertile_words.<locals>.<lambda>r)   )r)   r:   r   r:   r8   r9   r:      r8   r9   r   )r   r   r=   r   r   r>   r?   r@   r   rA   rB   rC   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)   r8   r:   )r   r   r<   r   r@   r   rA   rB   r#   rD   r%   rE   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   r@   r   rA   rB   rM   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 qh d}| || d S )Nr   r:   r8   Ndesu   œufsvertsUNUSEDgreeneggsr8   r)   >   r   r8   r:   r   r:   r   r   r:   r)   r   r   r8   r   r)   r8   r   r8   r8   r   r:   r:   rP   r   r   neighboringsetaddrA   r   r#   rE   r%   	neighborsneighbor_alignmentsneighbor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r"|}q|jdkr)|}q| |jg g ddgg g | |jg g dgdgg d S )NrP   rQ   rT   r8   r)   r]   )r   r   r`   rA   r   rB   )r#   rE   r%   rd   rf   moved_alignment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 qh d}| || d S )NrP   rQ   rT   r8   r)   >   r[   r\   r]   rP   r_   rc   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 )NrP   c                 S   sR   | j dkrtdd d d tdd d d hS | j dkr&tdd d d tdd d d hS t S )NrP   r]   r   r)   r)   r^   r   r9   r9   )rA   r   ra   )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?rJ   )rP   r]   rm   r^   rn   r0   )getrA   )ro   prob_valuesr&   r&   r'   prob_t_a_given_s_mock   s   z:TestIBMModel.test_hillclimb.<locals>.prob_t_a_given_s_mockrn   )r   r   r`   prob_t_a_given_s	hillclimbr   rA   )r#   initial_alignmentrq   rt   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   r3   )NgMbP?r&   )xr&   r&   r'   r5     r6   z*TestIBMModel.test_sample.<locals>.<lambda>=   )	r   r   r<   r=   r   ru   sampler   r   )r#   rD   r%   samplesrx   r&   r&   r'   test_sample  s   
zTestIBMModel.test_sampleN)__name__
__module____qualname__r=   r<   r(   r*   rF   rG   rL   rN   rO   rh   rk   rl   ry   r~   r&   r&   r&   r'   r      s     %r   )__doc__unittestcollectionsr   nltk.translater   r   nltk.translate.ibm_modelr   TestCaser   r&   r&   r&   r'   <module>   s    