a
    b4                     @   s  d dl mZ zd dlmZ W n ey2   eZY n0 ze W n eyR   eZY n0 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 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$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Z0G d7d8 d8Z1G d9d: d:e2Z3d;d< Z4d=d> Z5d?d@ Z6dS )D    )absolute_import)
basestringN)contextmanagerc                  C   s   t D ]} |   qd S N)_function_cachesclear)cache r	   \/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Utils.pyclear_function_caches   s    r   c                    s.   i  t   t  fdd}|_|S )Nc                     s(     | }|u r$|   } | < |S r   )get)argsresr   fZ
uncomputedr	   r
   wrapper&   s    z cached_function.<locals>.wrapper)r   appendobjectZuncachedr   r   r	   r   r
   cached_function"   s    
r   c                    s   dj    fdd}|S )Nz
__%s_cachec                    sP   t |  d }|d u r$i }t|  | ||v r4|| S | g|R   }||< |S r   )getattrsetattr)selfr   r   r   Z
cache_namer   r	   r
   r   0   s    zcached_method.<locals>.wrapper)__name__r   r	   r   r
   cached_method.   s    
	r   c                 C   s   t j| \}}|| S r   )ospathsplitext)r   Znewsufbase_r	   r	   r
   replace_suffix;   s    r!   c                 C   s&   t j| rt |  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   sR   zt | }W n ty   Y n00 |d |  |rNt| |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_fileO   s    r2   c                 C   s   t | }||kS r   )modification_time)r   timeZftimer	   r	   r
   file_newer_than_   s    r5   c                 C   s4   zt |  W n  ty.   t j| s* Y n0 d S r   )r   makedirsOSErrorr   isdirr(   r	   r	   r
   safe_makedirsd   s
    r9   c                 C   s\   t j|t j| }zt|}W n ty<   t| Y n0 t| |sLdS t	| | 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basenamer3   r7   r9   r5   shutilcopy2)Z
sourcefileZdestdirdestfileZdesttimer	   r	   r
   copy_file_to_dir_if_newerl   s    
r?   c                 C   s0   t j| }| |kr|S t|r(t|S |S d S r   )r   r   dirnameis_package_dirfind_root_package_dir)	file_pathdirr	   r	   r
   rB      s    rB   c                 C   s*   |D ] }t j| |} t| s d S q| S r   )r   r   r:   rA   )rD   Zpackage_namesr@   r	   r	   r
   check_package_dir   s
    rE   c                 C   s*   dD ] }t j| |}t|r dS qd S )N)z__init__.pyz__init__.pycz__init__.pyxz__init__.pxdr*   )r   r   r:   path_exists)Zdir_pathfilenamer   r	   r	   r
   rA      s    rA   c                 C   s   t j| rdS zlt}t|dd }|rzt j| }||rz|t|d d  }z|| W W dS  t	yx   Y W dS 0 W n t
y   Y n0 dS )NTarchiver*   F)r   r   r$   
__loader__r   normpath
startswithlenget_dataIOError	NameError)r   loaderarchive_pathrJ   arcnamer	   r	   r
   rF      s"    

rF   c                 C   sH   t | trDz&t }|d u r$t }| |} W n tyB   Y n0 | S r   )
isinstancebytessysgetfilesystemencodinggetdefaultencodingdecodeUnicodeDecodeError)rG   Zfilename_encodingr	   r	   r
   decode_filename   s    
rZ   s   (\w*coding)[:=]\s*([-\w.]+)c                 C   s   d}d}t |dk r8| d}||7 }|d}|sq8qt|d }|rf|ddkrf|d	d
S t |dkrt|d }|r|d	d
S dS )Nr	          i     
r   r*   s   c_string_encoding   z	iso8859-1zUTF-8)rL   readsplit_match_file_encodinggrouprX   )r   linesstartdatamr	   r	   r
   detect_opened_file_encoding   s     

rg   c                 C   s   |  ddkr| 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)r_   seek)r   r	   r	   r
   skip_bom   s    ri   c                 C   s   d }zL|d u r>t | d}t|}|d t j|||d}nt j| ||d}W nZ ty   tj| rl z"t	}| 
|jrt|| ||}W n ttfy   Y n0 Y n0 |d u rt| t| |S )Nrbr   r#   errors)ior'   rg   rh   TextIOWrapperr7   r   r   r$   rI   rK   rH   open_source_from_loaderrO   AttributeErrorFileNotFoundErrorri   )source_filenamer#   error_handlingstreamr   rP   r	   r	   r
   open_source_file   s0    
ru   c                 C   sB   t j|}|t| jd d  }| |}tjt|||dS )Nr*   rk   )	r   r   rJ   rL   rH   rM   rm   rn   BytesIO)rP   rr   r#   rs   ZnrmpathrR   re   r	   r	   r
   ro     s    
ro   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v rlt| dd  d	} q|d
v rt| dd  d} q|dv rt| dd  d} qt| d} n
t| d} |r|  S | S )NFr*   -Tr^   r   0xX   ZoO   ZbB)rL   int)valueZis_negZliteral_typer	   r	   r
   str_to_number  s"    
r~   c                 C   s,   t | trt| } d|   ko$dk n   S )Ni   l        )rS   r   r~   )r}   r	   r	   r
   long_literal+  s    
r   c                  C   sz   dt jv rt jd S d} t jdkrFtjdkr:t jd} nt jd} | rdt j| rdt j	| dS t jt 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

    ZCYTHON_CACHE_DIRNposixdarwinz~/Library/CachesZXDG_CACHE_HOMEcython~z.cython)
r   environnamerU   platformr   
expanduserr   r8   r:   )parentr	   r	   r
   get_cython_cache_dir1  s    



r   r^   c                 #   s   t | }ztjddrdgffdd	t  |  z* fdd}|V  W t ||    nt ||    0 W d    n1 s0    Y  W t | nt | 0 d S )Nza+b)moder[   c                    s$    j s d   | d< | d S )Nr   )closedrh   r_   )_output)	temp_filer	   r
   read_outputU  s    
z captured_fd.<locals>.read_outputc                     s    }  r|   S | S r   )rX   )result)r#   r   r	   r
   
get_output]  s    zcaptured_fd.<locals>.get_output)r   duptempfileTemporaryFiledup2filenor-   )rt   r#   orig_streamr   r	   )r#   r   r   r
   captured_fdP  s    
(r   r]   Tc                 C   s`   |r| | |  z
|j}W n ty6   |}Y n0 | |  |rP| | |r\|  d S r   )r,   flushbufferrp   )sZheader_textendfiler   outr	   r	   r
   print_bytesi  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 r   callback)r   r   r	   r	   r
   __init__x  s    zLazyStr.__init__c                 C   s   |   S r   r   r   r	   r	   r
   __str__z  s    zLazyStr.__str__c                 C   s   |   S r   r   r   r	   r	   r
   __repr__|  s    zLazyStr.__repr__c                 C   s   |   | S r   r   )r   rightr	   r	   r
   __add__~  s    zLazyStr.__add__c                 C   s   ||    S r   r   )r   leftr	   r	   r
   __radd__  s    zLazyStr.__radd__N)r   
__module____qualname__r   r   r   r   r   r	   r	   r	   r
   r   w  s
   r   c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )
OrderedSetr	   c                 C   s   g | _ t | _| | d S r   )_listset_setupdate)r   elementsr	   r	   r
   r     s    zOrderedSet.__init__c                 C   s
   t | jS r   )iterr   r   r	   r	   r
   __iter__  s    zOrderedSet.__iter__c                 C   s   |D ]}|  | qd S r   )add)r   r   er	   r	   r
   r     s    zOrderedSet.updatec                 C   s&   || j vr"| j| | j | d S r   )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
   r     s   
r   c                    s    fdd}|S )z6Class decorator for creating a class with a metaclass.c                    sh   | j  }|d}|d ur@t|tr,|g}|D ]}|| q0|dd  |dd   | j| j|S )N	__slots____dict____weakref__)r   copyr   rS   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|  drtdd S )Nr   zcython.z;cython is a special module, cannot be used as a module name)rK   
ValueError)Zfull_module_namer	   r	   r
   $raise_error_if_module_name_forbidden  s    r   c                 C   s   g }d}t d| D ]H}|dv rFdddd| }|ddg dd	 }q|d
kr|t| q|dgd	  dd }|d	  |7  < d}|D ]}|d> | }qd| S )zn
    Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).
       z
([.abrc]+))abrc         r   Nr\   .   r{   z0x%08X)rer`   r   r|   )version_stringdigitsZrelease_statusdigit
hexversionr	   r	   r
   build_hex_version  s    r   )NN)NN)r^   N)7
__future__r   __builtin__r   ImportErrorr   rq   rO   r7   r   rU   r   rm   r&   r<   r   
contextlibr   r   getmtimer3   r   r   r   r   r!   r)   r2   r5   r9   r?   rB   rE   rA   rF   rZ   compilesearchra   rg   ri   ru   ro   r~   r   r   r   stdoutr   r   r   r   r   r   r   r	   r	   r	   r
   <module>   sl   


	

	


! 

