import argparse import base64 import hashlib import json from pathlib import Path import shutil import struct import numpy as np def file_hash(path): with path.open('rb') as stream: return hashlib.file_digest(stream, 'sha256').hexdigest() def apply_patch(original, manifest_path, patch_path, output): original, manifest_path, patch_path, output = map(Path, (original, manifest_path, patch_path, output)) if output.exists() or output.resolve() == original.resolve(): raise ValueError('Output must be a new file; original weights are never overwritten') manifest = json.loads(manifest_path.read_text()) if file_hash(original) != manifest['original_sha256'] or file_hash(patch_path) != manifest['patch_sha256']: raise ValueError('Original checkpoint or patch checksum differs') with original.open('rb') as stream: original_length = struct.unpack('= size or np.any(indices[1:] <= indices[:-1])): raise ValueError('Sparse indices must be sorted, unique, and in range') values = np.memmap(temporary, mode='r+', dtype='