nac3/nac3standalone/demo/interpret_demo.py

72 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import importlib.util
import importlib.machinery
import pathlib
from numpy import int32, int64, uint32, uint64
from typing import TypeVar, Generic
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",
"output_uint32",
"output_uint64",
"output_float64"
}:
return print
else:
raise NotImplementedError
module.int32 = int32
module.int64 = int64
module.uint32 = uint32
module.uint64 = uint64
module.TypeVar = TypeVar
module.Generic = Generic
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()