3
=]5                 @   s  d dl mZ yd dlmZ W n ek
r4   eZY nX ye W n ek
rV   eZY nX 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 e	jjZg Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zedd Zedd Z edd Z!dd  Z"ej#d!j$Z%d"d# Z&d$d% Z'dAd&d'Z(dBd(d)Z)d*d+ Z*d,d- Z+ed.d/ Z,edCd1d2Z-dd3e
j.d4fd5d6Z/G d7d8 d8Z0G d9d: d:e1Z2d;d< Z3d=d> Z4d?d@ Z5dS )D    )absolute_import)
basestringN)contextmanagerc              C   s   xt D ]} | j  qW d S )N)_function_cachesclear)cache r   \/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/Utils.pyclear_function_caches   s    
r
   c                s.   i  t j  t  fdd}|_|S )Nc                 s(    j | }|kr$|   } | < |S )N)get)argsres)r   f
uncomputedr   r	   wrapper%   s    z cached_function.<locals>.wrapper)r   appendobjectuncached)r   r   r   )r   r   r   r	   cached_function!   s    
r   c                s   dj    fdd}|S )Nz
__%s_cachec                sN   t |  d }|d kr$i }t|  | ||kr4|| S | f|  }||< |S )N)getattrsetattr)selfr   r   r   )
cache_namer   r   r	   r   /   s    zcached_method.<locals>.wrapper)__name__)r   r   r   )r   r   r	   cached_method-   s    
	r   c             C   s   t jj| \}}|| S )N)ospathsplitext)r   newsufbase_r   r   r	   replace_suffix:   s    r!   c             C   s&   t jj| rt j|  tj| dddS )Nwz
ISO-8859-1)encoding)r   r   existsunlinkcodecsopen)r   r   r   r	   open_new_file?   s    
r(   c             C   sT   yt | }W n tk
r    Y n0X |jd |j  |rPtj| |j|jd f d S )NzN#error Do not use this file, it is the result of a failed Cython compilation.
   )r(   EnvironmentErrorwritecloser   utimest_atimest_mtime)r   str   r   r   r	   castrate_fileN   s    r1   c             C   s   t | }||kS )N)modification_time)r   timeftimer   r   r	   file_newer_than^   s    r5   c             C   s6   yt j|  W n" tk
r0   t jj| s, Y nX d S )N)r   makedirsOSErrorr   isdir)r   r   r   r	   safe_makedirsc   s
    r9   c             C   s^   t jj|t jj| }yt|}W n tk
r>   t| Y nX t| |sNdS tj	| | dS )z
    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   joinbasenamer2   r7   r9   r5   shutilcopy2)
sourcefiledestdirdestfiledesttimer   r   r	   copy_file_to_dir_if_newerk   s    
rB   c             C   s0   t jj| }| |kr|S t|r(t|S |S d S )N)r   r   dirnameis_package_dirfind_root_package_dir)	file_pathdirr   r   r	   rE   ~   s    rE   c             C   s,   x&|D ]}t jj| |} t| sd S qW | S )N)r   r   r:   rD   )rG   package_namesrC   r   r   r	   check_package_dir   s
    
rI   c             C   s,   x&dD ]}t jj| |}t|rdS qW d S )N__init__.py__init__.pyc__init__.pyx__init__.pxdr)   )rJ   rK   rL   rM   )r   r   r:   path_exists)dir_pathfilenamer   r   r   r	   rD      s      rD   c             C   s   t jj| rdS yft}t|dd }|rtt jj| }|j|rt|t|d d  }y|j| dS  t	k
rr   dS X W n t
k
r   Y nX dS )NTarchiver)   F)r   r   r$   
__loader__r   normpath
startswithlenget_dataIOError	NameError)r   loaderarchive_pathrS   arcnamer   r   r	   rN      s"    


rN   c             C   sJ   t | trFy&tj }|d kr$tj }| j|} W n tk
rD   Y nX | S )N)
isinstancebytessysgetfilesystemencodinggetdefaultencodingdecodeUnicodeDecodeError)rP   filename_encodingr   r   r	   decode_filename   s    
rd   s   (\w*coding)[:=]\s*([-\w.]+)c             C   s   f }d}x2t |dk r:| jd}||7 }|jd}|s
P q
W t|d }|rj|jddkrj|jdjd	S t |dkrt|d }|r|jdjd	S d
S )N       i     
r   r)   s   c_string_encoding   z	iso8859-1zUTF-8)rU   readsplit_match_file_encodinggroupra   )r   linesstartdatamr   r   r	   detect_opened_file_encoding   s     

rq   c             C   s   | j ddkr| jd dS )z
    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.
    r)   u   ﻿r   N)ri   seek)r   r   r   r	   skip_bom   s    rs   c             C   s   d }yL|d kr>t j| d}t|}|jd t j|||d}nt j| ||d}W n^ tk
r   tjj| rn y"t	}| j
|jrt|| ||}W n ttfk
r   Y nX Y nX |d krt| t| |S )Nrbr   )r#   errors)ior'   rq   rr   TextIOWrapperr7   r   r   r$   rR   rT   rQ   open_source_from_loaderrX   AttributeErrorFileNotFoundErrorrs   )source_filenamer#   error_handlingstreamr   rY   r   r   r	   open_source_file   s.    
r~   c             C   sB   t jj|}|t| jd d  }| j|}tjtj|||dS )Nr)   )r#   ru   )	r   r   rS   rU   rQ   rV   rv   rw   BytesIO)rY   r{   r#   r|   nrmpathr[   ro   r   r   r	   rx     s    
rx   c             C   s   d}| d d dkr$d}| dd  } t | dk r<t| d} n~| d dkr| d }|dkrlt| dd  d	} q|d
krt| dd  d} q|dkrt| dd  d} qt| d} n
t| d} |r|  S | S )NFr)   -Trh   r   0xX   oO   bB)rU   int)valueis_negliteral_typer   r   r	   str_to_number  s"    
r   c             C   s,   t | trt| } d|   ko$dk n   S )Nrh      l        i   l        )r\   r   r   )r   r   r   r	   long_literal*  s    
r   c              C   sz   dt jkrt jd S d} t jdkrFtjdkr:t jjd} nt jjd} | rdt jj| rdt jj	| dS t jjt jj	dd	S )
z
    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

    CYTHON_CACHE_DIRNposixdarwinz~/Library/CachesXDG_CACHE_HOMEcython~z.cython)
r   environnamer^   platformr   
expanduserr   r8   r:   )parentr   r   r	   get_cython_cache_dir0  s    



r   rh   c             #   s   d  }t j| }zt j \}t j||  zXt j| g   fdd} fdd}ddlm} ||d}d|_|j  |V  W d t j||  |d k	r|j	  X W d t j| X d S )	Nc                 s:   z(x"t jd} | r  j|  qP qW W d t j X d S )Ni  )r   ri   r   r,   )d)ro   pipe_inr   r	   copyZ  s    
zcaptured_fd.<locals>.copyc                 s   dj  } r| j} | S )Nre   )r:   ra   )output)ro   r#   r   r	   
get_outpute  s    

zcaptured_fd.<locals>.get_outputr   )Thread)targetT)
r   duppipedup2r,   	threadingr   daemonrn   r:   )r}   r#   torig_streampipe_outr   r   r   r   )ro   r#   r   r	   captured_fdO  s&    



r   rg   Tc             C   sb   |r|j | |j  y
|j}W n tk
r8   |}Y nX |j |  |rR|j | |r^|j  d S )N)r+   flushbufferry   )sheader_textendfiler   outr   r   r	   print_bytesx  s    




r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )LazyStrc             C   s
   || _ d S )N)callback)r   r   r   r   r	   __init__  s    zLazyStr.__init__c             C   s   | j  S )N)r   )r   r   r   r	   __str__  s    zLazyStr.__str__c             C   s   | j  S )N)r   )r   r   r   r	   __repr__  s    zLazyStr.__repr__c             C   s   | j  | S )N)r   )r   rightr   r   r	   __add__  s    zLazyStr.__add__c             C   s   || j   S )N)r   )r   leftr   r   r	   __radd__  s    zLazyStr.__radd__N)r   
__module____qualname__r   r   r   r   r   r   r   r   r	   r     s
   r   c               @   s0   e Zd Zf fddZdd Zdd Zdd Zd	S )

OrderedSetc             C   s   g | _ t | _| j| d S )N)_listset_setupdate)r   elementsr   r   r	   r     s    zOrderedSet.__init__c             C   s
   t | jS )N)iterr   )r   r   r   r	   __iter__  s    zOrderedSet.__iter__c             C   s   x|D ]}| j | qW d S )N)add)r   r   er   r   r	   r     s    
zOrderedSet.updatec             C   s&   || j kr"| jj| | j j| d S )N)r   r   r   r   )r   r   r   r   r	   r     s    
zOrderedSet.addN)r   r   r   r   r   r   r   r   r   r   r	   r     s   r   c                s    fdd}|S )z6Class decorator for creating a class with a metaclass.c                sl   | j j }|jd}|d k	rDt|tr,|g}x|D ]}|j| q2W |jdd  |jdd   | j| j|S )N	__slots____dict____weakref__)r   r   r   r\   strpopr   	__bases__)cls	orig_varsslots	slots_var)	metaclassr   r	   r     s    



zadd_metaclass.<locals>.wrapperr   )r   r   r   )r   r	   add_metaclass  s    r   c             C   s   | dks| j drtdd S )Nr   zcython.z;cython is a special module, cannot be used as a module name)rT   
ValueError)full_module_namer   r   r	   $raise_error_if_module_name_forbidden  s    r   c             C   s   g }d}xXt jd| D ]H}|dkrHdddd	| }|d
d
g dd }q|dkr|jt| qW |d
gd  dd }|d  |7  < d
}x|D ]}|d> | }qW d| S )zn
    Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).
       z
([.abrc]+)abrc         )r   r   r   r   Nrf   .   r   z0x%08X)r   r   r   )rerj   r   r   )version_stringdigitsrelease_statusdigit
hexversionr   r   r	   build_hex_version  s    
r   )NN)NN)rh   N)6
__future__r   __builtin__r   ImportErrorr   rz   rX   r7   r   r^   r   rv   r&   r<   
contextlibr   r   getmtimer2   r   r
   r   r   r!   r(   r1   r5   r9   rB   rE   rI   rD   rN   rd   compilesearchrk   rq   rs   r~   rx   r   r   r   r   stdoutr   r   r   r   r   r   r   r   r   r   r	   <module>   s^   





!
	(