asm
This commit is contained in:
105
asm/venv/lib/python3.11/site-packages/ipykernel/compiler.py
Normal file
105
asm/venv/lib/python3.11/site-packages/ipykernel/compiler.py
Normal file
@@ -0,0 +1,105 @@
|
||||
"""Compiler helpers for the debugger."""
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
from IPython.core.compilerop import CachingCompiler
|
||||
|
||||
|
||||
def murmur2_x86(data, seed):
|
||||
"""Get the murmur2 hash."""
|
||||
m = 0x5BD1E995
|
||||
data = [chr(d) for d in str.encode(data, "utf8")]
|
||||
length = len(data)
|
||||
h = seed ^ length
|
||||
rounded_end = length & 0xFFFFFFFC
|
||||
for i in range(0, rounded_end, 4):
|
||||
k = (
|
||||
(ord(data[i]) & 0xFF)
|
||||
| ((ord(data[i + 1]) & 0xFF) << 8)
|
||||
| ((ord(data[i + 2]) & 0xFF) << 16)
|
||||
| (ord(data[i + 3]) << 24)
|
||||
)
|
||||
k = (k * m) & 0xFFFFFFFF
|
||||
k ^= k >> 24
|
||||
k = (k * m) & 0xFFFFFFFF
|
||||
|
||||
h = (h * m) & 0xFFFFFFFF
|
||||
h ^= k
|
||||
|
||||
val = length & 0x03
|
||||
k = 0
|
||||
if val == 3:
|
||||
k = (ord(data[rounded_end + 2]) & 0xFF) << 16
|
||||
if val in [2, 3]:
|
||||
k |= (ord(data[rounded_end + 1]) & 0xFF) << 8
|
||||
if val in [1, 2, 3]:
|
||||
k |= ord(data[rounded_end]) & 0xFF
|
||||
h ^= k
|
||||
h = (h * m) & 0xFFFFFFFF
|
||||
|
||||
h ^= h >> 13
|
||||
h = (h * m) & 0xFFFFFFFF
|
||||
h ^= h >> 15
|
||||
|
||||
return h
|
||||
|
||||
|
||||
convert_to_long_pathname = lambda filename: filename # noqa: E731
|
||||
|
||||
if sys.platform == "win32":
|
||||
try:
|
||||
import ctypes
|
||||
from ctypes.wintypes import DWORD, LPCWSTR, LPWSTR, MAX_PATH
|
||||
|
||||
_GetLongPathName = ctypes.windll.kernel32.GetLongPathNameW
|
||||
_GetLongPathName.argtypes = [LPCWSTR, LPWSTR, DWORD]
|
||||
_GetLongPathName.restype = DWORD
|
||||
|
||||
def _convert_to_long_pathname(filename):
|
||||
buf = ctypes.create_unicode_buffer(MAX_PATH)
|
||||
rv = _GetLongPathName(filename, buf, MAX_PATH)
|
||||
if rv != 0 and rv <= MAX_PATH:
|
||||
filename = buf.value
|
||||
return filename
|
||||
|
||||
# test that it works so if there are any issues we fail just once here
|
||||
_convert_to_long_pathname(__file__)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
convert_to_long_pathname = _convert_to_long_pathname
|
||||
|
||||
|
||||
def get_tmp_directory():
|
||||
"""Get a temp directory."""
|
||||
tmp_dir = convert_to_long_pathname(tempfile.gettempdir())
|
||||
pid = os.getpid()
|
||||
return tmp_dir + os.sep + "ipykernel_" + str(pid)
|
||||
|
||||
|
||||
def get_tmp_hash_seed():
|
||||
"""Get a temp hash seed."""
|
||||
return 0xC70F6907
|
||||
|
||||
|
||||
def get_file_name(code):
|
||||
"""Get a file name."""
|
||||
cell_name = os.environ.get("IPYKERNEL_CELL_NAME")
|
||||
if cell_name is None:
|
||||
name = murmur2_x86(code, get_tmp_hash_seed())
|
||||
cell_name = get_tmp_directory() + os.sep + str(name) + ".py"
|
||||
return cell_name
|
||||
|
||||
|
||||
class XCachingCompiler(CachingCompiler):
|
||||
"""A custom caching compiler."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Initialize the compiler."""
|
||||
super().__init__(*args, **kwargs)
|
||||
self.log = None
|
||||
|
||||
def get_code_name(self, raw_code, code, number):
|
||||
"""Get the code name."""
|
||||
return get_file_name(raw_code)
|
||||
Reference in New Issue
Block a user