
SZc           @   s  d  d l  Z  d  d l Z d  d l Z d Z d Z d   Z d   Z d   Z d   Z e	 d k re e  j
 d	  \ Z Z e e  j
 d
  Z e e e  Z e e  Z xSe j   D]BZ d Z Z Z Z x e d e  D] Z e e e k re e e k re d	 7Z q e e e k r<e e e k r<e d	 7Z q e e e k rie e e k rie d	 7Z q e e e k r e e e k r e d	 7Z q q We e e e  Z e e e e  Z e e e e  Z e  j j d e e e e f  q Wn  d S(   iNi6eg:0yE>c         C   s$   |  t  k s | t  k r t  S|  | S(   N(   t   LOG_ZERO(   t   v1t   v2(    (    s   ./2.2.viterbi.sol.pyt   log_multiply	   s    c         C   s  t  } d } t |   } | j   } t |  } i  } i  } x/ t d | d  D] }	 i  | |	 <i  | |	 <qP Wx | D] }
 d | d |
 <qu Wx t d | d  D] }	 |  |	 d } x | D] } t  } d } xX | D]P }
 t | |	 d |
 | |
 |  } | | k s| t  k r | } |
 } q q Wt | | | |  | |	 | <| | |	 | <q Wq Wt  } d } xC | D]; }
 | | |
 } | | k s| t  k rq| } |
 } qqqqWi  } x6 t | d d  D]" }	 | | |	 d <| |	 | } qW| S(   Nt    i    i   i(   R    t   lent   keyst   rangeR   (   t   Datat   Modelt   maxkt   ptr_kt   Lt   Statest   Nst   Vt   PTRt   it   kt   symbolt   lt   max_kt   vt   vvt   vd(    (    s   ./2.2.viterbi.sol.pyt   viterbi   sH    
#c         C   s   i  } t  |    } x | D] } t j d |  } | r | j d  } | j d  } t | j d   } | t k  r t } n t j |  } | | k r i  | | <n  | | | | <q q W| SWd  QXd  S(   Ns   (\S*)::(\S*)::(\S*)i   i   i   (	   t   opent   ret   matcht   groupt   floatt   SMALLR    t   matht   log(   t   nameR	   t   ft   linet   mobjt   s1t   s2t   p(    (    s   ./2.2.viterbi.sol.pyt	   readmodel;   s     	c         C   sh   i  } i  } d } t  |   > } x4 | D], } | d | | <| d | | <| d 7} q( WWd  QX| | f S(   Ni    i   (   R   (   R"   R   t   RefR   R#   R$   (    (    s   ./2.2.viterbi.sol.pyt   readdataN   s    t   __main__i   i   i    s#   State %c Sn=%.3f Sp=%.3f Sen2=%.3f
(   t   sysR   R    R    R   R   R   R)   R+   t   __name__t   argvR   R*   R	   t   ViterbiDR   R   R   t   st   tpt   tnt   fpt   fnR   R   R   t   snt   spt   sen2t   stdoutt   write(    (    (    s   ./2.2.viterbi.sol.pyt   <module>   s8   		-		        