ó
Ã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	 Z
 d  d l m Z d  d l m Z d  d l Z d d „ Z d „  Z d „  Z d  d „ Z d	 „  Z d
 d d d d d d d d d d d g Z d d d d d d d g Z d  g  d „ Z d „  Z d „  Z d  „  Z d! „  Z d" „  Z d# „  Z d$ „  Z d% „  Z d& „  Z  d' „  Z! d( d) „ Z" d* „  Z# e$ d+ „ Z% e$ d, „ Z& e$ d- „ Z' d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 g Z( d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH g Z) dI „  Z* dJ „  Z+ dK „  Z, dL „  Z- dM „  Z. dN „  Z/ dO „  Z0 dP dQ „ Z1 dR „  Z2 dS „  Z3 dT „  Z4 dU „  Z5 dV „  Z6 dW „  Z7 e8 dX „ Z9 dY dZ „ Z: d[ „  Z; d\ „  Z< d] „  Z= d^ d_ d` da db dc g Z> dd de df dg dh di dj dk dl dm g
 Z? dn do dp dq g Z@ dr ds g ZA dt „  ZB du „  ZC dv „  ZD dw dx „ ZE d dy dz „ ZG d{ „  ZH d| „  ZI d} „  ZJ d~ „  ZK d „  ZL d€ „  ZM d� „  ZN d‚ „  ZO dƒ „  ZP dw d„ „ ZQ d( d… „ ZR d† „  ZS d‡ „  ZT dˆ „  ZU d‰ „  ZV e8 dŠ „ ZW d‹ „  ZX e8 dŒ „ ZY d� „  ZZ dŽ „  Z[ d� „  Z\ d� „  Z] d‘ „  Z^ d S(’   iÿÿÿÿN(   t   mode(   t	   factorialg»½×Ùß|Û=c         C   s+  t  j t  j |  ƒ d ƒ }  |  j d } t  j t  j | ƒ d | t  j | | f ƒ ƒ } d d | |  | } t  j j | ƒ \ } } d | | | k  <t  j | ƒ d  d  d … } t  j	 | | ƒ }	 | j
 | d ƒ d  d  … d | … f } t  j t  j | | d | !d ƒ ƒ } | | }
 |
 |	 f S(   Ni   i    g      ð?g      ð¿iÿÿÿÿi   (   t   numpyt   matrixt   arrayt   shapet   eyet   onest   linalgt   eight   argsortt   squaret   taket   sqrtt   diag(   t   Dt   kt   tolt   nt   Jt   Bt   Lt   Qt   ordert   set   X(    (    s   lib/myutilities.pyt   classicalmds   s    3(&
c   	      C   sü   d } x |  D] } | | 7} q W| d k s3 t  ‚ d g } xB t d t |  ƒ ƒ D]+ } |  | } | | | } | j | ƒ qR Wt | ƒ t |  ƒ d k s£ t  ‚ g  } xL t d t |  ƒ ƒ D]5 } |  | } t | ƒ d | | } | j | ƒ q¿ W| S(   Ng        g      ð?i    i   (   t   AssertionErrort   ranget   lent   appendt   float(	   t   probmasslistt   totalt   elemt   cdflistt   indext   retvaluet   cdfvaluet   retlistt   newvalue(    (    s   lib/myutilities.pyt   geometricapproximation+   s     	
"
c   
         s€  d „  ‰ d „  ‰  d „  ‰ ‡  ‡ f d †  } d „  } d „  ‰ ‡ f d †  } d „  ‰ ‡ f d	 †  } ‡ f d
 †  } d „  } ‡ ‡ f d †  }	 | d k r© | | |  ƒ S| d k rÂ |	 | |  ƒ S| d k rß | | |  ƒ d S| d k rü | | |  ƒ d S| d k r| | |  ƒ d S| d k r2| | |  ƒ S| d k rK| | |  ƒ S| d k rd| | |  ƒ Sd j  | ƒ GHt d ƒ d  S(   Nc         S   s7   d } x* t  | ƒ D] } | |  | | | } q W| S(   Ni   (   R   (   t   aR   t   resultt   i(    (    s   lib/myutilities.pyt   combinationE   s    c         S   sÁ   t  j |  ƒ } d } xš | D]’ } t  j |  | k ƒ d } | j d d k rT q n  t | | ƒ d d } t  j | | | k ƒ d j d } | t  j | ƒ | j d 7} q W| | j d S(   Ni    i   (   t   npt   uniquet   nonzeroR   R    t   double(   t	   predictedt   labelst   Kt   pt   clst   cls_memberst
   real_labelt   correctCount(    (    s   lib/myutilities.pyt	   PrecisionK   s    $"c         S   s—   t  j |  ƒ } d } xg | D]_ } t  j |  | k ƒ d } t | | ƒ d d } | t  j | | | k ƒ d j d 7} q Wt  j | ƒ |  j d S(   Ni    (   R.   R/   R0   R    R   R1   (   R2   R3   R4   t   ccountR6   R7   R8   (    (    s   lib/myutilities.pyt   RecallW   s    ,c            s;   ˆ  |  | ƒ } ˆ |  | ƒ } d | | | | | | f S(   Ng       @(    (   R2   R3   t	   precisiont   recall(   R:   R<   (    s   lib/myutilities.pyt   f1score`   s    c         S   s  t  j |  ƒ } d } xÜ | D]Ô } t  j |  | k ƒ d } | j d d k rT q n  | | } d } xW t | j d ƒ D]B } x9 t | d ƒ D]' }	 | | | |	 k r� | d 7} q� q� Wqx W| j d }
 |
 d } | t  j | ƒ | |
 7} q Wt  j | ƒ | j d S(   Ng        i    i   i   (   R.   R/   R0   R   R   R1   (   R2   R3   R4   t   appR6   R7   t   real_labelst   correct_pairsR,   t   i2R!   t   total_pairs(    (    s   lib/myutilities.pyt   APPg   s     

c   
   	   S   sç   t  j |  j ƒ } d } t  j t ƒ j } x¶ t  j |  ƒ D]¥ } xœ t  j | ƒ D]‹ } t  j |  | k ƒ d } t  j | | k ƒ d } t  j t  j | | ƒ j ƒ | | }	 | |	 t  j	 |	 | j | | j | ƒ 7} qP Wq: W| S(   Ng        i    (
   R.   R1   t   sizet   finfoR   t   epsR/   R0   t   intersect1dt   log2(
   t   xt   yt   Nt   IRH   t   l1t   l2t   l1_idst   l2_idst   pxy(    (    s   lib/myutilities.pyt   mutual_infoz   s    &5c   
         s  |  j  } ˆ  |  | ƒ } d } xe t j |  ƒ D]T } t j |  | k ƒ d j  } | t j | ƒ | t j t j | ƒ | ƒ 7} q. Wd } xe t j | ƒ D]T } t j | | k ƒ d j  }	 | t j |	 ƒ | t j t j |	 ƒ | ƒ 7} qœ W| | | d S(   Ni    i   (   RF   R.   R/   R0   R1   RJ   (
   RK   RL   RM   RN   t   HxRO   t   l1_countt   HyRP   t   l2_count(   RT   (    s   lib/myutilities.pyt   nmiˆ   s    	66c         S   s]   t  ƒ  } x- |  D]% } | | k r t | ƒ | | <q q Wt j g  |  D] } | | ^ qF ƒ S(   N(   t   dictR   R.   R   (   R3   t   indst   label(    (    s   lib/myutilities.pyt   grp2idx•   s
    	c            sà  ˆ  |  ƒ }  ˆ  | ƒ } t  j t  j | ƒ j t  j |  ƒ j f ƒ } x~ t | j d ƒ D]i } x` t | j d ƒ D]K } t  j t  j | | k ƒ d t  j |  | k ƒ d ƒ j | | | f <qs WqY W| j } | j d } t  j | ƒ } d } d } d }	 d }
 x/t | j d ƒ D]} xÆ t | j d ƒ D]± } | | | f d k r1|	 | | | f | t  j	 | | | f t
 | | d  d  … f ƒ ƒ 7}	 | | | | f | t  j	 | | | f t
 | d  d  … | f ƒ ƒ 7} q1q1W| t
 | | d  d  … f ƒ | t  j	 t
 | | d  d  … f ƒ | ƒ 7} qW| } |	 }	 | } xV t | j d ƒ D]A } t
 | d  d  … | f ƒ } |
 | | t  j	 | | ƒ 7}
 q^W|
 }
 d | | } d |	 | } d | | | | } | S(   Ni    i   i   (   R.   t   zerosR/   RF   R   R   RI   R0   R1   t   logt   sum(   R2   R3   R*   R,   RC   RM   R   t   Hckt   Hct   Hkct   Hkt   akt   ht   ct   vmeasure(   R]   (    s   lib/myutilities.pyt   V�   s<    -M	IPO#c            sÙ  ˆ  |  ƒ }  ˆ  | ƒ } t  j t  j | ƒ j t  j |  ƒ j f ƒ } x~ t | j d ƒ D]i } x` t | j d ƒ D]K } t  j t  j | | k ƒ d t  j |  | k ƒ d ƒ j | | | f <qs WqY Wt  j | ƒ } | j } d } xµ t | j d ƒ D]  } x— t | j d ƒ D]‚ } | | | f d k r| | | | f t  j	 | | | f | t
 | | d  d  … f ƒ t
 | d  d  … | f ƒ ƒ 7} qqWqø W| t  j	 t  j | ƒ j t  j |  ƒ j ƒ } | | } | S(   Ni    i   (   R.   R^   R/   RF   R   R   RI   R0   R1   R_   R`   (   R2   R3   R*   R,   RC   R   t   mi(   R]   (    s   lib/myutilities.pyRj   Á   s     -M	n/
c         S   sf  d } d } d } d } t  |  ƒ t  | ƒ k s6 t ‚ xý t d t  |  ƒ ƒ D]æ } |  | } | | } xÉ t | d t  |  ƒ ƒ D]® }	 |  |	 }
 | |	 } t t k r¿ | | k r¿ | d 7} q€ t t k rä | | k rä | d 7} q€ t t k r	| | k r	| d 7} q€ t t k r€ | | k r€ | d 7} q€ q€ WqL Wd t | | ƒ t  |  ƒ t  |  ƒ d } | S(   Ni    i   g       @(   R   R   R   t   elem1t   elem2R   (   R2   R3   t   acountt   bcountR;   t   dcountt   index1t   pre1t   label1t   index2t   pre2t   label2t	   randscore(    (    s   lib/myutilities.pyt   myrandÔ   s*    

 

,c            s}  ˆ |  ƒ }  ˆ | ƒ } t  j t  j | ƒ j t  j |  ƒ j f ƒ } x~ t | j d ƒ D]i } x` t | j d ƒ D]K } t  j t  j | | k ƒ d t  j |  | k ƒ d ƒ j | | | f <qs WqY Wd } t  j | ƒ } xo t | j d ƒ D]Z } xQ t | j d ƒ D]< } | | | f d k r	| ˆ  | | | f d ƒ 7} q	q	Wqï Wd } xi t | j d ƒ D]T } t	 | | d  d  … f ƒ d k rg| ˆ  t	 | | d  d  … f ƒ d ƒ 7} qgqgWd } xi t | j d ƒ D]T } t	 | d  d  … | f ƒ d k rÙ| ˆ  t	 | d  d  … | f ƒ d ƒ 7} qÙqÙWˆ  t | j ƒ d ƒ } | | | | }	 d | | | | | }
 |	 |
 S(   Ni    i   i   g      à?(
   R.   R^   R/   RF   R   R   RI   R0   R1   R`   (   R2   R3   R*   R,   RC   t   cijt   cit   cjt   cnt	   nominatort   denominator(   R-   R]   (    s   lib/myutilities.pyt   adjustedrandð   s0    -M("0"0t   randR~   t   fmeasurei    R=   i   R>   i   Rj   RY   R@   s   ERROR: Metric {0} is unknown!!(   t   formatt   exit(
   t
   labelstrueR2   t   clustermetricR?   RE   RY   Ri   Rj   Rw   R~   (    (   R:   R<   R-   R]   RT   s   lib/myutilities.pyt   clusterevaluateD   s<    							$	c         C   sô   i  } x |  j  ƒ  D] } d | | <q W| d k r‹ t j |  ƒ } t j | d ƒ \ } } t | d ƒ } | j ƒ  d } d | d } n  t t | ƒ | | j	 ƒ  ƒ t | ƒ t
 | d ƒ }	 x+ t d t |	 ƒ ƒ D] }
 |	 |
 | |
 <qØ W| S(   Ng        iÿÿÿÿi   i    g      ð?gÍÌÌÌÌÌì?(   t   nodest   nxt   to_numpy_matrixt   spt   eigst   absR   t   invR   t	   transposeR   R   R   (   t   Gt   alphat   rethasht   nodet   adjmatRi   R   t   maxeigt   matsizet   retvalst   myindex(    (    s   lib/myutilities.pyt   katz_centrality  s    7c   
      C   sø   t  j |  ƒ } i  } x& | j ƒ  D] } | | d | | <q" Wt |  j ƒ  ƒ } d \ } } } x\ |  j ƒ  D]N \ } }	 | | | | |	 7} | | | | |	 7} | | | | |	 7} ql W| | :} | d | :} | d | d } | | | | S(   Ni   i    (   i    i    i    (   R‡   t   degreet   keysR   t   number_of_edgest   edges(
   RŽ   t   degreest
   degrees_sqR‘   t   mt   num1t   num2t   den1t   sourcet   target(    (    s   lib/myutilities.pyt   assortativity2  s    
t   normalizedlaplaciant   katzcentralityt   degreecentralityt   betweennesscentralityt   eigenvectorcentralityt   closenesscentralityt   loadcentralityt   currentflowclosenesscentralityt    currentflowbetweennesscentralityt   communicabilitycentralityt   hubst   authoritiest   transitivityt   diametert   radiust   avg_shortest_patht   average_square_clusteringR¤   t   average_clusteringc         C   si  | t  k rA| d k rt j |  ƒ } | d k r¿ | t | ƒ } xÊ | D]n } t j j j | d | d | d ƒd } g  } x* | D]" }	 t j |	 ƒ }
 | j	 |
 ƒ q† Wt
 | ƒ } qJ Wqt j j | ƒ } g  } x* | D]" }	 t j |	 ƒ }
 | j	 |
 ƒ qÞ Wt
 | ƒ } nù| d k r@t |  ƒ } t
 | j ƒ  ƒ } nÌ| d k rpt j |  ƒ } t
 | j ƒ  ƒ } nœ| d	 k r t j |  ƒ } t
 | j ƒ  ƒ } nl| d
 k rÐt j |  ƒ } t
 | j ƒ  ƒ } n<| d k r t j |  ƒ } t
 | j ƒ  ƒ } n| d k r6t j |  d t ƒ} t
 | j ƒ  ƒ } nÖ| d k rlt j |  d t ƒ} t
 | j ƒ  ƒ } n | d k r¢t j |  d t ƒ} t
 | j ƒ  ƒ } nj| d k rÒt j |  ƒ } t
 | j ƒ  ƒ } n:| d k rt j |  d d ƒd } t
 | j ƒ  ƒ } n | d k rFt j |  d d ƒd } t
 | j ƒ  ƒ } nÆ | d k r|t j |  d d ƒ} t
 | j ƒ  ƒ } n� | d k r¬t j |  ƒ } t
 | j ƒ  ƒ } n` | d k rÜt j |  ƒ } t
 | j ƒ  ƒ } n0 | d k rt j |  ƒ } t
 | j ƒ  ƒ } n  t j | d d d d* d t d d  d d  ƒd } | S| t k rM| d  k r]d  S| d! k rvt j  |  ƒ S| d" k r�t j! |  ƒ S| d# k r¨t j" |  ƒ S| d$ k rÁt j# |  ƒ S| d% k rÚt j$ |  ƒ S| d& k rðt% |  ƒ S| d' k red( } t j |  ƒ } x" | j& ƒ  D] } | | | 7} qW| t' |  j( ƒ  ƒ Sn d) j) | ƒ GHt* d ƒ d  S(+   NR¥   iÿÿÿÿR   t   sigmagü©ñÒMbP?i    R¦   R§   R¨   R©   Rª   R«   t
   normalizedR¬   R­   R®   R¯   t   max_iteri'  R°   i   t   pagerankt   closenessvitalityt
   clusteringt   square_clusteringt   binsid   R   t   normedt   weightst   densityt
   modularityR±   R¶   R´   R²   R³   R¤   Rµ   g        s!   ERROR: statistic {0} is UNKNOWN!!(   i    i   (+   t	   diststatsR‡   t   normalized_laplacianR   R‰   t   sparseR   RŠ   t   realR   t   sortedt   eigvalsR—   t   valuest   degree_centralityt   betweenness_centralityt   eigenvector_centrality_numpyt   closeness_centralityt   load_centralityt   Truet!   current_flow_closeness_centralityt#   current_flow_betweenness_centralityt   communicability_centrality_expt   hitsRº   t   closeness_vitalityR¼   R½   R.   t	   histogramt   Nonet
   valuestatsR±   R¶   t   average_shortest_path_lengthR²   R³   R¤   R™   R   t   number_of_nodesR�   R‚   (   RŽ   t   statisticnamet
   eigencountt   mybint
   normlapmatt   kvalueR"   t   reteigvaluest	   eigvaluest   eigvalt   eigt	   distarrayt   disthasht   hubhasht   authasht   pagehasht   histR!   R�   R‘   (    (    s   lib/myutilities.pyt   returngraphstatisticH  s°    )1
c         C   s‘  d } d j  d „  t d ƒ Dƒ ƒ } | | } d j | ƒ } t | d ƒ } | j d j |  j ƒ  ƒ ƒ t |  j ƒ  ƒ } x_ | D]W } d } x7 | D]/ }	 |  j | |	 ƒ rº | d } q• | d	 } q• W| j | d
 ƒ q‚ W| j	 ƒ  d j | | | ƒ }
 t
 j |
 ƒ t | d ƒ } d } x6 | D]. } | d k  s=t ‚ | j ƒ  } | d 7} q%W| j	 ƒ  t
 j d j | ƒ ƒ t
 j d j | ƒ ƒ | S(   Nt   sparse6t    c         s   s(   |  ] } t  j t j t j ƒ Vq d  S(   N(   t   randomt   choicet   stringt   ascii_uppercaset   digits(   t   .0RK   (    (    s   lib/myutilities.pys	   <genexpr>­  s    i   s   {0}myoutt   ws   n={0}
s   1 s   0 s   
s   {0} -s {1} {2}t   ri    i   s
   rm -rf {0}(   t   joinR   R�   t   opent   writeRÙ   RÇ   R†   t   has_edget   closet   ost   systemR   t   rstrip(   RŽ   t	   amtogpatht   outfilenamet   tempstrt   myfilet   filet   sortednodest   node1t   rowstrt   node2t   codet   countt   line(    (    s   lib/myutilities.pyt   convertsparse6«  s6    


c         C   s‘  d } d j  d „  t d ƒ Dƒ ƒ } | | } d j | ƒ } t | d ƒ } | j d j |  j ƒ  ƒ ƒ t |  j ƒ  ƒ } x_ | D]W } d } x7 | D]/ }	 |  j | |	 ƒ rº | d } q• | d	 } q• W| j | d
 ƒ q‚ W| j	 ƒ  d j | | | ƒ }
 t
 j |
 ƒ t | d ƒ } d } x6 | D]. } | d k  s=t ‚ | j ƒ  } | d 7} q%W| j	 ƒ  t
 j d j | ƒ ƒ t
 j d j | ƒ ƒ | S(   Nt   graph6Rë   c         s   s(   |  ] } t  j t j t j ƒ Vq d  S(   N(   Rì   Rí   Rî   Rï   Rð   (   Rñ   RK   (    (    s   lib/myutilities.pys	   <genexpr>Í  s    i   s   {0}myoutRò   s   n={0}
s   1 s   0 s   
s   {0} {1} {2}Ró   i    i   s
   rm -rf {0}(   Rô   R   R�   Rõ   Rö   RÙ   RÇ   R†   R÷   Rø   Rù   Rú   R   Rû   (   RŽ   Rü   Rý   Rþ   Rÿ   R   R  R  R  R  R  R  R  (    (    s   lib/myutilities.pyt   convertgraph6Ë  s6    


c         C   s1  t  j t |  d ƒ d d ƒ} d } g  } g  } g  } x“ | D]‹ } | d k ri | d t | ƒ d !} nU | j | d ƒ g  } x. | d D]" } | d k r‹ | j | ƒ q‹ q‹ W| j | ƒ | d 7} q= Wt t | ƒ j t | ƒ ƒ ƒ d k rd GHt d ƒ n  t | ƒ t t | ƒ ƒ k r™xs t d t | ƒ ƒ D]Y }	 xP t |	 d t | ƒ ƒ D]5 }
 | |	 | |
 k rYd	 GH| |	 GH|	 GH|
 GHqYqYWq9Wn  t	 j
 ƒ  } x… t d t | ƒ ƒ D]n }	 | |	 } | j | ƒ xN t d t | ƒ ƒ D]7 }
 | |
 } | |	 |
 d k rî| j | | ƒ qîqîWq»W| S(
   Nt   rbt	   delimiters   	i    i   i   Rë   s2   ERROR:Horizontal and vertical names do not match!!s/   ERROR: There are 2 columns with the same name!!(   t   csvt   readerRõ   R   R   t   sett
   differenceR‚   R   R‡   t   Grapht   add_nodet   add_edge(   t   filenamet
   domaindataR  t   nameshorizontalt   namesverticalt   datat   rowt   cleanrowt   partRp   Rs   RŽ   t   name1t   name2(    (    s   lib/myutilities.pyt   tablimitedfilereaderì  sF    ' 	

c         C   sU   g  } | j  |  d ƒ x7 t d t |  ƒ ƒ D]  } | | d |  | | | <q- W| S(   Ni    i   (   R   R   R   (   t   tempt   cdfR,   (    (    s   lib/myutilities.pyt   makecumulative#  s
    c   	      C   sÝ   | d k r g  Sg  } xk |  | D]_ } t  j |  | | ƒ } | t k r! t  j |  | | ƒ } | | d k r€ | j | ƒ q€ q! q! WxR |  | D]F } x= t |  | | | d ƒ D]" } | | k r¯ | j | ƒ q¯ q¯ Wq� W| S(   Ni    i   (   R‡   t   shortest_patht   Falset   shortest_path_lengthR   t   all_shortest_paths(	   RŽ   R*   t   bR   t   mylistR"   t   patht   valR‘   (    (    s   lib/myutilities.pyR%  ,  s     c   
      C   s9  g  } t  j |  | ƒ } | j | ƒ s+ g  S| d g g } d } d } xì | d k r4| | \ } }	 | | k r• | j t d „  | | d  ƒ ƒ n  t | | ƒ |	 k r| d 7} | | k ré | j | | |	 d g ƒ | d 7} q1| | |	 d g | | <qI | d 8} | d k rI | | d c d 7<qI qI W| S(   sG    Return a list of all shortest paths in graph G between nodes a  and b i    i   c         S   s   |  d S(   Ni    (    (   RK   (    (    s   lib/myutilities.pyt   <lambda>M  s    (   R‡   t   predecessort   has_keyR   t   mapR   (
   RŽ   R*   R&  t   rett   predt   ptht	   pthlengtht   indR   R,   (    (    s   lib/myutilities.pyt   all_shortest_paths2A  s*    $

c         C   sÜ   t  j |  ƒ } d } x¢ t d t t |  j ƒ  ƒ ƒ ƒ D] } xv t | d t t |  j ƒ  ƒ ƒ ƒ D]O } |  j ƒ  | } |  j ƒ  | } t | | | ƒ } | | k rc | } qc qc Wq7 W| d k rØ d GHt d ƒ n  | S(   Niÿÿÿÿi    i   s;   ERROR:This graph should be empty since no max path exists!!(   R‡   t   all_pairs_shortest_path_lengthR   R   RÇ   R†   t   intR‚   (   RŽ   t   shortestpathmatrixt   maxpatht   in1t   in2R  R  t   curpath(    (    s   lib/myutilities.pyt   findmaxpathlength\  s    (,c         C   s�   t  | ƒ } g  } xw | j ƒ  D]i } | | k r t j | | | ƒ } | |  k rb | j | ƒ n  | t k rˆ d GH| GHt d ƒ qˆ q q W| S(   Ns'   ERROR: This ontology is not connected!!i   (   t   findrootR†   R‡   R$  R   R#  R‚   (   t   deptht   Ontologyt   roott
   levelnodesR‘   R)  (    (    s   lib/myutilities.pyt   functioncalculatorn  s    c         C   s»   t  | ƒ } d } g  } | | j ƒ  } xŒ | |  k  r¶ xE | D]= } x4 | | j ƒ  D]" } | | k rU | j | ƒ qU qU Wq> Wg  } x | D] } | j | ƒ qŒ Wg  } | d } q+ W| S(   Ni   (   R<  R™   R   (   R=  R>  R?  t   lengR  R'  R‘   R  (    (    s   lib/myutilities.pyt   functioncalculator2  s    c         C   sc   d  } x8 |  j ƒ  D]* } t |  j | ƒ ƒ d k r | } q q W| d  k r_ d GHt d ƒ n  | S(   Ni    s$   ERROR:There is no root in this graphi   (   RÖ   R†   R   t   predecessorsR‚   (   RŽ   R?  R‘   (    (    s   lib/myutilities.pyR<  •  s    R?  c         C   sJ  t  j ƒ  } i  } t |  d ƒ } xÉ | D]Á } | j ƒ  } | d k s( | j d ƒ s( | j d ƒ rj q( n  g  } x0 | j ƒ  D]" } | d k r} | j | ƒ q} q} W| d } | j d ƒ s( d j | d ƒ }	 | j | ƒ |	 | | <q( q( W| j	 ƒ  x¥t
 d t | j ƒ  ƒ ƒ D]ˆ}
 | j ƒ  |
 } | j d	 ƒ } x`t
 |
 d t | j ƒ  ƒ ƒ D]?} | j ƒ  | } | j d	 ƒ } | j | ƒ r
t | ƒ t | ƒ d k r
t } x: t
 d t | ƒ ƒ D]# } | | | | k rÄt } qÄqÄW| r| j | | ƒ qq
n  | j | ƒ rXt | ƒ t | ƒ d k r—t } x: t
 d t | ƒ ƒ D]# } | | | | k rQt } qQqQW| r”| j | | ƒ q”q—qXqXWqWxB | j ƒ  D]4 } t | j | ƒ ƒ d k r¬| j | | ƒ q¬q¬W| j | ƒ | j t  j | ƒ d ƒ } x0 | j ƒ  D]" } | | j ƒ  k r| | =qqW| | f S(
   NRó   Rë   R   t   -i    t   550t    i   t   .(   R‡   t   DiGraphRõ   Rû   t
   startswitht   splitR   Rô   R  Rø   R   R   R†   RÏ   R#  R  RD  t   subgrapht   weakly_connected_componentsR™   (   t   schemefilenameR?  t   complexontot   id2namesR   R  t   partsR  t   idt   nameRp   R  t   parts1Rs   R  t   parts2t   flagR$   R‘   t   myid(    (    s   lib/myutilities.pyt   mipscomplexontoreader   s`    *

"&!c         C   s¨  t  j ƒ  } t |  d ƒ } g  } g  } g  } i  } t } d } x¼| D]´}	 |	 j ƒ  }	 |	 d k rp t } qF n  | rú|	 j d ƒ rµ |	 j ƒ  }
 t |
 d d ƒ } | j	 | ƒ nB|	 j d ƒ r|	 j ƒ  }
 d } x  |
 d D] } | | d } qá W| | | <nñ |	 j d	 ƒ r“|	 j ƒ  }
 |
 d d
 k rA| j
 | ƒ nO |
 d d k ra| j
 | ƒ n/ |
 d d k r�| j
 | ƒ n d GHt d ƒ nd |	 j d ƒ rÕ|	 j ƒ  }
 t |
 d d ƒ } | j | | ƒ n" |	 j d ƒ rçn |	 r÷t } n  n  qF W| j ƒ  | St  j j | | ƒ } t  j j | | ƒ } t  j j | | ƒ } | j ƒ  GH| j ƒ  GH| j ƒ  GH| j ƒ  GHt t  j | ƒ ƒ GHt t  j | ƒ d ƒ GHd GH(   NRó   Rë   s   [Term]s   id:i   i   s   name:RG  s
   namespace:t   biological_processt   cellular_componentt   molecular_functions   There is an error here!!s   is_a:s   relationship:i    t   end(   R‡   RI  Rõ   R#  Rû   RÏ   RJ  RK  R5  R  R   R‚   R  Rø   RL  RÙ   R   RM  (   R  R>  R   t   bioprocessannost   molecularannost   locationannost	   Onto_nameRV  RS  R  t   splittedR‘   R"   t   newnodet   biot   molt   loc(    (    s   lib/myutilities.pyt   completeontoreader×  sl    
c         C   sÁ  t  j ƒ  } t |  d ƒ } t ƒ  } t ƒ  } t ƒ  } i  } t }	 xö| D]î}
 |
 j ƒ  }
 |
 d k rs t }	 qI n  |	 rI |
 j d ƒ r« |
 j ƒ  } t	 | d d ƒ } q7|
 j d ƒ rÑ |
 d } | | | <q7|
 j d ƒ rk|
 j ƒ  } | d d	 k r| j
 | ƒ q4| d d
 k r,| j
 | ƒ q4| d d k rL| j
 | ƒ q4d j | d ƒ GHt d ƒ q7|
 j d ƒ r­|
 j ƒ  } t	 | d d ƒ } | j | | ƒ q7|
 j d ƒ r|
 j ƒ  } | d d k râ| | =q4d j | d ƒ GHt d ƒ q7|
 j d ƒ rq7|
 j d ƒ r%q7|
 s7t }	 q7qI qI W| j ƒ  t  j j | | ƒ } | r©t  j | ƒ d } x3 | j ƒ  D]" } | | j ƒ  k r€| | =q€q€Wn  | r¹| | g S| Sd  S(   NRó   s   [Term]s   id:i   i   s   name: i   s
   namespace:RY  RZ  R[  s!   ERROR: Namespace {0} is UNKNOWN!!s   is_a:s   is_obsolete:t   trues)   ERROR: is_obsolete value {0} is UNKNOWN!!s   relationship:s   intersection_of:i    (   R‡   RI  Rõ   R  R#  Rû   RÏ   RJ  RK  R5  t   addR�   R‚   R  Rø   RL  t$   weakly_connected_component_subgraphsR™   R†   (   R  t	   connectedt   booleannamesR>  R   R]  R^  R_  t	   onto2nameRV  R  Ra  R‘   RS  Rb  t   onto(    (    s   lib/myutilities.pyt   molecularontoreader  sn    			



c         C   sÁ  t  j ƒ  } t |  d ƒ } t ƒ  } t ƒ  } t ƒ  } i  } t }	 xö| D]î}
 |
 j ƒ  }
 |
 d k rs t }	 qI n  |	 rI |
 j d ƒ r« |
 j ƒ  } t	 | d d ƒ } q7|
 j d ƒ rÑ |
 d } | | | <q7|
 j d ƒ rk|
 j ƒ  } | d d	 k r| j
 | ƒ q4| d d
 k r,| j
 | ƒ q4| d d k rL| j
 | ƒ q4d j | d ƒ GHt d ƒ q7|
 j d ƒ r­|
 j ƒ  } t	 | d d ƒ } | j | | ƒ q7|
 j d ƒ r|
 j ƒ  } | d d k râ| | =q4d j | d ƒ GHt d ƒ q7|
 j d ƒ rq7|
 j d ƒ r%q7|
 s7t }	 q7qI qI W| j ƒ  t  j j | | ƒ } | r©t  j | ƒ d } x3 | j ƒ  D]" } | | j ƒ  k r€| | =q€q€Wn  | r¹| | g S| Sd  S(   NRó   s   [Term]s   id:i   i   s   name: i   s
   namespace:RY  RZ  R[  s!   ERROR: Namespace {0} is UNKNOWN!!s   is_a:s   is_obsolete:Rg  s)   ERROR: is_obsolete value {0} is UNKNOWN!!s   relationship:s   intersection_of:i    (   R‡   RI  Rõ   R  R#  Rû   RÏ   RJ  RK  R5  Rh  R�   R‚   R  Rø   RL  Ri  R™   R†   (   R  Rj  Rk  R>  R   R]  R^  R_  Rl  RV  R  Ra  R‘   RS  Rb  Rm  (    (    s   lib/myutilities.pyt   locationontoreaderW  sn    			



c         C   sÁ  t  j ƒ  } t |  d ƒ } t ƒ  } t ƒ  } t ƒ  } i  } t }	 xö| D]î}
 |
 j ƒ  }
 |
 d k rs t }	 qI n  |	 rI |
 j d ƒ r« |
 j ƒ  } t	 | d d ƒ } q7|
 j d ƒ rÑ |
 d } | | | <q7|
 j d ƒ rk|
 j ƒ  } | d d	 k r| j
 | ƒ q4| d d
 k r,| j
 | ƒ q4| d d k rL| j
 | ƒ q4d j | d ƒ GHt d ƒ q7|
 j d ƒ r­|
 j ƒ  } t	 | d d ƒ } | j | | ƒ q7|
 j d ƒ r|
 j ƒ  } | d d k râ| | =q4d j | d ƒ GHt d ƒ q7|
 j d ƒ rq7|
 j d ƒ r%q7|
 s7t }	 q7qI qI W| j ƒ  t  j j | | ƒ } | r©t  j | ƒ d } x3 | j ƒ  D]" } | | j ƒ  k r€| | =q€q€Wn  | r¹| | g S| Sd  S(   NRó   s   [Term]s   id:i   i   s   name: i   s
   namespace:RY  RZ  R[  s!   ERROR: Namespace {0} is UNKNOWN!!s   is_a:s   is_obsolete:Rg  s)   ERROR: is_obsolete value {0} is UNKNOWN!!s   relationship:s   intersection_of:i    (   R‡   RI  Rõ   R  R#  Rû   RÏ   RJ  RK  R5  Rh  R�   R‚   R  Rø   RL  Ri  R™   R†   (   R  Rj  Rk  R>  R   R]  R^  R_  Rl  RV  R  Ra  R‘   RS  Rb  Rm  (    (    s   lib/myutilities.pyt   bioprocessontoreader—  sn    			



s   Synthetic Lethalitys   Phenotypic Suppressions   Phenotypic Enhancements   Dosage Rescues   Negative Genetics   Positive Genetics   Synthetic Growth Defects   Synthetic Rescues   Dosage Lethalitys   Synthetic Haploinsufficiencys   Dosage Growth Defects   Affinity Capture-Luminescences   Affinity Capture-MSs   Affinity Capture-RNAs   Affinity Capture-Westerns   Biochemical Activitys   Co-crystal Structures   Co-purifications   Co-fractionations   Co-localizations   Far Westernt   PCAt   FRETs   Protein-peptides   Protein-RNAs   Reconstituted Complexs
   Two-hybridc         C   sl  i  } t  j ƒ  } t |  d ƒ } t } x4| D],} | j ƒ  } | j d ƒ rb | rb t } q. n  | r. | j d ƒ } | d t k r¶ | d t	 k r¶ d j
 | d ƒ GHt d ƒ n  t | ƒ d k rZ| d t k rZ| d j ƒ  } | d	 j ƒ  }	 | j | ƒ st ƒ  | | <n  | j |	 ƒ s6t ƒ  | |	 <n  t ƒ  }
 |
 j | d j ƒ  ƒ | d
 d k rŒ|
 t | d
 j ƒ  j d ƒ ƒ O}
 n  t ƒ  } | j | d j ƒ  ƒ | d d k râ| t | d j ƒ  j d ƒ ƒ O} n  | | c |
 O<| |	 c | O<| |	 k rW| j | |	 ƒ r;| | |	 d c d 7<qT| j | |	 d d ƒqWqZq. q. W| j ƒ  x8 | j ƒ  D]* } | | | k ru| | j | ƒ ququWt  j | ƒ d } t  j ƒ  } x£ | j d t ƒ D]� \ } }	 } t | ƒ } x& | | D] } | | t | ƒ } qûWt |	 ƒ } x& | |	 D] } | | t | ƒ } q0W| j | | d | ƒqÕW| S(   NRó   t   INTERACTOR_As   	i   s'   ERROR: {0} experiment type is UNKNOWN!!i   i    i   i   i   s   N/At   |i   t   weightg      ð?R  (   R‡   R  Rõ   R#  Rû   RJ  RÏ   RK  t   biogrid_physicalt   biogrid_geneticalR�   R‚   R   t   lowerR,  R  Rh  R÷   R  Rø   R™   t   removet   connected_component_subgraphsR›   t   str(   R  t   aliasseperatort	   aliashasht   phyR   RV  R  Ra  t   firstt   secondt   alias1t   alias2R‘   R  t   valuet	   firstnodet   aliast
   secondnode(    (    s   lib/myutilities.pyt   biogridreadercombinednodenameù  sd     "	&	&#
"c         C   s  i  } t  j ƒ  } t |  d ƒ } t } x4| D],} | j ƒ  } | j d ƒ rb | rb t } q. n  | r. | j d ƒ } | d t k r¶ | d t	 k r¶ d j
 | d ƒ GHt d ƒ n  t | ƒ d k rZ| d t k rZ| d j ƒ  } | d	 j ƒ  } | j | ƒ st ƒ  | | <n  | j | ƒ s6t ƒ  | | <n  t ƒ  }	 |	 j | d j ƒ  ƒ | d
 d k rŒ|	 t | d
 j ƒ  j d ƒ ƒ O}	 n  t ƒ  }
 |
 j | d j ƒ  ƒ | d d k râ|
 t | d j ƒ  j d ƒ ƒ O}
 n  | | c |	 O<| | c |
 O<| | k rW| j | | ƒ r;| | | d c d 7<qT| j | | d d ƒqWqZq. q. W| j ƒ  x8 | j ƒ  D]* } | | | k ru| | j | ƒ ququWt  j | ƒ d } x0 | j ƒ  D]" } | | j ƒ  k rÃ| | =qÃqÃWx) | j ƒ  D] } | j | ƒ söt ‚ qöW| | g S(   NRó   Rs  s   	i   s'   ERROR: {0} experiment type is UNKNOWN!!i   i    i   i   i   s   N/ARt  i   Ru  g      ð?(   R‡   R  Rõ   R#  Rû   RJ  RÏ   RK  Rv  Rw  R�   R‚   R   Rx  R,  R  Rh  R÷   R  Rø   R™   Ry  Rz  R†   R   (   R  R}  R~  R   RV  R  Ra  R  R€  R�  R‚  R‘   t   pro(    (    s   lib/myutilities.pyt   biogridreadergeneric8  s\     "	&	&#
c         C   sc   | d k r t  |  | ƒ } | S| d k rG t |  ƒ \ } } | | g Sd j | ƒ GHt d ƒ d  S(   Nt   combinednodenamet   generics	   error {0}i   (   R‡  R‰  R�   R‚   (   R  R|  t
   outputtypeR~  R}  (    (    s   lib/myutilities.pyt   biogridreaderw  s    
c         C   s  i  } t  j ƒ  } t |  d ƒ } t } x4| D],} | j ƒ  } | j d ƒ rb | rb t } q. n  | r. | j d ƒ } | d t k r¶ | d t	 k r¶ d j
 | d ƒ GHt d ƒ n  t | ƒ d k rZ| d t k rZ| d j ƒ  } | d	 j ƒ  } | j | ƒ st ƒ  | | <n  | j | ƒ s6t ƒ  | | <n  t ƒ  }	 |	 j | d j ƒ  ƒ | d
 d k rŒ|	 t | d
 j ƒ  j d ƒ ƒ O}	 n  t ƒ  }
 |
 j | d j ƒ  ƒ | d d k râ|
 t | d j ƒ  j d ƒ ƒ O}
 n  | | c |	 O<| | c |
 O<| | k rW| j | | ƒ r;| | | d c d 7<qT| j | | d d ƒqWqZq. q. W| j ƒ  x8 | j ƒ  D]* } | | | k ru| | j | ƒ ququWt  j | ƒ d } x0 | j ƒ  D]" } | | j ƒ  k rÃ| | =qÃqÃWx) | j ƒ  D] } | j | ƒ söt ‚ qöW| | g S(   NRó   s   ID interactors   	i   s'   ERROR: {0} experiment type is UNKNOWN!!i   i    i   i   i   s   N/ARt  i   Ru  g      ð?(   R‡   R  Rõ   R#  Rû   RJ  RÏ   RK  t   physicalt	   geneticalR�   R‚   R   Rx  R,  R  Rh  R÷   R  Rø   R™   Ry  Rz  R†   R   (   R  R}  R~  R   RV  R  Ra  R  R€  R�  R‚  R‘   Rˆ  (    (    s   lib/myutilities.pyt	   dipreaderƒ  s\     "	&	&#
c         C   sá  | r8t  ƒ  } g  } g  } t |  d ƒ } d } t } xë | D]ã }	 |	 j ƒ  }	 | d k rk | d 7} q= n  |	 j d ƒ r† t } q= n  | s® |	 j ƒ  \ }
 } | j | ƒ q= |	 j d ƒ } g  } t | ƒ | k r= x8 | D]0 } | t	 | ƒ } | j | ƒ | j
 | ƒ qÜ W| j | ƒ q= q= W| j ƒ  | | g St  ƒ  } g  } t |  d ƒ } xp | D]h }	 |	 j ƒ  }	 |	 j d ƒ } t | ƒ t ƒ  d k r]x | D] } | j
 | ƒ qžW| j | ƒ q]q]W| j ƒ  | | g Sd  S(   NRó   i    i   t   #s   	t   minsizelimit(   R  Rõ   R#  Rû   RJ  RÏ   RK  R   R   R5  Rh  Rø   t   globals(   R  t   compressedcomR’  t	   seennodesR†   t   realcommunitiesR   R{   t   edgeflagR  R$   RS  RQ  t   outpartsR  t   nodename(    (    s   lib/myutilities.pyt   readcommunityfileÂ  sP    	


	
c         C   sª  t  | j ƒ  ƒ } t j ƒ  } x× | j d t ƒ D]Ã \ } } } d }	 d }
 xk t d t | ƒ ƒ D]T } | | | k r� | }	 n  | | | k rš | }
 n  |	 d k rb |
 d k rb Pqb qb W|	 d k sÒ |
 d k rä d GHt d ƒ n  | j	 |	 |
 ƒ q1 Wt j
 | ƒ } t j ƒ  } xg| j ƒ  D]Y} | t | d d ƒ } | t | d d ƒ } | t | d d ƒ } | t | d d ƒ } d j | | | ƒ } d j | | | ƒ } | rit | | g ƒ } t | | g ƒ } | j | ƒ } | j | ƒ } t | j | ƒ ƒ } t | j | ƒ ƒ } t t | j | ƒ ƒ ƒ t | j | ƒ ƒ } | j	 | | d | ƒq | j	 | | ƒ q W| r–t |  | t ƒ n t |  | t ƒ d  S(   NR  iÿÿÿÿi    s&   ERROR: node index has not been found!!i   s	   {0}{1}{2}Ru  (   RÇ   R†   R‡   R  R›   RÏ   R   R   R‚   R  t
   line_graphR5  R�   R  R  t
   neighboursR   t   intersectiont   uniont   graphwritemyR#  (   t   outpathR~  t   linegraphseperatort   weightedR  t   indexphyR  R  Rƒ  Rp   Rs   R$   t	   linegrapht   outlinegrapht   edget   part1t   part2t   part3t   part4t   set1t   set2t   val1t   val2t   neigh1t   neigh2(    (    s   lib/myutilities.pyt   writegraphmyline2ó  sL    "		.c         C   su  t  | j ƒ  ƒ } t j ƒ  } xH | j ƒ  D]: \ } } | j | ƒ } | j | ƒ } | j | | ƒ q+ Wt |  d ƒ }	 |	 j d ƒ x: t	 d t
 | ƒ ƒ D]# }
 |	 j d j |
 | |
 ƒ ƒ q› W|	 j ƒ  ~ t j | ƒ } t |  d ƒ }	 |	 j d ƒ | r.x| j ƒ  D]} t | d ƒ } t | d ƒ } t | j | ƒ ƒ } t
 | ƒ d k s`t ‚ | d } t | j | ƒ ƒ } t
 | ƒ d k s—t ‚ | d } t | j | ƒ ƒ } t | j | ƒ ƒ } t t
 | j | ƒ ƒ ƒ t
 | j | ƒ ƒ } |	 j d j | d | d | ƒ ƒ qW|	 j ƒ  nC x6 t j | d	 d
 g ƒD] } |	 j d j | ƒ ƒ qGW|	 j ƒ  d  S(   NRò   s   #index
i    s   {0} {1}
R*   s
   #edgelist
i   s   {0} {1} {2}
R  Ru  s   {0}
(   RÇ   R†   R‡   R  t
   edges_iterR$   R  Rõ   Rö   t   xrangeR   R�   Rø   R›  R  t   listR  R   t	   neighborsR   R�  Rž  t   generate_edgelist(   R   R~  R¢  R  R£  R  R  Rp   Rs   R   R$   R¤  R¦  R«  R¬  R­  R®  R¯  R°  Rƒ  R  (    (    s   lib/myutilities.pyt   writegraphmyline  sB    !


.(t   ?c         C   sW  g  } i  } t  j ƒ  } t |  d ƒ } d } t } xÿ| D]÷}	 |	 j ƒ  }	 | d k rh | d 7} q: n  |	 j d ƒ rº x4 t d t | j ƒ  ƒ ƒ D] }
 | j	 | |
 ƒ q“ Wt
 } q: n  | sZd } x; t d t |	 ƒ ƒ D]$ }
 |	 |
 d k rÜ |
 d } PqÜ qÜ Wt |	 d | d !ƒ }
 |	 | } | j |
 ƒ s;t ‚ | j |
 ƒ s1| | |
 <q1q: |	 j ƒ  } | r÷t | d j d d ƒ j d	 d ƒ ƒ } t | d j d
 d ƒ ƒ } t | d j d d ƒ j d	 d ƒ ƒ } t | d j d
 d ƒ ƒ } n˜ | t | d j d d ƒ j d	 d ƒ ƒ } | t | d j d
 d ƒ ƒ } | t | d j d d ƒ j d	 d ƒ ƒ } | t | d j d
 d ƒ ƒ } d j | | | ƒ } d j | | | ƒ } t | ƒ d k rî| j | | d t | d ƒ ƒq: t | ƒ d k r| j | | ƒ q: d j t | ƒ ƒ GHt d ƒ q: W| j ƒ  | rO| | g S| Sd  S(   NRó   i    i   R‘  iÿÿÿÿRG  t   (Rë   t   ,t   )i   i   s	   {0}{1}{2}i   Ru  i   s	   error {0}(   R‡   R  Rõ   R#  Rû   RJ  R³  R   R™   R   RÏ   R5  R,  R   RK  t   replaceR�   R  R   R‚   Rø   (   t   linefilenamet
   compressedt   lineseperatorR†   t
   index2nodeRŽ   R   R{   R—  R  R$   t   lookRS  RQ  R  R  t   node3t   node4t   newnode1t   newnode2(    (    s   lib/myutilities.pyt   readgraphmylineF  sb    
"

((, , #

c         C   s¾   d } x± t  d |  j ƒ  ƒ D]š } |  j ƒ  | } x� t  | d |  j ƒ  ƒ D]f } |  j ƒ  | } |  j | ƒ } |  j | ƒ } | t t | j | ƒ ƒ ƒ t | j | ƒ ƒ 7} qL Wq W| S(   Ng        i    i   (   R   Rš   R›   Rœ  R   R   R�  Rž  (   RŽ   t   intscoret   myindex1t   edge1t   myindex2t   edge2R¯  R°  (    (    s   lib/myutilities.pyt   intersectionassignerˆ  s     :c         C   s¾   d } x± t  d |  j ƒ  ƒ D]š } |  j ƒ  | } x� t  | d |  j ƒ  ƒ D]f } |  j ƒ  | } |  j | ƒ } |  j | ƒ } | t t | j | ƒ ƒ ƒ t | j | ƒ ƒ 7} qL Wq Wt S(   Ng        i    i   (	   R   Rš   R›   Rœ  R   R   R�  Rž  RÇ  (   RŽ   t
   unionscoreRÈ  RÉ  RÊ  RË  R¯  R°  (    (    s   lib/myutilities.pyt   unionassigner”  s     :c         C   sœ   i  } t  |  d ƒ } xv | D]n } | j ƒ  } | j d ƒ } | d } | d } | j | ƒ sg t ‚ t ƒ  } | t | ƒ O} | | | <q W| j ƒ  | S(   NRó   s   	i    i   (   Rõ   Rû   RK  R,  R   R  Rø   (   t   aliasoutpathR}  R   R  RQ  Rˆ  RÉ   R  (    (    s   lib/myutilities.pyt   readaliasfileŸ  s    

	
c         C   sƒ   t  |  d ƒ } xc | j ƒ  D]U } | g } | j | | ƒ t | ƒ d k r d j | ƒ } | j | d ƒ q q W| j ƒ  d  S(   NRò   i   s   	s   
(   Rõ   R™   t   extendR   Rô   Rö   Rø   (   R   R}  R   Rˆ  RÉ   R  (    (    s   lib/myutilities.pyt   writealiasfile¯  s    	c         C   sB  t  | j ƒ  ƒ } t |  d ƒ } | j d ƒ x: t d t | ƒ ƒ D]# } | j d j | | | ƒ ƒ qD W| j d ƒ t j ƒ  } xt | j	 d t
 ƒ D]` \ } } }	 | j | ƒ }
 | j | ƒ } | rç | j |
 | d |	 d ƒq— | j |
 | ƒ q— Wx6 t j | d d g ƒD] } | j d j | ƒ ƒ qW| j ƒ  d  S(	   NRò   s   #index
i    s   {0} {1}
s
   #edgelist
R  Ru  s   {0}
(   RÇ   R†   Rõ   Rö   R³  R   R�   R‡   R  R²  RÏ   R$   R  R¶  Rø   (   R   R~  R¢  R  R   R$   R£  R  R  Rƒ  Rp   Rs   R  (    (    s   lib/myutilities.pyt   writegraphmy»  s     !"c         C   s7  g  } i  } t  j ƒ  } t |  d ƒ } d } t } xß| D]×} | j ƒ  } | d k rh | d 7} q: n  | j d ƒ rº x4 t d t | j ƒ  ƒ ƒ D] }	 | j	 | |	 ƒ q“ Wt
 } q: n  | sZd }
 x; t d t | ƒ ƒ D]$ }	 | |	 d k rÜ |	 d }
 PqÜ qÜ Wt | d |
 d !ƒ }	 | |
 } | j |	 ƒ s;t ‚ | j |	 ƒ s| | |	 <qq: | j ƒ  } | r�t | d ƒ } t | d ƒ } n( | t | d ƒ } | t | d ƒ } t | ƒ d k rÜ| j | | ƒ q: t | ƒ d k r: | j | | d	 t | d ƒ ƒq: q: W| j ƒ  | r/| | g S| Sd  S(
   NRó   i    i   R‘  iÿÿÿÿRG  i   i   Ru  (   R‡   R  Rõ   R#  Rû   RJ  R³  R   R™   R   RÏ   R5  R,  R   RK  R  R   Rø   (   R   R¾  R†   RÀ  RŽ   R   R{   R—  R  R$   RÁ  RS  RQ  R  R  (    (    s   lib/myutilities.pyt   readgraphmyÒ  sR    
"

'

c         C   sý  t  j ƒ  } xR |  j ƒ  D]D } | d j t ƒ d } | d j t ƒ d } | j | | ƒ q W| j d d ƒ j d d ƒ } t  j | | ƒ | rùi  } x� |  j ƒ  D]� }	 |	 j t ƒ d }	 |	 j t ƒ d }
 | j	 |	 ƒ st
 ƒ  | |	 <xD |
 D] } | |	 j | ƒ q÷ Wq¨ x |
 D] } | |	 j | ƒ qWq¨ W| j d d ƒ j d d ƒ j d d ƒ d } t | d ƒ } xq | j ƒ  D]c } t | | ƒ d k rÍd } x# | | D] } | t | } q²Wn  | j t | ƒ | d	 ƒ q…W| j ƒ  n  d  S(
   Ni    i   s   BIOGRID-ORGANISM-Rë   s   -3.0.65.tabs   .txts
   -alias.txtRò   s   
(   R‡   R  R›   RK  R|  R  R¼  t   write_edgelistR†   R,  R  Rh  Rõ   R™   R   R  Rö   R{  Rø   (   t   combinedphyR  t   aliasoutR~  R¦  t   n1t   n2t   outfileR}  R‘   R…  R"   R   t   keyt   aliasstring(    (    s   lib/myutilities.pyt   write2files  s6    .s   	c   	      C   sã   t  j ƒ  } t |  ƒ } x; | D]3 } | j ƒ  j | ƒ } | j | d | d ƒ q W| j ƒ  i  } |  j d d ƒ d }  t |  ƒ } xD | D]< } | j ƒ  j | ƒ } | d } | j | ƒ | | | <q� W| j ƒ  | | g S(   Ni    i   s   .txtRë   s
   -alias.txt(	   R‡   R  Rõ   Rû   RK  R  Rø   R¼  Ry  (	   R  R  RŽ   R   R  t   proteinR}  R'  RÛ  (    (    s   lib/myutilities.pyt   plainppireader'  s     


c         C   s:   |  } g  } x' | | k  r5 | j  | ƒ | | 7} q W| S(   N(   R   (   t   startt   stopt   stepRó   R'   (    (    s   lib/myutilities.pyt   myrange=  s    c         C   sQ   g  t  j |  ƒ D]= } t  j j t  j j |  | ƒ ƒ r | j d ƒ r | ^ q S(   Ns	   .DS_Store(   Rù   t   listdirR(  t   isdirRô   RJ  (   t   dirRS  (    (    s   lib/myutilities.pyt   listdirectoriesG  s    c         C   sS   g  t  j |  ƒ D]? } t  j j | ƒ r | j d ƒ r | j d ƒ r | ^ q S(   s   list files
    s	   .DS_Stores   ._.DS_Store(   Rù   Rä  R(  Rå  RJ  (   Ræ  t   d(    (    s   lib/myutilities.pyt	   listfilesK  s    t   EXPt   IDAt   IPIt   IMPt   IGIt   IEPt   ISSt   ISOt   ISAt   ISMt   IGCt   IBAt   IBDt   IKRt   IRDt   RCAt   TASt   NASt   ICt   NDt   IEAt   NRc   	      C   s  t  |  d ƒ } d j | |  ƒ } t  | d ƒ } d } d } x¬ | D]¤ } | j d ƒ sC | j ƒ  j d ƒ } | d t t t t k rÈ | d t t t k r» | j	 | ƒ | d 7} qä | d 7} qç d	 j | d ƒ GHt
 d ƒ qC qC W| j ƒ  | j ƒ  d  S(
   NRó   s   {0}{1}Rò   i    t   !s   	i   i   s   Annocode {0} is UNKNOWN!!(   Rõ   R�   RJ  Rû   RK  t   main_evidence_codest   comp_evidence_codest   other_evidence_codest   other_evidence_codes2Rö   R‚   Rø   (	   R  t	   outprefixR   Rý   RÚ  t   existt   nonexistR  RQ  (    (    s   lib/myutilities.pyt   annocleanerU  s"    
c   
      C   s/  | d k r; g  |  j  ƒ  D] } | D] } | ^ q# q } n  g  } xd | D]\ } d } x1 |  j ƒ  D]# } | |  | k ra | d 7} qa qa W| | k  rH | j | ƒ qH qH WxI | D]A }	 x8 |  j ƒ  D]* } |	 |  | k rÂ |  | j |	 ƒ qÂ qÂ Wq¯ Wx4 |  j ƒ  D]& } t |  | ƒ d k r|  | =qqW|  S(   Ns   -1i    i   (   RÉ   R™   R   Ry  R   (
   t   pro2annot   allannotationst   atleastnumbert   sublistt   itemt
   deleteannot   annot	   seencountRˆ  t   delanno(    (    s   lib/myutilities.pyt   preprocessannoq  s$    /c         C   sÄ  | d k rã t  |  ƒ t  |  ƒ d d } d } x¢ t d t  |  ƒ ƒ D]‹ } |  | } xx t | d t  |  ƒ ƒ D]] } |  | } t t t  | ƒ t  | ƒ g ƒ ƒ } t t  | j | ƒ ƒ ƒ }	 | |	 | 7} qp WqF Wt | ƒ | S| d k r½t  |  ƒ t  |  ƒ d d } d } x™ t d t  |  ƒ ƒ D]‚ } |  | } xo t | d t  |  ƒ ƒ D]T } |  | } t t  | j | ƒ ƒ ƒ }	 t t  | j | ƒ ƒ ƒ }
 | |	 t 7} qSWq)Wt | ƒ | S| d k r®d t  |  ƒ t  |  ƒ d d } d } x¬ t d t  |  ƒ ƒ D]• } |  | } x‚ t | d t  |  ƒ ƒ D]g } |  | } t t  | j | ƒ ƒ ƒ }	 t t  | j | ƒ ƒ ƒ }
 |	 |
 } | t | d	 | ƒ 7} q1WqWt | ƒ | S| d
 k r¨d t  |  ƒ t  |  ƒ d d } d } xµ t d t  |  ƒ ƒ D]ž } |  | } x‹ t | d t  |  ƒ ƒ D]p } |  | } t t  | j | ƒ ƒ ƒ }	 t t t  | ƒ t  | ƒ g ƒ ƒ } |	 | } | t | d	 | ƒ 7} q"WqøWt | ƒ | Sd j | ƒ GHt	 d ƒ d  S(   Nt   overlapi   g       @g        i    t   overlap_uniont   my_uniong      à?g      ð?t   mys    Overlap metric {0} is UNKNOWN!!!(
   R   R   R   t   maxR�  Rž  t   unioncont   minR�   R‚   (   t   communitiest
   metrictypet   normR!   Rp   t   com1Rs   t   com2t   maxcomt   intercomt   unioncomt   ratio(    (    s   lib/myutilities.pyt   estimateoverlapmetric�  s`    
 
$
 
"
 

"
 
$
s   -1c   	      C   se  | d k r³ t  |  d ƒ } xˆ | j ƒ  D]z } | | j ƒ  k r( t | ƒ } t | | ƒ d k r¢ x& | | D] } | d t | ƒ } qm W| j | d ƒ q¢ q( q( W| j ƒ  n® t  |  d ƒ } x’ | j ƒ  D]„ } | | j ƒ  k rÏ | | } t | ƒ } t | | ƒ d k rSx& | | D] } | d t | ƒ } qW| j | d ƒ qSqÏ qÏ W| j ƒ  d  S(   Ns   -1Rò   i    s   	s   
(   Rõ   R™   R†   R{  R   Rö   Rø   (	   R  t   pro2functionRŽ   t   indicesR   Rˆ  t   outstrt   funct   proname(    (    s   lib/myutilities.pyt   annofilewriterÂ  s(    
R{  c         C   sÐ  i  } t  ƒ  } t |  d ƒ } x | D]˜} | j ƒ  j d ƒ } t | ƒ d k  rq d j | d ƒ GHt d ƒ n  | d } | d }	 | d k rbg  }
 xj |	 D]b } | d k rÆ |
 j t | ƒ ƒ qž | d	 k rè |
 j t	 | ƒ ƒ qž d
 j | ƒ GHt d ƒ qž W| t  |
 ƒ O} | j
 | ƒ r<| | c t  |
 ƒ O<q½t  ƒ  | | <| | c t  |
 ƒ O<q% | t  |	 ƒ O} | j
 | ƒ rš| | c t  |	 ƒ O<q% t  ƒ  | | <| | c t  |	 ƒ O<q% W| j ƒ  | d  k rÆt  ƒ  } xŸ | D]— } d } x1 | j ƒ  D]# } | | | k r | d 7} q q W| | k  rç| j | ƒ x; | j ƒ  D]* } | | | k rM| | j | ƒ qMqMWqçqçW| | 8} x7 | j ƒ  D]& } t | | ƒ d k r™| | =q™q™Wn  | | g S(   NRó   s   	i   s-   Error!!There is no annotation for protein {0}i    i   R{  R5  R   s%   This annotype format {0} is unknown!!(   R  Rõ   Rû   RK  R   R�   R‚   R   R5  R   R,  Rø   RÖ   R™   Rh  Ry  (   R  R’  t   annotypeR	  R
  R   R  RQ  Rˆ  t   annost
   typedannosR  t   removeannosR  (    (    s   lib/myutilities.pyt   annofilereaderß  s^    	


	
c   	      C   s¤   | g } | | k r | S|  j  | ƒ } t | ƒ d k r> | St t |  | d | ƒ ƒ } t t |  | d | ƒ ƒ } t | ƒ } | j | ƒ } t | j | ƒ ƒ S(   Ni    i   (   t
   successorsR   R  t   upperpartnodesfinderRž  R´  (	   RŽ   R‘   t	   basenodesR'  t   suclistR«  R¬  t   set3R  (    (    s   lib/myutilities.pyR0    s    	c         C   sp   | j  |  ƒ } t | ƒ d k r; t ƒ  } | j |  ƒ | St ƒ  } x! | D] } | t | | ƒ O} qK W| Sd  S(   Ni    (   R/  R   R  Rh  t   subleavesfinder(   R‘   RŽ   R2  t   retsett   unionsett   suc(    (    s   lib/myutilities.pyR4  ,  s    		c         C   sM   | j  |  ƒ } t ƒ  } | j |  ƒ x! | D] } | t | | ƒ O} q, W| S(   N(   R/  R  Rh  t   suballnodesfinder(   R‘   RŽ   R2  R6  R7  (    (    s   lib/myutilities.pyR8  9  s    	c         C   sZ   t  j |  ƒ } xD | j ƒ  D]6 } t | |  ƒ } x | D] } | j | | ƒ q8 Wq W| S(   N(   R‡   R  R†   R8  R  (   RŽ   t   retGR‘   t   subnodest   subnode(    (    s   lib/myutilities.pyt   tree2dagC  s    c         C   sZ   t  j |  ƒ } xD | j ƒ  D]6 } t | |  ƒ } x | D] } | j | | ƒ q8 Wq W| S(   N(   R‡   R  R†   R8  R  (   RŽ   R9  R‘   R:  R;  (    (    s   lib/myutilities.pyt   dag2dagK  s    c         C   sb   t  | d ƒ } xB |  j ƒ  D]4 } x+ |  | D] } | j d j | | ƒ ƒ q- Wq W| j ƒ  d  S(   NRò   s   {0}	{1}
(   Rõ   R™   Rö   R�   Rø   (   R	  t   vicutannofilenameR   Rˆ  R)  (    (    s   lib/myutilities.pyt   writevicutannoT  s
    !c         C   s  t  |  d ƒ } t  | d ƒ } t ƒ  } t ƒ  } t ƒ  } t } x¼| D]´}	 |	 j ƒ  }	 |	 d k r‹ t } d }
 d j |
 |	 d ƒ }
 qF n  | rF d j |
 |	 d ƒ }
 |	 j d ƒ rØ |	 j ƒ  } t | d d	 ƒ } qú|	 j d
 ƒ rê qú|	 j d ƒ r„|	 j ƒ  } | d d k r%| j	 | ƒ q÷| d d k rE| j	 | ƒ q÷| d d k re| j	 | ƒ q÷d j | d ƒ GHt
 d ƒ qú|	 j d ƒ r–qú|	 j d ƒ r¨qú|	 j d ƒ rºqú|	 j d ƒ rÌqú|	 sút } | | k r÷| j |
 ƒ q÷qúqF qF W| j ƒ  | j ƒ  d  S(   NRó   Rò   s   [Term]Rë   s	   {0}{1}{2}s   
s   id:i   i   s   name: s
   namespace:RY  RZ  R[  s!   ERROR: Namespace {0} is UNKNOWN!!s   is_a:s   is_obsolete:s   relationship:s   intersection_of:(   Rõ   R  R#  Rû   RÏ   R�   RJ  RK  R5  Rh  R‚   Rö   Rø   (   t   slimfilet   outslimfilet   annotationsR   RÚ  R]  R^  R_  RV  R  t	   templinesRa  R‘   (    (    s   lib/myutilities.pyt   modifyslimfile]  sX    			
c         C   s  t  |  d ƒ } t ƒ  } t ƒ  } t ƒ  } t } xp| D]h} | j ƒ  } | d k ra t } q7 n  | r7 | j d ƒ r™ | j ƒ  } t | d d ƒ }	 qŸ| j d ƒ r« qŸ| j d ƒ rE| j ƒ  } | d d k ræ | j |	 ƒ qœ| d d	 k r| j |	 ƒ qœ| d d
 k r&| j |	 ƒ qœd j	 | d ƒ GHt
 d ƒ qŸ| j d ƒ rWqŸ| j d ƒ riqŸ| j d ƒ r{qŸ| j d ƒ r�qŸ| sŸt } qŸq7 q7 W| j ƒ  t ƒ  }
 | d k rÏ|
 | O}
 n@ | d k rè|
 | O}
 n' | d k r|
 | O}
 n d j	 | ƒ GH|
 S(   NRó   s   [Term]s   id:i   i   s   name: s
   namespace:RY  RZ  R[  s!   ERROR: Namespace {0} is UNKNOWN!!s   is_a:s   is_obsolete:s   relationship:s   intersection_of:Rp  Rn  Ro  s$   ERROR: this annotype{0} is unknown!!(   Rõ   R  R#  Rû   RÏ   RJ  RK  R5  Rh  R�   R‚   Rø   (   R  R*  R   R]  R^  R_  RV  R  Ra  R‘   t   allset(    (    s   lib/myutilities.pyt   readslimfile�  s\    			
	c         C   s�   i  } t  |  d ƒ } xi | D]a } | j ƒ  } | j d ƒ } | d } t t | d ƒ ƒ } | j | ƒ ss t ‚ | | | <q W| j ƒ  | S(   NRó   s   	i    i   (   Rõ   Rû   RK  R  R´  R,  R   Rø   (   t   annofilenameR$  R   R  RQ  R™  R+  (    (    s   lib/myutilities.pyt   readcomplexannotationsÅ  s    

c         C   s  | d k r t  } n t } i  } i  } t |  d ƒ } x#| D]}	 |	 j ƒ  }	 |	 j d ƒ rd q= n  |	 j d ƒ }
 |
 d j ƒ  } |
 d j ƒ  } | j | ƒ s² t ƒ  | | <n  t ƒ  } | j	 | ƒ t
 |
 d ƒ d k r| t |
 d j ƒ  j d	 ƒ ƒ O} n  | | c | O<|
 d
 d d !d k rBt |
 d
 d
 ƒ } n t |
 d d
 ƒ } | rt ƒ  } | r¶xd | D]= } | | j ƒ  k rr| j | | ƒ r¯| j	 | ƒ q¯qrqrWn | | k rÒ| j	 | ƒ n  t
 | ƒ d k rX| j | ƒ r| | c | O<q| | | <qXq= t ƒ  } | j	 | ƒ | j | ƒ rN| | c | O<q= | | | <q= W| j ƒ  x8 | j ƒ  D]* } | | | k rs| | j | ƒ qsqsWi  } xW | j ƒ  D]I } t | ƒ } x& | | D] } | | t | ƒ } qÑW| | | | <q´W| S(   Ns   -1Ró   R   s   	i   i   i
   i    Rt  i   t   GOi   (   R#  RÏ   Rõ   Rû   RJ  RK  Rx  R,  R  Rh  R   R5  R†   R÷   Rø   R™   Ry  R{  (   R  t   specificannoRB  R|  R>  t   detailedt   temppro2functionR}  R   R  RQ  t
   uniquenamet   geneR…  Rm  t   ontosetR  R‘   R$  R™  (    (    s   lib/myutilities.pyt   readGOannotationsÓ  sh    		&		
c         C   sõ  t  j ƒ  } t |  d ƒ } x³ | D]« } | j ƒ  } | d k rF q" n  | j d ƒ s" | j d ƒ rj q" n  g  } x0 | j ƒ  D]" } | d k r} | j | ƒ q} q} W| d } d j | d ƒ } | j | ƒ q" W| j	 ƒ  x¥t
 d t | j ƒ  ƒ ƒ D]ˆ}	 | j ƒ  |	 }
 |
 j d ƒ } x`t
 |	 d t | j ƒ  ƒ ƒ D]?} | j ƒ  | } | j d ƒ } |
 j | ƒ rît | ƒ t | ƒ d k rît } x: t
 d t | ƒ ƒ D]# } | | | | k r¨t } q¨q¨W| rë| j | |
 ƒ qëqîn  | j |
 ƒ r<t | ƒ t | ƒ d k r{t } x: t
 d t | ƒ ƒ D]# } | | | | k r5t } q5q5W| rx| j |
 | ƒ qxq{q<q<Wq÷ WxB | j ƒ  D]4 } t | j | ƒ ƒ d k r�| j | | ƒ q�q�W| j | ƒ | j t  j | ƒ d ƒ } | S(	   NRó   Rë   R   RE  i    RG  i   RH  (   R‡   RI  Rõ   Rû   RJ  RK  R   Rô   R  Rø   R   R   R†   RÏ   R#  R  RD  RL  RM  (   RN  R?  RO  R   R  RQ  R  RR  RS  Rp   R  RT  Rs   R  RU  RV  R$   R‘   (    (    s   lib/myutilities.pyt   complexontoreader  sX    

"&!c         C   s€   t  | d ƒ } x` |  j ƒ  D]R } t | ƒ } x& |  | D] } | d t | ƒ } q9 W| d } | j | ƒ q W| j ƒ  d  S(   NRò   s   	s   
(   Rõ   R™   R{  Rö   Rø   (   t	   estimatedR  R   Rˆ  R  t   fonk(    (    s   lib/myutilities.pyt   estimate2fileO  s    
c         C   s+   t  ƒ  } x |  D] } | j | ƒ q W| S(   N(   R  Rž  (   t	   multisetsR5  t   multiset(    (    s   lib/myutilities.pyt   setcombiner[  s    	c         C   sñ   i  } xä |  j  ƒ  D]Ö } t |  | ƒ t k sE t |  | ƒ t k rž x¡ |  | D]G } | j | ƒ ry | | j | ƒ qP t ƒ  | | <| | j | ƒ qP Wq |  | } | j | ƒ rË | | j | ƒ q t ƒ  | | <| | j | ƒ q W| S(   N(   R™   t   typeR  R´  R,  Rh  (   t   indictt   outdictt   mykeyt   myvalue(    (    s   lib/myutilities.pyt   invert_dictb  s    ,
c         C   sÊ   t  | d ƒ } d } xŽ |  D]† } t | d ƒ } t | d ƒ } | | k r_ | | d } n  | | k r| | | d } n  | j d j | | | ƒ ƒ | d 8} q W| j ƒ  | d | k sÆ t ‚ d  S(   NRò   iÿÿÿÿi    i   s   {0}	{1}	{2}
(   Rõ   R5  Rö   R�   Rø   R   (   t   hiert   treefilenamet   nodenumR   t   internalnodeR"   R  R  (    (    s   lib/myutilities.pyt   hier2vicuttreey  s    
c   
      C   s“  t  j |  j ƒ  |  j ƒ  f d t  j ƒ} | r« xì t d |  j ƒ  ƒ D]^ } xU t | d |  j ƒ  ƒ D]: } d t |  | | ƒ | | | <| | | | | | <qf WqF Wnt i  } xk t |  j ƒ  ƒ D]W \ } } | | | <x> t |  j ƒ  ƒ D]* \ } }	 d t |  | |	 ƒ | | | <qí WqÄ WxY t |  j ƒ  ƒ D]E } x< t |  j ƒ  ƒ D]( } | | | | | | k sKt ‚ qKWq2W| r…| S| | f Sd  S(   Nt   dtypei    i   (	   R.   R^   R   R   R³  t   jaccardt	   enumerateR†   R   (
   RŽ   t   numberincidest   AR  R  t	   ids2nodesR,   t   ut   jt   v(    (    s   lib/myutilities.pyt   jaccard_matrixŽ  s"    * !
&*c         C   sV   t  |  j | ƒ ƒ } t  |  j | ƒ ƒ } t t | j | ƒ ƒ ƒ t | j | ƒ ƒ S(   s€    Computes the jaccard coefficient of u and v (could be supernodes).
        J(u,v) = #mutual neighbors / # total neighbors.
    (   R  Rµ  R   R   R�  Rž  (   RŽ   Ri  Rk  RK   RL   (    (    s   lib/myutilities.pyRd  ¥  s    c   
      C   s“  t  j |  j ƒ  |  j ƒ  f d t  j ƒ} | r« xì t d |  j ƒ  ƒ D]^ } xU t | d |  j ƒ  ƒ D]: } d t |  | | ƒ | | | <| | | | | | <qf WqF Wnt i  } xk t |  j ƒ  ƒ D]W \ } } | | | <x> t |  j ƒ  ƒ D]* \ } }	 d t |  | |	 ƒ | | | <qí WqÄ WxY t |  j ƒ  ƒ D]E } x< t |  j ƒ  ƒ D]( } | | | | | | k sKt ‚ qKWq2W| r…| S| | f Sd  S(   NRc  i    i   (	   R.   R^   R   R   R³  t   diceRe  R†   R   (
   RŽ   Rf  Rg  R  R  Rh  R,   Ri  Rj  Rk  (    (    s   lib/myutilities.pyt   dice_matrix®  s"    * !
&*c         C   su   t  |  j | ƒ ƒ } t  |  j | ƒ ƒ } | j | ƒ | j | ƒ t d t | j | ƒ ƒ ƒ t | ƒ t | ƒ S(   sV    Computes the dice coefficient for two nodes (parameter to include
        self).
    g       @(   R  Rµ  Rh  R   R   R�  (   RŽ   Ri  Rk  RK   RL   (    (    s   lib/myutilities.pyRm  Å  s
    c         C   sV   i  } x= t  | ƒ D]/ \ } } | j | t g  ƒ ƒ j |  | ƒ q Wt | ƒ | f S(   s<    Reads the k-means output into nodes2modules,modules2nodes. (   Re  t
   setdefaultR  Rh  R]  (   Rh  t
   clusteridst   m2nR,   Ri  (    (    s   lib/myutilities.pyt   process_kmeansÐ  s    'c      	   C   sj   t  j d |  d d d d d | ƒ \ } } } t | ƒ t |  ƒ k sK t ‚ t | | ƒ \ } } | | f S(   sX    Runs k-means using the Pycluster package for the given number of
        clusters.
    R  t   npassid   t   distRg   t	   nclusters(   t	   Pyclustert   kclusterR   R   Rr  (   Rg  Rh  t   ncRp  t   errort   nfoundt   nodes2modulest   modules2nodes(    (    s   lib/myutilities.pyt   kmeans×  s    -c         C   sy   i  } t  |  d ƒ } t j ƒ  j d ƒ } t | ƒ d k rY d GHt | ƒ GHt d ƒ n  | d | | d <| j ƒ  | S(   NRó   s   	i   Ry  i   i    (   Rõ   R  Rû   RK  R   R‚   Rø   (   R  t	   count2proR   RQ  (    (    s   lib/myutilities.pyt   ppimapreaderä  s    
c         C   sŒ   | d k  r t  ƒ  S| d k r2 t  |  j | ƒ ƒ St  ƒ  } t j |  | ƒ } x4 | j ƒ  D]& } | | | k rZ | j | ƒ qZ qZ W| Sd  S(   Ni   (   R  Rµ  R‡   t"   single_source_shortest_path_lengthR™   Rh  (   RŽ   t	   startnodeR³   R'   t   propathR‘   (    (    s   lib/myutilities.pyt   nodeswithindistanceö  s    	(_   Rù   t   networkxR‡   t   sysRî   Rì   R  R   R.   t   scipyR‰   t   scipy.statsR    t
   scipy.miscR   t   mathR   R)   R…   R—   R¤   RÃ   R×   Ré   R  R
  R  R!  R%  R3  R;  RA  RC  R<  RX  Rf  R#  Rn  Ro  Rp  Rw  Rv  R‡  R‰  R�  R�  Rš  R±  R·  RÆ  RÌ  RÎ  RÐ  RÒ  RÓ  RÔ  RÏ   RÝ  Rß  Rã  Rç  Ré  R  R  R  R  R  R  R#  R)  RÖ   R.  R0  R4  R8  R<  R=  R?  RD  RF  RH  RP  RQ  RT  RW  R]  Rb  Rl  Rd  Rn  Rm  Rr  R}  R  Rƒ  (    (    (    s   lib/myutilities.pyt   <module>   sà   		Û	*c	 	!	7								7	@@@E			?	?		?	1	,	'B						2#	
		$			5<			
						2	6	I3											"