File size: 2,072 Bytes
425c079
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Build-only patches to the pinned existing upstream; never modifies /data."""
from pathlib import Path
import shutil
root = Path("/opt/space/upstream")

def replace(path,old,new,count=1):
    source=path.read_text()
    if source.count(old) != count:
        raise RuntimeError(f"Upstream patch mismatch: {path} expected {count} occurrences of {old!r}")
    path.write_text(source.replace(old,new))

app=root/"app.py"
replace(app,"import spaces  # isort:skip","")
replace(app,"@spaces.GPU\n","",2)
replace(app,'device = torch.device("cuda" if torch.cuda.is_available() else "cpu")',
        'assert torch.cuda.is_available(), "Dedicated CUDA GPU required"\n    device = torch.device("cuda")')
replace(app,"            cmd += \" > /dev/null 2>&1\"",
        '            cmd += ""')
replace(app,"            os.system(cmd)",
        '            import shlex, subprocess\n            subprocess.run(shlex.split(cmd), check=True, timeout=300)')
replace(app,'            fbx2glb_cmd += " > /dev/null 2>&1"',
        '            fbx2glb_cmd += ""')
replace(app,"            os.system(fbx2glb_cmd)",
        '            import shlex, subprocess\n            subprocess.run(shlex.split(fbx2glb_cmd), check=True, timeout=300)')
additional=root/"util/dataset_mixamo_additional.py"
old='KINEMATIC_TREE = get_kinematic_tree(TEMPLATE_PATH, BONES_IDX_DICT)\nassert len(KINEMATIC_TREE) == len(MIXAMO_JOINTS)'
new='if os.path.isfile(TEMPLATE_PATH):\n    KINEMATIC_TREE = get_kinematic_tree(TEMPLATE_PATH, BONES_IDX_DICT)\n    assert len(KINEMATIC_TREE) == len(MIXAMO_JOINTS)\nelse:\n    KINEMATIC_TREE = dataset_mixamo.KINEMATIC_TREE'
replace(additional,old,new)
for name in ("data","output"):
    path=root/name
    backup=root/(name+".bundled")
    if path.exists():
        # Docker COPY inputs may be a separate mount; rename can fail EXDEV.
        # Copy then remove in the image so runtime can make the /data symlink.
        shutil.copytree(path,backup,symlinks=True)
        shutil.rmtree(path)
print("BUILD_PATCH_PASS: dedicated CUDA, checked exports, standard skeleton")