| from pathlib import Path |
| from . import eval_adb |
| from . import eval_ruby |
| from . import eval_lua |
| from . import eval_python |
| from . import eval_rust |
| from . import eval_julia |
| from . import eval_java |
| from . import eval_lua |
| from . import eval_racket |
| from . import eval_javascript |
| from . import eval_swift |
| from . import eval_cpp |
| from . import eval_php |
| from . import eval_dlang |
| from . import eval_julia |
| from . import eval_r |
| from . import eval_fs |
| from . import eval_ocaml |
| from . import eval_matlab |
| from . import eval_hs |
| from . import eval_elixir |
| from . import eval_clj |
| from . import eval_v |
| from . import eval_lean |
| from . import eval_dart |
| from . import eval_go |
| import tempfile |
|
|
|
|
| EVALUATORS = { |
| "ada": (eval_adb.eval_script, ".adb"), |
| "rb": (eval_ruby.eval_script, ".rb"), |
| "lua": (eval_lua.eval_script, ".lua"), |
| "python": (eval_python.eval_script, ".py"), |
| "py": (eval_python.eval_script, ".py"), |
| "notypes.py": (eval_python.eval_script, ".py"), |
| "julia": (eval_julia.eval_script, ".jl"), |
| "java" : (eval_java.eval_script, ".java"), |
| "rust" : (eval_rust.eval_script, ".rs"), |
| "rs" : (eval_rust.eval_script, ".rs"), |
| "swift": (eval_swift.eval_script, ".swift"), |
| "lua": (eval_lua.eval_script, ".lua"), |
| "racket": (eval_racket.eval_script, ".rkt"), |
| "rkt": (eval_racket.eval_script, ".rkt"), |
| "javascript": (eval_javascript.eval_script, ".js"), |
| "js": (eval_javascript.eval_script, ".js"), |
| "cpp": (eval_cpp.eval_script, ".cpp"), |
| "php": (eval_php.eval_script, ".php"), |
| "humaneval_to_dlang.py": (eval_dlang.eval_script, ".d"), |
| "d": (eval_dlang.eval_script, ".d"), |
| "r": (eval_r.eval_script, ".r"), |
| "humaneval_to_r.py": (eval_r.eval_script, ".r"), |
| "jl": (eval_julia.eval_script, ".jl"), |
| "fs": (eval_fs.eval_script, ".fsx"), |
| "ml": (eval_ocaml.eval_script, ".ml"), |
| "m": (eval_matlab.eval_script, ".m"), |
| "hs": (eval_hs.eval_script, ".hs"), |
| "elixir": (eval_elixir.eval_script, ".exs"), |
| "clj": (eval_clj.eval_script, ".clj"), |
| "coq": (eval_v.eval_script, ".v"), |
| "lean": (eval_lean.eval_script, ".lean"), |
| "dart": (eval_dart.eval_script, ".dart"), |
| "go": (eval_go.eval_script, ".go"), |
| "go_test.go": (eval_go.eval_script, "_test.go"), |
| } |
|
|
| def eval_string_script(language, program): |
| if language in EVALUATORS: |
| (eval_script, file_ext) = EVALUATORS[language] |
| else: |
| eval_module = __import__(f"eval_{language}" if language != "go_test.go" else "eval_go") |
| eval_script = eval_module.eval_script |
| file_ext = f".{language}" if language != "go_test.go" else "_test.go" |
| with tempfile.NamedTemporaryFile(suffix=file_ext, delete=True) as f: |
| f.write(program.encode("utf-8")) |
| f.flush() |
| result = eval_script(Path(f.name)) |
| |
| |
| |
| if type(result["stdout"]) == bytes: |
| result["stdout"] = result["stdout"].decode("utf-8", errors="ignore") |
| if result["stdout"] is None: |
| result["stdout"] = "" |
| if result["stderr"] is None: |
| result["stderr"] = "" |
| if type(result["stderr"]) == bytes: |
| result["stderr"] = result["stderr"].decode("utf-8", errors="ignore") |
| assert type(result["stdout"]) == str |
| assert type(result["stderr"]) == str |
| return { |
| "program": program, |
| "stdout": result['stdout'].replace("!!int", "")[:2048], |
| "stderr": result['stderr'][:2048], |
| "exit_code": result['exit_code'], |
| "status": result['status'] |
| } |