ó
"ˆIc           @   s6  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 e j f d	 „  ƒ  YZ
 d
 e j f d „  ƒ  YZ d „  Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ e d k r2e j d d ƒ Z e j d e ƒ n  d S(   s[   Test the HMM.MarkovModel and HMM.DynamicProgramming modules.

Also tests Training methods.
iÿÿÿÿN(   t   Alphabet(   t   Seq(   t   MarkovModel(   t   DynamicProgramming(   t   Trainert   NumberAlphabetc           B   s   e  Z d  Z d d g Z RS(   s(   Numbers as the states of the model.
    t   1t   2(   t   __name__t
   __module__t   __doc__t   letters(    (    (    s   test_HMMGeneral.pyR      s   t   LetterAlphabetc           B   s   e  Z d  Z d d g Z RS(   s+   Letters as the emissions of the model.
    t   At   B(   R   R	   R
   R   (    (    (    s   test_HMMGeneral.pyR      s   c         C   s)   | | k s% t  d | | |  f ƒ ‚ d S(   sK   Helper function to test an assertion and print out a reasonable error.
    s   Expected %s, got %s for %sN(   t   AssertionError(   t   namet   resultt   expected(    (    s   test_HMMGeneral.pyt   test_assertion   s    t   MarkovModelBuilderTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   t  j t ƒ  t ƒ  ƒ |  _ d  S(   N(   R   t   MarkovModelBuilderR   R   t
   mm_builder(   t   self(    (    s   test_HMMGeneral.pyt   setUp&   s    c         C   s²   i  } i  } i d d 6d d 6d d 6d d 6} i d d 6d d 6d d 6d d 6} g  } t  d |  j j | ƒ t  d |  j j | ƒ t  d	 |  j j | ƒ t  d
 |  j j | ƒ d S(   sA   Making sure MarkovModelBuilder is initialized correctly.
        i    R   R   R   R   i   s   Transition probs   Transition pseudos   Emission probs   Emission pseudoN(   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   t   transition_probt   transition_pseudot   emission_probt   emission_pseudo(   R   t   expected_transition_probt   expected_transition_pseudot   expected_emission_probt   expected_emission_pseudot
   assertions(    (    s   test_HMMGeneral.pyt   test_test_initialize*   s     	c         C   s   |  j  j ƒ  i d d 6d d	 6d d
 6d d 6} i d d 6d d 6d d 6d d 6} t d |  j  j | ƒ t d |  j  j | ƒ d S(   s&   Testing allow_all_transtions.
        i    R   R   i   t   Probabilitiess   Pseudo countsN(   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   R   (   R   t   allow_all_transitionsR   R   R   (   R   t   expected_probt   expected_pseudo(    (    s   test_HMMGeneral.pyt   test_allow_all_transitionsA   s    (   R   R	   R   R"   R'   (    (    (    s   test_HMMGeneral.pyR   %   s   		t   HiddenMarkovModelTestc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s5   t  j t ƒ  t ƒ  ƒ } | j ƒ  | j ƒ  |  _ d  S(   N(   R   R   R   R   R$   t   get_markov_modelt   mm(   R   R   (    (    s   test_HMMGeneral.pyR   S   s    
c         C   s°   |  j  j d ƒ } d d g } | j ƒ  | j ƒ  t d | | ƒ |  j  j d ƒ } d d g } | j ƒ  | j ƒ  t d | | ƒ |  j  j d ƒ } g  } t d | | ƒ d S(   s4   Testing the calculation of transitions_from
        R   R   s   State 1 transitionss   State 2 transitionst   Fakes   Fake transitionN(   R*   t   transitions_fromt   sortR   (   R   t   state_1t   expected_state_1t   state_2t   expected_state_2t
   fake_statet   expected_fake_state(    (    s   test_HMMGeneral.pyt   test_transitions_fromZ   s    



(   R   R	   R   R4   (    (    (    s   test_HMMGeneral.pyR(   R   s   	t   ScaledDPAlgorithmsTestc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s‡   t  j t ƒ  t ƒ  ƒ } | j ƒ  | j ƒ  | j ƒ  } t d t ƒ  ƒ } t d t ƒ  ƒ } t j	 | | ƒ } t
 j | | ƒ |  _ d  S(   Nt   ABBt    (   R   R   R   R   R$   t   set_equal_probabilitiesR)   R   R   t   TrainingSequenceR   t   ScaledDPAlgorithmst   dp(   R   R   R*   t   emission_seqt	   state_seqt   training_seq(    (    s   test_HMMGeneral.pyR   n   s    

c         C   s-   i d d 6d d	 6} |  j  j d | ƒ } d S(
   s-   Testing the calculation of s values.
        g      à?R   i    gffffffæ?R   i   N(   R   i    (   R   i    (   R;   t   _calculate_s_value(   R   t   previous_varst   s_value(    (    s   test_HMMGeneral.pyt   test_calculate_s_value   s    

(   R   R	   R   RB   (    (    (    s   test_HMMGeneral.pyR5   m   s   	t   AbstractTrainerTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s.   t  j i  i  i  i  ƒ } t j | ƒ |  _ d  S(   N(   R   t   HiddenMarkovModelR   t   AbstractTrainert   test_trainer(   R   t   hmm(    (    s   test_HMMGeneral.pyR   ‰   s    c         C   sp  i d d 6d d 6d d 6d d 6d d 6d d 6} |  j  j | ƒ } g  } | j d t d ƒ t d ƒ g ƒ | j d t d ƒ t d ƒ g ƒ | j d t d ƒ t d ƒ g ƒ | j d t d ƒ t d ƒ g ƒ | j d t d ƒ t d	 ƒ g ƒ | j d t d ƒ t d	 ƒ g ƒ xO | D]G } | | d
 | d k s!t d | | d
 | d | d
 f ƒ ‚ q!Wd S(   s@   Test the maximum likelihood estimator for simple cases.
        i
   R   i   R   i   t   Ci   i-   i   i    i   s   Got %f, expected %f for %sN(   R   R   (   R   R   (   R   RH   (   R   R   (   RH   R   (   RH   RH   (   R   R   (   R   R   (   R   RH   (   R   R   (   RH   R   (   RH   RH   (   RF   t   ml_estimatort   appendt   floatR   (   R   t   countst   resultst   result_testst   test_result(    (    s   test_HMMGeneral.pyt   test_ml_estimatorŽ   s&    

######c         C   sT   d d d d g } |  j  j | ƒ } d } t | | ƒ d k  sP t d | ƒ ‚ d S(	   s"   Calculate log likelihood.
        g      Ð?g¤p=
×£À?g¸…ëQ¸¾?gÃõ(\ÂÅ?g•¿ÞbFÀgš™™™™™¹?s   Bad probability calculated: %sN(   RF   t   log_likelihoodt   absR   (   R   t   probst   log_probt   expected_log_prob(    (    s   test_HMMGeneral.pyt   test_log_likelihoodª   s
    (   R   R	   R   RP   RV   (    (    (    s   test_HMMGeneral.pyRC   ˆ   s   		t   __main__t	   verbosityi   t
   testRunner(   R
   t   unittestt   BioR    t   Bio.SeqR   t   Bio.HMMR   R   R   R   R   R   t   TestCaseR   R(   R5   RC   R   t   TextTestRunnert   runnert   main(    (    (    s   test_HMMGeneral.pyt   <module>   s    	--