def apply_asy(self, filename, expr, evaluation, **options): '%(name)s[filename_String, expr_, OptionsPattern[%(name)s]]' if expr.get_head_name() == "System`Image": res = Expression("System`ImageExport", filename, expr) return res.evaluate(evaluation) filename = filename.value if expr.get_head_name() not in ("System`Graphics", "System`Graphics3D"): expr = Expression("Text", expr) expr = Expression("Graphics", Expression("List", expr)) asy_code = Expression("MakeBoxes", expr).evaluate(evaluation) try: asy_code = asy_code.boxes_to_tex(evaluation=evaluation) except BoxError as e: evaluation.message(self.get_name(), "boxerr", e.box) return SymbolFailed asy_code = asy_code[13:-10] asy_code = replace_wl_with_plain_text(asy_code, False) # TODO: Handle properly WL characters to latex commands asy_code = asy_code.replace("\\[DifferentialD]", "d ") fin = os.path.join(tempfile._get_default_tempdir(), next(tempfile._get_candidate_names())) from pymathics.asy import asy_path try: with open(fin, 'w+') as borrador: borrador.write(asy_code) except: evaluation.message(self.get_name(), "nowrtacs") return SymbolFailed if self.extension == "svg": cmdline = [ asy_path, '-f', self.extension, '--svgemulation', '-o', filename, fin ] else: cmdline = [asy_path, '-f', self.extension, '-o', filename, fin] try: check_call(cmdline, stdout=DEVNULL, stderr=DEVNULL) except: evaluation.message(self.get_name(), "asyfld") return SymbolFailed return SymbolNull