File size: 2,509 Bytes
c994d6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""patch_infix2.py — S3/S5 in 维修正: gguf-py t.shape=(in,out) 逻辑形, in=shape[0] (numpy data=(out,in))"""
CH_OLD = '''            if hn.ndim == 1 and hn.shape[0] == shape[1]:
                H = torch.diag(torch.from_numpy(hn).to(dev) + 1e-8)
            elif hn.shape == (shape[1], shape[1]):
                H = torch.from_numpy(hn).to(dev)
            if H is not None and shape[1] > 4200:
                Hb = torch.zeros_like(H)
                for i in range(0, shape[1], 1024):
                    Hb[i:i + 1024, i:i + 1024] = H[i:i + 1024, i:i + 1024]
                H = Hb
            if H is not None:
                H = H / max(1e-9, float(torch.trace(H))) + 1e-6 * torch.eye(shape[1], device=dev)'''
CH_NEW = '''            if hn.ndim == 1 and hn.shape[0] == shape[0]:
                H = torch.diag(torch.from_numpy(hn).to(dev) + 1e-8)
            elif hn.shape == (shape[0], shape[0]):
                H = torch.from_numpy(hn).to(dev)
            if H is not None and shape[0] > 4200:
                Hb = torch.zeros_like(H)
                for i in range(0, shape[0], 1024):
                    Hb[i:i + 1024, i:i + 1024] = H[i:i + 1024, i:i + 1024]
                H = Hb
            if H is not None:
                H = H / max(1e-9, float(torch.trace(H))) + 1e-6 * torch.eye(shape[0], device=dev)'''
CH_EYE_OLD = '''        if H is None:
            H = torch.eye(shape[1], device=dev)'''
CH_EYE_NEW = '''        if H is None:
            H = torch.eye(shape[0], device=dev)'''
RF_LD_OLD = '''        H = load_H(imx[hk], shape[1], dev)'''
RF_LD_NEW = '''        H = load_H(imx[hk], shape[0], dev)'''
RF_EYE_OLD = '''            H = torch.eye(shape[1], device=dev)
            P("S5 %s: H missing -> identity" % base)'''
RF_EYE_NEW = '''            H = torch.eye(shape[0], device=dev)
            P("S5 %s: H missing -> identity" % base)'''

def main():
    for path, olds, news in (
        ("/tmp/k8b/r13_chain.py", [CH_OLD, CH_EYE_OLD], [CH_NEW, CH_EYE_NEW]),
        ("/tmp/k8b/r13_refine.py", [RF_LD_OLD, RF_EYE_OLD], [RF_LD_NEW, RF_EYE_NEW]),
    ):
        src = open(path).read()
        for o, n in zip(olds, news):
            cnt = src.count(o)
            assert cnt == 1, "anchor not unique in %s: count=%d" % (path, cnt)
            src = src.replace(o, n, 1)
        compile(src, path, "exec")
        open(path, "w").write(src)
        print("PATCHED", path)
    print("PATCH_OK infix2 shape[0] in-dim fix")
main()