ó
»KUc           @   s{   d  d l  Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 d d d „  ƒ  YZ d S(   iÿÿÿÿN(   t   deepcopyt   TestDomainFinderc           B   sS   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c            s¦  |  \ } } | d d k s" t  ‚ xR t d t | ƒ ƒ D]; } x2 t | ƒ D]$ } | | | | d k sK t  ‚ qK Wq8 Wxˆ t d t | ƒ ƒ D]q } t d g g  | | D] \ } } ˆ  | | f ^ q§ ƒ }	 t |	 | | ƒ d k  sí t  ‚ t j | | ƒ q� Wx  | D] }
 |
 d k s	t  ‚ q	WxZ t t | ƒ ƒ D]F } t ‡  f d †  | | Dƒ ƒ } t | | | ƒ d k  s8t  ‚ q8Wd „  } xt d ƒ D]} xý t d | d	 ƒ D]è } t ˆ  j ƒ  ƒ } t	 j
 | ƒ g  } xˆ | D]€ \ } } t | ƒ | k rPn  t } x9 | D]1 \ } } | | | f | | f ƒ rt } PqqW| sä| j | | f ƒ qäqäWt ‡  f d
 †  | Dƒ ƒ } | | | k s²t  ‚ q²Wq˜Wt S(   sŒ   tests dynamic progragmming for MIS
        Args:
           misside
           nodecount,weights:
        Returns:
           bool:
        i    i   g      ð¿g�íµ ÷Æ°>g        g-Cëâ6?c         3   s%   |  ] \ } } ˆ  | | f Vq d  S(   N(    (   t   .0t   startt   end(   t   weights(    s   Tests/TestDomainFinder.pys	   <genexpr>%   s    c         S   s8   |  \ } } | \ } } | | k  s0 | | k  r4 t  St S(   N(   t   Falset   True(   R   t   .1t   s1t   e1t   s2t   e2(    (    s   Tests/TestDomainFinder.pyt   <lambda>'   s    i   c         3   s%   |  ] \ } } ˆ  | | f Vq d  S(   N(    (   R   R   R   (   R   (    s   Tests/TestDomainFinder.pys	   <genexpr>7   s    g�íµ ÷Æ°¾(   t   AssertionErrort   xranget   lent   sumt   absR   t   checkOverlapt   listt   keyst   randomt   shuffleR   R   t   append(   t   missidet	   nodecountR   t   objvalst   optsolst   mindt   indR   R   t   myobjvalt   objvalt   nodet	   curobjvalt	   intersectt   domlent   randkeyst   itersolt   flagt   curstartt   curend(    (   R   s   Tests/TestDomainFinder.pyt	   testMISDP   sB    	&:  $	c         C   s  | d k r� |  \ } } } } } } }	 }
 | | | | g } | | f | | f g } | | f | | f | |	 f | |
 f g } nT | d k rÕ |  \ } } } } | | g } | | f g } | | f | | f g } n  x– | D]Ž } | j  d ƒ r| j  | ƒ r| j  | d ƒ st ‚ xL | j ƒ  D]> } t j | | ƒ d k r`t j | | ƒ d k  s(t ‚ q(WqÜ Wxe | D]] \ } } xN | j ƒ  D]@ } t t j | | ƒ t j | | ƒ d ƒ d k  sŽt ‚ qŽWquWx* | D]" \ } } | d d k sÝt ‚ qÝWt S(	   sJ   tests weight probs
        Args:
           weightside,nodecount:
        t   doubles   single-memmi    i   gñhãˆµøä¾grÄZ|
 ð?g-Cëâ6?g        (   t   has_keyR   R   t   matht   expR   R   (   t
   weightsideR   t
   infermodelt
   node2startt   node2endt   node2notstartt   node2notendt   cumnode2startt   cumnode2endt   cumnode2notstartt   cumnode2notendt	   blockset1t	   blockset2t	   blockset3t	   node2termt   node2nottermt   cumnode2termt   cumnode2nottermt   blockR!   t   block1t   block2t   cumblock(    (    s   Tests/TestDomainFinder.pyt   testWeightProbs;   s(    -9@Bc            sÁ  | \ ‰ ‰  ‰ ‰ } } }	 }
 t  t d | d ƒ ƒ j t  g  |  D], \ } } t | | d ƒ D] } | ^ q^ qA ƒ ƒ } d t ‡ f d †  | Dƒ ƒ } | t ‡ f d †  |  Dƒ ƒ 7} | t ‡  f d †  |  Dƒ ƒ 7} | d t ‡ f d †  |  Dƒ ƒ 7} | d k rk| \ } ‰ | d k r-d	 „  ‰ n | d
 k rEd „  ‰ n  | t ‡ ‡ f d †  |  Dƒ ƒ 7} n  t | | | ƒ d k  s‹t ‚ t | t ‡ f d †  |  Dƒ ƒ ƒ d k s½t ‚ t S(   s­   compares objective
        Args:
           doms:
           nodecount:
           objval,fixedval:
           weightside,weights:
        Returns:
           bool:
        i   g       @c         3   s   |  ] } ˆ  | Vq d  S(   N(    (   R   t   tloc(   R3   (    s   Tests/TestDomainFinder.pys	   <genexpr>e   s    c         3   s&   |  ] } | D] } ˆ  | Vq q d  S(   N(    (   R   t   tlocsetRE   (   R1   (    s   Tests/TestDomainFinder.pys	   <genexpr>f   s    c         3   s&   |  ] } | D] } ˆ  | Vq q d  S(   N(    (   R   RF   RE   (   R2   (    s   Tests/TestDomainFinder.pys	   <genexpr>g   s    c         3   s9   |  ]/ \ } } t  | d  | ƒ D] } ˆ  | Vq  q d S(   i   N(   R   (   R   R   R   RE   (   R4   (    s   Tests/TestDomainFinder.pys	   <genexpr>h   s    t   Nonet	   geometricc         S   s&   |  d t  j d | ƒ t  j | ƒ S(   Ni   g      ð?(   R-   t   log(   R$   t   coef(    (    s   Tests/TestDomainFinder.pyR   l   s    t   powerlawc         S   s>   t  j t d t  j |  d | ƒ t  j |  d d | ƒ ƒ ƒ S(   Ng¼‰Ø—²Òœ<g      ð¿i   (   R-   RI   t   maxt   pow(   R$   RJ   (    (    s   Tests/TestDomainFinder.pyR   n   s    c         3   s,   |  ]" \ } } ˆ  | | d  ˆ ƒ Vq d S(   i   N(    (   R   R   R   (   t   prifunct	   priorcoef(    s   Tests/TestDomainFinder.pys	   <genexpr>o   s    g      Y@c         3   s%   |  ] \ } } ˆ  | | f Vq d  S(   N(    (   R   R   R   (   R   (    s   Tests/TestDomainFinder.pys	   <genexpr>q   s    g-Cëâ6?N(   Ns   None(	   t   sett   ranget
   differenceR   R   RG   R   R   R   (   t   domsR   R    t   fixedvalR/   R   t   dompriorR5   R6   R7   R8   R   R   t   loct   remlocst   logobjt	   priorfunc(    (   R2   R4   R3   R1   RN   RO   R   s   Tests/TestDomainFinder.pyt
   compareObjX   s     [   $& 2c         C   så  d Gt  j g  | D] \ } } | | d ^ q ƒ GHg  | D], \ } } t | | d ƒ D] } | ^ qW q: } d Gt t d | d ƒ ƒ j t | ƒ ƒ GHd Gt | ƒ G| GHt g  | j ƒ  D] } | d k  rº | ^ qº ƒ t g  | j ƒ  D] } | d k rè | ^ qè ƒ } } | G| GHt j	 |
 | | ƒ s1t
 ‚ |	 r‘t j | | | ƒ sRt
 ‚ t j | ƒ sgt
 ‚ t j | | | | |
 | | ƒ s‘t
 ‚ n  g  | D] } | D] } | ^ q¢q˜} t | ƒ d k rÛt | ƒ | k sát
 ‚ t S(   s  tests domain estimate
        Args:
           markinfo:
           domparams:
           doms:
           weights:
           objval,fixedval:
           nodecount,model,infermodel:
           nooverlap,weightside,misside:
        Returns:
           bool: true or false
        s   avg domain length: i   s   inter-domain nodes: s   node info: g        (   t   npt   meanR   RP   RQ   RR   R   t   valuesR   RD   R   R*   R   RZ   t   minRL   R   (   t   markinfot	   domparamsRS   R   R    RT   R   t   modelR0   t	   nooverlapR/   R   RU   R   R   R   t	   seennodest   valt   negt   post   domRV   t	   boundlocs(    (    s   Tests/TestDomainFinder.pyt   testDomEstimatet   s    39+c	*&*c         C   sF   d „  } x6 t  j |  d ƒ D]" \ } } | | | ƒ s t ‚ q Wt S(   sm   check overlap
        Args:
           doms: domains
        Returns:
           bool: true or false
        c         S   s8   |  \ } } | \ } } | | k  s0 | | k  r4 t  St S(   N(   R   R   (   R   R   R	   R
   R   R   (    (    s   Tests/TestDomainFinder.pyR   ™   s    i   (   t	   itertoolst   combinationsR   R   (   RS   R#   t   dom1t   dom2(    (    s   Tests/TestDomainFinder.pyR   ‘   s    	(   t   __name__t
   __module__t   staticmethodR*   RD   RZ   Ri   R   (    (    (    s   Tests/TestDomainFinder.pyR      s
   +(    (   t   networkxt   nxt   numpyR[   R-   R   t   ost   sysRj   t   copyR    R   (    (    (    s   Tests/TestDomainFinder.pyt   <module>   s   