ó
¦V]c           @@  s8  d  d l  m Z y d  d l m Z Wn e k
 r= e Z n Xy e Wn e k
 r_ e Z n Xd  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 e	 j j Z g  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z  e d „  ƒ Z! d „  Z" e j# d ƒ j$ Z% d „  Z& d „  Z' d d d „ Z) d d d „ Z* d „  Z+ d „  Z, e d „  ƒ Z- e d d d „ ƒ Z. d d e
 j/ e0 d „ Z1 d d& d  „  ƒ  YZ2 d! e3 f d" „  ƒ  YZ4 d# „  Z5 d$ „  Z6 d% „  Z7 d S('   i    (   t   absolute_import(   t
   basestringN(   t   contextmanagerc          C@  s   x t  D] }  |  j ƒ  q Wd  S(   N(   t   _function_cachest   clear(   t   cache(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   clear_function_caches   s    c         @  s>   i  ‰  t  j ˆ  ƒ t ƒ  ‰ ‡  ‡ ‡ f d †  } ˆ | _ | S(   Nc          @  s9   ˆ  j  |  ˆ ƒ } | ˆ k r5 ˆ |  Œ  } ˆ  |  <n  | S(   N(   t   get(   t   argst   res(   R   t   ft
   uncomputed(    s+   lib/python2.7/site-packages/Cython/Utils.pyt   wrapper%   s    (   R   t   appendt   objectt   uncached(   R
   R   (    (   R   R
   R   s+   lib/python2.7/site-packages/Cython/Utils.pyt   cached_function!   s    		c         @  s#   d ˆ j  ‰  ‡  ‡ f d †  } | S(   Ns
   __%s_cachec         @  sf   t  |  ˆ  d  ƒ } | d  k r7 i  } t |  ˆ  | ƒ n  | | k rK | | Sˆ |  | Œ } | | <| S(   N(   t   getattrt   Nonet   setattr(   t   selfR   R   R	   (   t
   cache_nameR
   (    s+   lib/python2.7/site-packages/Cython/Utils.pyR   /   s    (   t   __name__(   R
   R   (    (   R   R
   s+   lib/python2.7/site-packages/Cython/Utils.pyt   cached_method-   s    	c         C@  s    t  j j |  ƒ \ } } | | S(   N(   t   ost   patht   splitext(   R   t   newsuft   baset   _(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   replace_suffix:   s    c         C@  s8   t  j j |  ƒ r" t  j |  ƒ n  t j |  d d d ƒS(   Nt   wt   encodings
   ISO-8859-1(   R   R   t   existst   unlinkt   codecst   open(   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   open_new_file?   s    c         C@  sh   y t  |  ƒ } Wn t k
 r# nA X| j d ƒ | j ƒ  | rd t j |  | j | j d f ƒ n  d  S(   NsN   #error Do not use this file, it is the result of a failed Cython compilation.
i   (   R%   t   EnvironmentErrort   writet   closeR   t   utimet   st_atimet   st_mtime(   R   t   stR
   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   castrate_fileN   s    
c         C@  s   t  |  ƒ } | | k S(   N(   t   modification_time(   R   t   timet   ftime(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   file_newer_than^   s    c         C@  sA   y t  j |  ƒ Wn) t k
 r< t  j j |  ƒ s= ‚  q= n Xd  S(   N(   R   t   makedirst   OSErrorR   t   isdir(   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   safe_makedirsc   s
    c         C@  sv   t  j j | t  j j |  ƒ ƒ } y t | ƒ } Wn t k
 rN t | ƒ n Xt |  | ƒ sb d St j	 |  | ƒ d S(   sÇ   
    Copy file sourcefile to directory destdir (creating it if needed),
    preserving metadata. If the destination file exists and is not
    older than the source file, the copying is skipped.
    N(
   R   R   t   joint   basenameR.   R3   R5   R1   t   shutilt   copy2(   t
   sourcefilet   destdirt   destfilet   desttime(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   copy_file_to_dir_if_newerk   s    !c         C@  s@   t  j j |  ƒ } |  | k r" | St | ƒ r8 t | ƒ S| Sd  S(   N(   R   R   t   dirnamet   is_package_dirt   find_root_package_dir(   t	   file_patht   dir(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyRA   ~   s    
c         C@  s:   x3 | D]+ } t  j j |  | ƒ }  t |  ƒ s d  Sq W|  S(   N(   R   R   R6   R@   R   (   RC   t   package_namesR?   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   check_package_dirˆ   s
    c         C@  s:   x3 d D]+ } t  j j |  | ƒ } t | ƒ r d Sq Wd  S(   Ns   __init__.pys   __init__.pycs   __init__.pyxs   __init__.pxdi   (   s   __init__.pys   __init__.pycs   __init__.pyxs   __init__.pxd(   R   R   R6   t   path_exists(   t   dir_patht   filenameR   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyR@      s      
c         C@  sµ   t  j j |  ƒ r t Sy‡ t } t | d d  ƒ } | rœ t  j j |  ƒ } | j | ƒ rœ | t	 | ƒ d } y | j
 | ƒ t SWq™ t k
 r• t SXqœ n  Wn t k
 r° n Xt S(   Nt   archivei   (   R   R   R!   t   Truet
   __loader__R   R   t   normpatht
   startswitht   lent   get_datat   IOErrort   Falset	   NameError(   R   t   loadert   archive_pathRL   t   arcname(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyRF   š   s"    c         C@  sd   t  |  t ƒ r` y: t j ƒ  } | d  k r9 t j ƒ  } n  |  j | ƒ }  Wq` t k
 r\ q` Xn  |  S(   N(   t
   isinstancet   bytest   syst   getfilesystemencodingR   t   getdefaultencodingt   decodet   UnicodeDecodeError(   RH   t   filename_encoding(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   decode_filename´   s    s   (\w*coding)[:=]\s*([-\w.]+)c         C@  sÝ   d } d } xH t  | ƒ d k  rV |  j d ƒ } | | 7} | j d ƒ } | s Pq q Wt | d ƒ } | r˜ | j d ƒ d k r˜ | j d ƒ j d	 ƒ St  | ƒ d k rÙ t | d ƒ } | rÙ | j d ƒ j d	 ƒ Sn  d
 S(   Nt    i   iô  s   
i    i   t   c_string_encodingi   s	   iso8859-1s   UTF-8(    (   RN   t   readt   splitt   _match_file_encodingt   groupR[   (   R
   t   linest   startt   datat   m(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   detect_opened_file_encodingÄ   s     
c         C@  s)   |  j  d ƒ d k r% |  j d ƒ n  d S(   s¢   
    Read past a BOM at the beginning of a source file.
    This could be added to the scanner, but it's *substantially* easier
    to keep it at this level.
    i   u   ï»¿i    N(   Ra   t   seek(   R
   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   skip_bomÚ   s    c         C@  s  d  } yt | d  k r^ t j |  d ƒ } t | ƒ } | j d ƒ t j | d | d | ƒ} n t j |  d | d | ƒ} Wnw t k
 ró t j j	 |  ƒ r¢ ‚  n  y4 t
 } |  j | j ƒ rÕ t | |  | | ƒ } n  Wqô t t f k
 rï qô Xn X| d  k rt |  ƒ ‚ n  t | ƒ | S(   Nt   rbi    R    t   errors(   R   t   ioR$   Ri   Rj   t   TextIOWrapperR3   R   R   R!   RK   RM   RI   t   open_source_from_loaderRR   t   AttributeErrort   FileNotFoundErrorRk   (   t   source_filenameR    t   error_handlingt   streamR
   RS   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   open_source_fileä   s.    
c         C@  sZ   t  j j | ƒ } | t |  j ƒ d } |  j | ƒ } t j t j | ƒ d | d | ƒS(   Ni   R    Rm   (	   R   R   RL   RN   RI   RO   Rn   Ro   t   BytesIO(   RS   Rs   R    Rt   t   nrmpathRU   Rg   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyRp     s    c         C@  sý   t  } |  d  d k r) t } |  d }  n  t |  ƒ d k  rM t |  d ƒ }  n¡ |  d d k rß |  d } | d k r‰ t |  d d ƒ }  qî | d k r« t |  d d	 ƒ }  qî | d
 k rÍ t |  d d ƒ }  qî t |  d	 ƒ }  n t |  d ƒ }  | rù |  S|  S(   Ni   t   -i   i    t   0t   xXi   t   oOi   t   bB(   RQ   RJ   RN   t   int(   t   valuet   is_negt   literal_type(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   str_to_number  s"    
c         C@  s9   t  |  t ƒ r t |  ƒ }  n  d |  k o5 d k  n S(   Ni   i   I   €    i   €I   €    (   RV   R   R‚   (   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   long_literal*  s    c          C@  s²   d t  j k r t  j d Sd	 }  t  j d k rh t j d k rS t  j j d ƒ }  qh t  j j d ƒ }  n  |  r“ t  j j	 |  ƒ r“ t  j j
 |  d ƒ St  j j t  j j
 d d ƒ ƒ S(
   sé   
    Return the base directory containing Cython's caches.

    Priority:

    1. CYTHON_CACHE_DIR
    2. (OS X): ~/Library/Caches/Cython
       (posix not OS X): XDG_CACHE_HOME/cython if XDG_CACHE_HOME defined
    3. ~/.cython

    t   CYTHON_CACHE_DIRt   posixt   darwins   ~/Library/Cachest   XDG_CACHE_HOMEt   cythont   ~s   .cythonN(   R   t   environR   t   nameRX   t   platformR   t
   expanduserR   R4   R6   (   t   parent(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   get_cython_cache_dir0  s    i   c         #@  só   d  ‰ } t j |  ƒ } zÅ t j ƒ  \ ‰ } t j | |  ƒ zr t j | ƒ g  ‰  ‡  ‡ f d †  } ‡  ‡ f d †  } d d l m } | d | ƒ } t | _	 | j
 ƒ  | VWd  t j | |  ƒ | d  k	 rÜ | j ƒ  n  XWd  t j | ƒ Xd  S(   Nc          @  sO   z: x3 t  r8 t j ˆ d ƒ }  |  r4 ˆ  j |  ƒ q Pq WWd  t j ˆ ƒ Xd  S(   Niè  (   RJ   R   Ra   R   R(   (   t   d(   Rg   t   pipe_in(    s+   lib/python2.7/site-packages/Cython/Utils.pyt   copyZ  s    		c          @  s+   d j  ˆ  ƒ }  ˆ r' |  j ˆ ƒ }  n  |  S(   NR_   (   R6   R[   (   t   output(   Rg   R    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt
   get_outpute  s    i    (   t   Threadt   target(   R   R   t   dupt   pipet   dup2R(   t	   threadingR•   RJ   t   daemonRf   R6   (   Ru   R    t   tt   orig_streamt   pipe_outR’   R”   R•   (    (   Rg   R    R‘   s+   lib/python2.7/site-packages/Cython/Utils.pyt   captured_fdO  s&    
	
	s   
c         C@  s   | r | j  | ƒ n  | j ƒ  y | j } Wn t k
 rF | } n X| j  |  ƒ | rj | j  | ƒ n  | r} | j ƒ  n  d  S(   N(   R'   t   flusht   bufferRq   (   t   st   header_textt   endt   fileR    t   out(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   print_bytesx  s    

t   LazyStrc           B@  s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C@  s   | |  _  d  S(   N(   t   callback(   R   R©   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __init__‡  s    c         C@  s
   |  j  ƒ  S(   N(   R©   (   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __str__‰  s    c         C@  s
   |  j  ƒ  S(   N(   R©   (   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __repr__‹  s    c         C@  s   |  j  ƒ  | S(   N(   R©   (   R   t   right(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __add__  s    c         C@  s   | |  j  ƒ  S(   N(   R©   (   R   t   left(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __radd__  s    (   R   t
   __module__Rª   R«   R¬   R®   R°   (    (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyR¨   †  s
   				t
   OrderedSetc           B@  s/   e  Z d d  „ Z d „  Z d „  Z d „  Z RS(   c         C@  s&   g  |  _  t ƒ  |  _ |  j | ƒ d  S(   N(   t   _listt   sett   _sett   update(   R   t   elements(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyRª   ”  s    	c         C@  s   t  |  j ƒ S(   N(   t   iterR³   (   R   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   __iter__˜  s    c         C@  s"   x | D] } |  j  | ƒ q Wd  S(   N(   t   add(   R   R·   t   e(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyR¶   š  s    c         C@  s6   | |  j  k r2 |  j j | ƒ |  j  j | ƒ n  d  S(   N(   Rµ   R³   R   Rº   (   R   R»   (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyRº     s    (    (   R   R±   Rª   R¹   R¶   Rº   (    (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyR²   “  s   		c         @  s   ‡  f d †  } | S(   s6   Class decorator for creating a class with a metaclass.c         @  sœ   |  j  j ƒ  } | j d ƒ } | d  k	 rf t | t ƒ rE | g } n  x | D] } | j | ƒ qL Wn  | j d d  ƒ | j d d  ƒ ˆ  |  j |  j | ƒ S(   Nt	   __slots__t   __dict__t   __weakref__(	   R½   R’   R   R   RV   t   strt   popR   t	   __bases__(   t   clst	   orig_varst   slotst	   slots_var(   t	   metaclass(    s+   lib/python2.7/site-packages/Cython/Utils.pyR   §  s    (    (   RÆ   R   (    (   RÆ   s+   lib/python2.7/site-packages/Cython/Utils.pyt   add_metaclass¥  s    c         C@  s.   |  d k s |  j  d ƒ r* t d ƒ ‚ n  d  S(   NRˆ   s   cython.s;   cython is a special module, cannot be used as a module name(   RM   t
   ValueError(   t   full_module_name(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt$   raise_error_if_module_name_forbiddenµ  s    c         C@  sß   g  } d } x~ t  j d |  ƒ D]j } | d k rg i d d 6d d 6d d 6| } | d	 d	 g d
  } q | d k r | j t | ƒ ƒ q q W| d	 g d
 d  } | d
 c | 7<d	 } x | D] } | d >| } q¿ Wd | S(   sn   
    Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_HEX_VERSION).
    ið   s
   ([.abrc]+)t   at   bt   rci    i°   iÀ   i    i   t   .i   i   s   0x%08X(   RË   RÌ   RÍ   (   t   reRb   R   R~   (   t   version_stringt   digitst   release_statust   digitt
   hexversion(    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   build_hex_version»  s    (    (8   t
   __future__R    t   __builtin__R   t   ImportErrorR¿   Rr   RR   R3   R   RX   RÏ   Rn   R#   R8   t
   contextlibR   R   t   getmtimeR.   R   R   R   R   R   R%   R-   R1   R5   R>   RA   RE   R@   RF   R^   t   compilet   searchRc   Ri   Rk   R   Rv   Rp   R‚   Rƒ   R   RŸ   t   stdoutRJ   R§   R¨   R   R²   RÇ   RÊ   RÕ   (    (    (    s+   lib/python2.7/site-packages/Cython/Utils.pyt   <module>   s^   

									

			
!			(		