
`]c           @   s   d  Z  d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l	 m
 Z
 d	 e j f d
     YZ d S(   s(   
Tests for IBM Model 5 training methods
iN(   t   defaultdict(   t   AlignedSent(   t   IBMModel(   t	   IBMModel4(   t	   IBMModel5(   t   AlignmentInfot   TestIBMModel5c           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s!  i d d 6d d 6d d 6} i d d 6d d 6d d 6} t  d d g d d d g  t  d d d d g d d g  g } t | d | |  } | j |  d	 d } |  j | j d
 d
 d |  |  j | j d d d |  |  j | j d
 d
 d |  |  j | j d d d |  d  S(   Ni    t   schinkent   eieri   t   spamt   hamt   eggsi   g      ?i   ii   (   R   R   t   set_uniform_probabilitiest   assertEqualt   head_vacancy_tablet   non_head_vacancy_table(   t   selft   src_classest   trg_classest   corpust   model5t   expected_prob(    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt;   test_set_uniform_vacancy_probabilities_of_max_displacements   s    $
c         C   sE  i d d 6d d 6d d 6} i d d 6d d 6d d 6} t  d d g d d d g  t  d d d d g d d g  g } t | d | |  } | j |  |  j | j d	 d
 d t j  |  j | j d d d t j  |  j | j d
 d d t j  |  j | j d	 d
 d t j  |  j | j d d d t j  d  S(   Ni    R   R   i   R	   R
   R   i   i   i   i(   R   R   R   R   R   R   t   MIN_PROBR   (   R   R   R   R   R   (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt;   test_set_uniform_vacancy_probabilities_of_non_domain_values)   s    $""""c         C   s  d d d d d g } d d d d	 d
 d g } i d d 6d d 6d d 6d d 6d d 6} i d d 6d d
 6d d 6d d 6d d 6d d	 6} 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 <t 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 <t d    }
 d |
 d d <d |
 d d <d |
 d d <d |
 d d <d |
 d d <d |
 d d  <i d d 6|	 d 6|
 d  6| d! 6| d" 6d  d# 6d  d$ 6d  d% 6} t | d | | |  } | j |  } d t d d  t d& d  } d5 } d: } d? } | | | | } |  j t | d  t | d   d  S(@   Nt   icht   esset   jat   gerns   räucherschinkent   it   lovet   tot   eatt   smokedR
   i    i   i   i   i   i   t   UNUSEDi   c           S   s   t  d    S(   Nc           S   s
   t  t  S(   N(   R    t   float(    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt   <lambda>M   t    (   R    (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$   M   R%   g
ףp=
?c           S   s   t  d    S(   Nc           S   s
   t  t  S(   N(   R    R#   (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$   U   R%   (   R    (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$   U   R%   gQ?c           S   s
   t  t  S(   N(   R    R#   (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$   Y   R%   g\(\?c           S   s
   t  t  S(   N(   R    R#   (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$   a   R%   gGz?g+?gK7A`?t   p1t   translation_tablet   fertility_tableR   R   t   head_distortion_tablet   non_head_distortion_tablet   alignment_tableg-?(   i    i   i   i    i   i   i   i   i   ii   i   gGz?gGz?g>٬\?g>٬\?g
}?g
}?gb3?gb3?gtSU?g@ǘ?g7h>?gSKB;
?gčN?gX?gQ?gQ?g&4?gJQT?gW92?(	   R   R   t   NoneR    R   t   prob_t_a_given_st   powR   t   round(   R   t   src_sentencet   trg_sentenceR   R   R   t   alignment_infoR   R   R'   R(   t   probabilitiesR   t   probabilityt   null_generationt	   fertilityt   lexical_translationt   vacancyt   expected_probability(    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt   test_prob_t_a_given_s>   sd    )0

-
 c      	      sF  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 } i t | d d  | d 6| d 6| | d 6| | d d 6t | d d  d d 6  t d	 g d
 g  g } t j } t   f d    t _ t | d d  d   } | j	 |  } |  j
 t |  d  | t _ d  S(   Ni   i   i    g?g      ?g      ?g?g333333?t   at   bc            s     |  j  S(   N(   t	   alignment(   R;   t   model(   t   scores(    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR$      R%   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i    (   i   i   (   i   i   (   i   i   (   i   i   (   i    i    (   R   R,   R   t   MIN_SCORE_FACTORt   minR   R   t   model4_prob_t_a_given_st   staticmethodt   pruneR   t   len(   R   t   alignment_infost
   min_factort
   best_scoreR   t   original_prob_functionR   t   pruned_alignments(    (   R?   sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt
   test_prune   s*    		(   t   __name__t
   __module__R   R   R:   RK   (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyR      s   			E(   t   __doc__t   unittestt   collectionsR    t   nltk.translateR   R   R   R   t   nltk.translate.ibm_modelR   t   TestCaseR   (    (    (    sA   lib/python2.7/site-packages/nltk/test/unit/translate/test_ibm5.pyt   <module>   s   