U
    e,                     @   s   d Z ddlZddlZddlZddlmZ dd Zdd ZejdkrzPddl	Z	dd	l
mZmZmZmZ e	jjjZeeege_ee_d
d Zee W n ek
r   Y nX eZdd Zdd Zdd ZG dd deZdS )z"Compiler helpers for the debugger.    N)CachingCompilerc           	      C   s|  d}dd t | dD } t| }||A }|d@ }td|dD ]}t| | d@ t| |d	  d@ d
> B t| |d  d@ d> B t| |d  d> B }|| d@ }||d? N }|| d@ }|| d@ }||N }q>|d@ }d}|dkrt| |d  d@ d> }|dkr"|t| |d	  d@ d
> O }|dkrT|t| | d@ O }||N }|| d@ }||d? N }|| d@ }||d? N }|S )zGet the murmur2 hash.i[c                 S   s   g | ]}t |qS  )chr).0dr   r   1lib/python3.8/site-packages/ipykernel/compiler.py
<listcomp>   s     zmurmur2_x86.<locals>.<listcomp>utf8l    r                           l    )r   r   )r   r   r         )strencodelenrangeord)	dataZseedmlengthhZrounded_endikvalr   r   r   murmur2_x86	   sB    


r    c                 C   s   | S )Nr   )filenamer   r   r   <lambda>0       r"   win32)DWORDLPCWSTRLPWSTRMAX_PATHc                 C   s0   t t}t| |t}|dkr,|tkr,|j} | S )Nr   )ctypesZcreate_unicode_bufferr(   _GetLongPathNamevalue)r!   bufrvr   r   r   _convert_to_long_pathname;   s
    
r.   c                  C   s*   t t } t }| tj d t| S )zGet a temp directory.Z
ipykernel_)convert_to_long_pathnametempfileZ
gettempdirosgetpidsepr   )Ztmp_dirpidr   r   r   get_tmp_directoryJ   s    r5   c                   C   s   dS )zGet a temp hash seed.l   i r   r   r   r   r   get_tmp_hash_seedQ   s    r6   c                 C   s<   t jd}|dkr8t| t }t t j t| d }|S )zGet a file name.ZIPYKERNEL_CELL_NAMENz.py)r1   environgetr    r6   r5   r3   r   )codeZ	cell_namenamer   r   r   get_file_nameV   s
    r;   c                       s(   e Zd ZdZ fddZdd Z  ZS )XCachingCompilerzA custom caching compiler.c                    s   t  j|| d| _dS )zInitialize the compiler.N)super__init__log)selfargskwargs	__class__r   r   r>   b   s    zXCachingCompiler.__init__c                 C   s   t |S )zGet the code name.)r;   )r@   Zraw_coder9   Znumberr   r   r   get_code_nameg   s    zXCachingCompiler.get_code_name)__name__
__module____qualname____doc__r>   rE   __classcell__r   r   rC   r   r<   _   s   r<   )rI   r1   sysr0   ZIPython.core.compileropr   r    r/   platformr)   Zctypes.wintypesr%   r&   r'   r(   ZwindllZkernel32ZGetLongPathNameWr*   ZargtypesZrestyper.   __file__	Exceptionr5   r6   r;   r<   r   r   r   r   <module>   s,   '

	