mirror of
https://github.com/unslothai/unsloth.git
synced 2026-07-10 00:08:58 +00:00
Raise ruff line-length to 100 and extend the local pre-commit format pipeline (def-signature magic-comma normalization, short multi-line assert collapse, kwarg '=' spacing, blank-line-after-short-import removal, adjacent string-literal / f-string+plain merge, redundant-pass pruning). Every transform re-checks the file AST and is dropped if it would differ; the whole-repo reformat is verified AST-identical per file and idempotent.
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import ast
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
GPU_INIT = REPO_ROOT / "unsloth" / "_gpu_init.py"
|
|
|
|
|
|
def _find_geteuid_guard(tree: ast.AST):
|
|
for node in ast.walk(tree):
|
|
if not isinstance(node, ast.If):
|
|
continue
|
|
for sub in ast.walk(node.test):
|
|
if isinstance(sub, ast.Call) and isinstance(sub.func, ast.Attribute):
|
|
if sub.func.attr == "geteuid":
|
|
return node
|
|
return None
|
|
|
|
|
|
def test_gpu_init_has_geteuid_guard():
|
|
tree = ast.parse(GPU_INIT.read_text())
|
|
guard = _find_geteuid_guard(tree)
|
|
assert guard is not None, "_gpu_init.py must guard ldconfig recovery on os.geteuid()"
|
|
|
|
|
|
def test_ldconfig_calls_only_inside_geteuid_guard():
|
|
src = GPU_INIT.read_text()
|
|
tree = ast.parse(src)
|
|
guard = _find_geteuid_guard(tree)
|
|
assert guard is not None
|
|
guard_src = ast.get_source_segment(src, guard) or ""
|
|
ldconfig_lines = [
|
|
line for line in src.splitlines() if "ldconfig" in line and "os.system" in line
|
|
]
|
|
for line in ldconfig_lines:
|
|
assert line.strip() in guard_src, (
|
|
"os.system('ldconfig ...') must live inside the geteuid guard, "
|
|
f"but found unguarded: {line!r}"
|
|
)
|
|
|
|
|
|
def test_non_root_branch_warns_when_bnb_present():
|
|
src = GPU_INIT.read_text()
|
|
assert "elif bnb is not None" in src
|
|
assert "sudo ldconfig" in src
|