#!/usr/bin/env python3 import sys import importlib.util import importlib.machinery import pathlib from numpy import int32, int64 def patch(module): def output_asciiart(x): if x < 0: sys.stdout.write("\n") else: sys.stdout.write(" .,-:;i+hHM$*#@ "[x]) def extern(fun): name = fun.__name__ if name == "output_asciiart": return output_asciiart elif name in {"output_int32", "output_int64", "output_int32_list"}: return print else: raise NotImplementedError module.int32 = int32 module.int64 = int64 module.extern = extern def file_import(filename, prefix="file_import_"): filename = pathlib.Path(filename) modname = prefix + filename.stem path = str(filename.resolve().parent) sys.path.insert(0, path) try: spec = importlib.util.spec_from_loader( modname, importlib.machinery.SourceFileLoader(modname, str(filename)), ) module = importlib.util.module_from_spec(spec) patch(module) spec.loader.exec_module(module) finally: sys.path.remove(path) return module def main(): demo = file_import(sys.argv[1]) demo.run() if __name__ == "__main__": main()