a
    Kbi                     @   sR   d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 G dd dejZdS )z(
Tests for IBM Model 5 training methods
    Ndefaultdict)AlignedSentIBMModel	IBMModel4	IBMModel5)AlignmentInfoc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestIBMModel5c                 C   s   dddd}dddd}t ddgg dt g d	d
d
gg}t|d||}|| d}| |jd d d | | |jd d d | | |jd d d | | |jd d d | d S )Nr      schinkeneierspam   hameggsr   r   r   r   r   r   r   r   r   r   r   g      ?   )r   r   set_uniform_probabilitiesassertEqualhead_vacancy_tablenon_head_vacancy_table)selfsrc_classestrg_classescorpusmodel5Zexpected_prob r    Alib/python3.9/site-packages/nltk/test/unit/translate/test_ibm5.py;test_set_uniform_vacancy_probabilities_of_max_displacements   s    
zITestIBMModel5.test_set_uniform_vacancy_probabilities_of_max_displacementsc                 C   s   dddd}dddd}t ddgg dt g d	d
d
gg}t|d||}|| | |jd d d tj | |jd d d tj | |jd d d tj | |jd d d tj | |jd d d tj d S )Nr   r
   r   r   r   r   r   r   r   r      r   )r   r   r   r   r   r   ZMIN_PROBr   )r   r   r   r   r   r    r    r!   ;test_set_uniform_vacancy_probabilities_of_non_domain_values%   s    
zITestIBMModel5.test_set_uniform_vacancy_probabilities_of_non_domain_valuesc                 C   s   g d}g d}dddddd}ddddddd	}t ||g}td
d g| dg| dgdgdgg dgddgg}tdd }d|d d d< d|d d d< d|d d d< d|d d d< tdd }d|d d d< tdd }	d|	d d< d|	d d< d|	d d < d|	d d< d|	d d< d|	d d< 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%}t|d|||}||}dtd$d td&d }d'}d(}d)}|| | | }| t|dt|d d S )*N)ichessejagern   räucherschinken)ilovetoeatsmokedr   r   r
   r      r   )r*   r(   r&   r'   r)   )r   r/   r+   r,   r-   r.   )r   r
   r   r   r   r#   r#   ZUNUSEDr#      c                   S   s   t dd S )Nc                   S   s   t tS Nr   floatr    r    r    r!   <lambda>I       GTestIBMModel5.test_prob_t_a_given_s.<locals>.<lambda>.<locals>.<lambda>r   r    r    r    r!   r5   I   r6   z5TestIBMModel5.test_prob_t_a_given_s.<locals>.<lambda>g
ףp=
?c                   S   s   t dd S )Nc                   S   s   t tS r2   r3   r    r    r    r!   r5   Q   r6   r7   r   r    r    r    r!   r5   Q   r6   gQ?c                   S   s   t tS r2   r3   r    r    r    r!   r5   U   r6   g\(\?r+   r&   r,   r)   r-   r.   r'   r/   r*   r   c                   S   s   t tS r2   r3   r    r    r    r!   r5   ]   r6   gGz?r(   g+?gK7A`?)Zp1translation_tablefertility_tabler   r   Zhead_distortion_tableZnon_head_distortion_tableZalignment_tableg-?gtSU?gX?gW92?)r   r   r   r   Zprob_t_a_given_spowr   round)r   Zsrc_sentenceZtrg_sentencer   r   r   Zalignment_infor   r   r9   r:   Zprobabilitiesr   ZprobabilityZnull_generationZ	fertilityZlexical_translationZvacancyZexpected_probabilityr    r    r!   test_prob_t_a_given_s:   sl    
z#TestIBMModel5.test_prob_t_a_given_sc              	      s   t dd d d t dd d d t dd d d t dd d d t dd d d g}tj}d}t|d d| ||| || d	 t|d
 dd d tdgdgg}tj}t fddt_t|dd d }||}| 	t
|d |t_d S )Nr
   r
   r
   r   r   r
   r   r   r   r   g?g      ?r
   g      ?g?g333333?)r>   r?   r@   rA   rB   abc                    s
    | j  S r2   )Z	alignment)rC   ZmodelZscoresr    r!   r5      r6   z*TestIBMModel5.test_prune.<locals>.<lambda>r   r0   )r   r   ZMIN_SCORE_FACTORminr   r   Zmodel4_prob_t_a_given_sstaticmethodZpruner   len)r   Zalignment_infosZ
min_factorZ
best_scorer   Zoriginal_prob_functionr   Zpruned_alignmentsr    rE   r!   
test_prune   s.    


zTestIBMModel5.test_pruneN)__name__
__module____qualname__r"   r%   r=   rI   r    r    r    r!   r	      s   Er	   )__doc__Zunittestcollectionsr   Znltk.translater   r   r   r   Znltk.translate.ibm_modelr   ZTestCaser	   r    r    r    r!   <module>   s
   