ó
´ öSc           @   s«  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m 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 m Z e j ƒ  Z d  d l m Z m Z d Z d Z d	 „  Z d d
 „ Z d „  Z d „  Z d „  Z e d „ Z d „  Z  d e d „ Z! d d d „ Z" d „  Z# d „  Z$ d d „ Z% d e& f d „  ƒ  YZ' d Z( d Z) d „  Z* d „  d „  d „ Z+ d S(   iÿÿÿÿN(   t	   decorator(   t   makedirsi   (   t   dependencies(   t   benchmarking(   t   dumpt   loads   .picklec         C   sI   | s" | j  d ƒ s" t | ƒ ‚ |  j  d ƒ r9 | |  S| d |  Sd  S(   Nt   ^t   .t   >(   t
   startswitht   AssertionError(   t   formatt	   cache_tag(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt
   get_suffix   s    "c         C   s   d |  k r1 |  j  d d ƒ \ } } d | } n0 d |  k sI t |  ƒ ‚ |  j  d d ƒ \ } } | d  k	 r} | | k r} d  S| S(   NR   i   R   (   t   rsplitR
   t   None(   t   suffixR   t   tagR   (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   format_from_suffix   s    c          C   s   d d l  m }  d |  j ƒ  S(   Ni   (   t   customs   %s/cache(   t    R   t   get_tmp_dir(   R   (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt	   cache_dir)   s    c         C   s`   |  d  k r4 | d  k s t ‚ t j j t ƒ  d ƒ St j j t ƒ  |  | pO d ƒ j d ƒ Sd  S(   Nt   _s   utf-8(   R   R
   t   ost   patht   joinR   t   encode(   t   enamet	   prop_name(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   cache_file_stem;   s
    c         C   sv  t  |  | ƒ } y) t | t ƒ  } t | ƒ } Wd  QXWnM t k
 ra t j d | t ƒ d  St k
 r‡ t j d | t ƒ d  SXd d l	 m
 } | j ƒ  } | d } | d  k	 rÔ | d | k rÔ | t f Sx•| D]} | t j k rö qÛ n  | t j k r	d  St | ƒ d k s't | ƒ ‚ | \ }	 }
 } d d l	 m } | j |	 ƒ } | d  k rt|
 d	 k rhd  SqÛ |
 d
 k r¢| t j | j ƒ  ƒ k rhd  SqÛ |
 d k rÐ| t j | j ƒ  ƒ k rhd  SqÛ |
 d k rþ| t j | j ƒ  ƒ k rhd  SqÛ |
 d k rd  S|
 d	 k rd  S| j |
 ƒ } | d  k rL| d  k	 rhd  SqÛ | t j | j ƒ k rÛ d  SqÛ W| t f S(   Ns   EOF reading s   IOError reading i   (   t   dbR   t   revisioni   (   t	   structuret   __existst   __parentt
   __childrent
   __propvalst	   __fragile(   R   t   opent   INFO_SUFFIXR   t   EOFErrorR   t   infoR   t   IOErrorR   R   t   get_revisiont   FalseR   t   OMNISCIENCEt   REVISIONt   lenR
   R!   t   get_elementt   get_hasht   get_parent_enamet   get_seq_hasht   get_childrent
   list_propst   get_propvalt   valuet   True(   R   R   t   stemt   filR*   R   t   revt   depst   dept   denamet   dpnamet   hshR!   t   delementt   dpropval(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   get_deps_infoE   sd    

			c      	   C   s6  |  | f } | t  j k r= | t  j | k r= t  j | | S| t k r[ t |  | ƒ } n  | d  k rk d  S| \ } } i | d 6} t |  | ƒ } yf t | | ƒ P }	 |	 j ƒ  }
 d d  l } t	 | ƒ | j
 k rè t |
 d ƒ }
 n  |
 | d <Wd  QXWn t k
 rn Xyp t | | t ƒ V }	 t |	 ƒ } | d | d <d | k r^| d | d <n d | k svt | ƒ ‚ Wd  QXWn+ t k
 rªt j d | | t ƒ d  SX|  | f } | r÷| t  j k rà| t  j | | <q.i | | 6t  j | <n7 | t  j k r| t  j | | <n i | | 6t  j | <| Sd  S(   NR   iÿÿÿÿs   utf-8R8   t   metadatas   IOError (   t   cache_statet	   validatedR-   RD   R   R   R'   t   readt
   conversionR   t   UNICODE_FORMATSt   unicodeR+   t   SPECIFIC_SUFFIXR   R
   R   R*   t	   transient(   R   R   R   t	   deps_infot   pvtR=   t   rewritet   retR:   R;   t   valRI   t   specific(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   cache_data_for†   sN    ""c         C   sÌ  d d  l  } | s/ | d d k s/ t | ƒ ‚ t ƒ  } t |  | ƒ } | d  k	 rgt |  | ƒ } xˆ | j  | | d t ƒ D]k } t j j	 | ƒ t
 t ƒ  } | j d d ƒ \ } } d | k r~ d | t k r~ | j d | ƒ q~ q~ Wxw | j  | | d t ƒ D]W } t j j	 | ƒ t
 t ƒ  } | j d d ƒ \ } } d | k r	| j | ƒ q	q	Wn  |  | f }	 |	 t j k rÂx= t j |	 D]+ }
 t |
 | ƒ } | r| j | ƒ qqWn  | | f S(	   Niÿÿÿÿi    R   s   .*R   i   s   >*R   (   t   globR
   t   setRD   R   R   RL   R   R   t   basenameR0   t   splitR(   t   addRF   RM   R   (   R   R   R   RU   RQ   RN   R:   t   fnamet   sufRO   R   t   fmt(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   cached_formats»   s.    #	""R   c         C   s©   |  | f } t  | | ƒ } | t j k ri | t j | k ri t j | | } d | k s¥ t | ƒ ‚ n< t |  | | d | ƒ} | d  k s¥ d | k s¥ t | ƒ ‚ | S(   NRE   RN   (   R   RF   RM   R
   RT   R   (   R   R   R   R   RN   RO   R   t
   cache_data(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   get_from_cacheÔ   s    	$c         C   s  xT | D]L } t  | ƒ d k r | t j t j f k r t ƒ  t sS t | ƒ ‚ q q W|  | f }	 t | | ƒ }
 |	 t j	 k rÕ | d  k rÕ t |  | |
 ƒ } | d  k r» i  t j	 |	 <qÒ i | |
 6t j	 |	 <qÕ n  t d | d | d t | ƒ ƒ t j	 |	 |
 <d  S(   Ni   R8   RE   R   (   R0   R   R.   R/   t   invalidate_cacheR-   R
   R   RF   RM   R   RT   t   dictt	   frozenset(   R   R   R   R8   R=   RE   R^   R   t   dRO   R   (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   cache_propvalâ   s    c          C   sX   i  t  _ i  t  _ y t j t ƒ  ƒ Wn+ t k
 rS }  |  j t j k rM qT ‚  n Xd  S(   N(	   RF   RM   RG   t   shutilt   rmtreeR   t   OSErrort   errnot   ENOENT(   t   e(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyR`   õ   s    		c         C   s   | t  j |  <d  S(   N(   RF   t   memo(   t   keyR8   (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   set_memo  s    c         C   s   t  j j |  | ƒ S(   N(   RF   Rk   t   get(   Rl   t   default(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   get_memo  s    t
   cache_hookc           B   sD   e  Z e d  „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   c           C   s   t  j ƒ  d  S(   N(   Rq   t   clear(    (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   begin  s    c           C   s   i  t  _ i  t  _ i  t  _ d  S(   N(   RF   RM   RG   Rk   (    (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyRr     s    		c          C   s:  d d l  m }  m } m } xt j D]\ } } t | | ƒ } t ƒ  } i  } | | f } xE t j | D]6 }	 t t j | |	 ƒ | |	 <| j	 | |	 d ƒ qj Wt
 j | k s¹ t ‚ t t j j | ƒ ƒ xâ| D]Ú}	 | |	 d }
 i | |	 d d 6} t |
 t ƒ st |
 t ƒ rßt |
 t ƒ ret |	 ƒ | j k sSt |
 |	 f ƒ ‚ |
 j d ƒ }
 n' t |	 ƒ | j k sŒt |
 |	 f ƒ ‚ t d | |	 ƒ : t j d t d	 | j ƒ  ƒ } | j |
 ƒ | j ƒ  Wd  QXn d  } |
 | d <t d
 | |	 t ƒ = t j d t d	 | j ƒ  ƒ } t  | | j! ƒ | j ƒ  Wd  QX| d  k	 rlt j" | j# | |	 ƒ n) y t j$ | |	 ƒ Wn t% k
 r”n Xt j" | j# | |	 t ƒ qÖ Wt d
 | t& ƒ Q t j d t d	 | j ƒ  ƒ } t  i | d 6|  j' ƒ  d 6| j! ƒ | j ƒ  Wd  QXt j" | j# | t& ƒ q& Wd  S(   Ni   (   R   RI   R   R   R8   RE   s   utf-8s   writing t   deletet   dirs   dumping R    ((   R   R   RI   R   RF   RM   R   RV   Ra   t   updateR   t	   DISCORDIAR
   R   R   R   t   dirnamet
   isinstanceRK   t   strR   RJ   R   R   t   tempfilet   NamedTemporaryFileR-   R   t   writet   closeR   RL   R   t   filet   renamet   namet   removeRg   R(   R,   (   R   RI   R   R   R   t   deststemR=   t   formatsRO   R   RR   t   specdicR;   RS   (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   commit  sf    					
	c           C   s   t  ` t  ` t  ` d  S(   N(   RF   RM   RG   Rk   (    (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   abortK  s    (   t   __name__t
   __module__t   staticmethodRs   Rr   R†   R‡   (    (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyRq     s   9t
   _metadata_t   mdc            s   d  ‡  f d † } t | ƒ S(   Nc            s£   | d  k s t ‚ t | j t ˆ  t ƒ } | d  k r• t j ƒ  } t d ˆ  | j f ƒ 4 |  | | ƒ } t	 | j t ˆ  t | | i  ƒ Wd  QXn
 | d } | S(   Ns   calculating %s metadata for %sR8   (
   R   R
   R_   R   t   METADATAt   METADATA_FMTR   t   DependenciesR   Rd   (   t   funct   elementR=   t   cache_entryR8   (   Rl   (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   metadata_helperT  s    	
(   R   R    (   Rl   R“   (    (   Rl   sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   metadata_cachedS  s    c         C   s   |  S(   N(    (   t   i(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   <lambda>d  s    c            s1   d ˆ  k s t  ‚ ‡  ‡ ‡ f d †  } t | ƒ S(   Nt   :c            s  d ˆ d } d j  d „  | Dƒ ƒ } ˆ  rW | d d j  ‡  f d †  ˆ  Dƒ ƒ 7} n  | t j | ƒ j ƒ  d  7} t d  d  d | ƒ} | d  k ró t d | ƒ I |  | ˆ  Ž  } t j ƒ  } | j	 ƒ  t
 d  d  | ˆ | ƒ | i  ƒ Wd  QXn ˆ | d	 ƒ } | S(
   NR   R—   s   , c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   repr(   t   .0t   a(    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pys	   <genexpr>k  s    c         3   s'   |  ] } | d  t  ˆ  | ƒ Vq d S(   t   =N(   R˜   (   R™   t   k(   t   kw(    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pys	   <genexpr>m  s    i   R   s#   calculating %s args_cached metadataR8   (   R   t   hashlibt   md5t	   hexdigestR_   R   R   R   R   t   addRevisionDepRd   (   R   t   argsR   t   cachekeyt   argbitR’   R8   R=   (   Rl   t	   serializet   unserialize(   R   sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   args_helperf  s    *
((   R
   R    (   Rl   R¥   R¦   R§   (    (   Rl   R¥   R¦   sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   args_cachedd  s    (,   t   sysR   R{   Re   R    t   warningsRh   t	   threadingt   copyRž   t   sockett   bazjunk.pathR   R   R   t	   benchmarkR   t   localRF   t   cPickleR   R   R(   RL   R   R   R   R   R   RD   R-   RT   R]   R_   Rd   R`   Rm   Rp   t   objectRq   R   RŽ   R”   R¨   (    (    (    sV   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/bazbase/cache.pyt   <module>   s<   0			
	A5			J	