def format_output(self, expr, format=None): if format is None: format = self.format if isinstance(format, dict): return dict((k, self.format_output(expr, f)) for k, f in format.items()) from mathics.core.expression import Expression, BoxError if format == 'text': result = expr.format(self, 'System`OutputForm') elif format == 'xml': result = Expression( 'StandardForm', expr).format(self, 'System`MathMLForm') elif format == 'tex': result = Expression('StandardForm', expr).format( self, 'System`TeXForm') else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self) except BoxError: self.message('General', 'notboxes', Expression('FullForm', result).evaluate(self)) boxes = None return boxes
def format_output(self, expr, format=None): if format is None: format = self.format if isinstance(format, dict): return dict((k, self.format_output(expr, f)) for k, f in format.items()) from mathics.core.expression import Expression, BoxError if format == "text": result = expr.format(self, "System`OutputForm") elif format == "xml": result = Expression("StandardForm", expr).format(self, "System`MathMLForm") elif format == "tex": result = Expression("StandardForm", expr).format(self, "System`TeXForm") elif format == "unformatted": self.exc_result = None return expr else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self) except BoxError: self.message( "General", "notboxes", Expression("FullForm", result).evaluate(self) ) boxes = None return boxes
def format_output(self, expr, format=None): if format is None: format = self.format if isinstance(format, dict): return dict( (k, self.format_output(expr, f)) for k, f in format.items()) from mathics.core.expression import Expression, BoxError if format == 'text': result = expr.format(self, 'System`OutputForm') elif format == 'xml': result = Expression('StandardForm', expr).format(self, 'System`MathMLForm') elif format == 'tex': result = Expression('StandardForm', expr).format(self, 'System`TeXForm') else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self) except BoxError: self.message('General', 'notboxes', Expression('FullForm', result).evaluate(self)) boxes = None return boxes
def format_output(self, expr): from mathics.core.expression import Expression, String, BoxError if self.format == 'text': result = expr.format(self, 'OutputForm') elif self.format == 'xml': result = Expression('StandardForm', expr).format(self, 'MathMLForm') elif self.format == 'tex': result = Expression('StandardForm', expr).format(self, 'TeXForm') else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self) except BoxError: self.message('General', 'notboxes', String('%s' % result)) boxes = None return boxes
def format_output(self, expr, format=None): if format is None: format = self.format if isinstance(format, dict): return dict( (k, self.format_output(expr, f)) for k, f in format.items()) from mathics.core.expression import Expression, BoxError orig_output_size_limit = self.output_size_limit try: self.output_size_limit = self.definitions.get_config_value( 'System`$OutputSizeLimit') options = {} if format == 'text': result = expr.format(self, 'System`OutputForm') # for MathMLForm and TexForm, output size limits are applied in the form's apply # methods (e.g. see MathMLForm.apply) and then passed through result.boxes_to_text # which must, in these cases, not apply additional clipping, as this would clip # already clipped string material. for OutputForm, on the other hand, the call to # result.boxes_to_text is the only place we have to apply output size limits. options['output_size_limit'] = self.output_size_limit elif format == 'xml': result = Expression('StandardForm', expr).format(self, 'System`MathMLForm') elif format == 'tex': result = Expression('StandardForm', expr).format(self, 'System`TeXForm') else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self, **options) except BoxError: self.message('General', 'notboxes', Expression('FullForm', result).evaluate(self)) boxes = None finally: self.output_size_limit = orig_output_size_limit return boxes
def format_output(self, expr, format=None): if format is None: format = self.format if isinstance(format, dict): return dict((k, self.format_output(expr, f)) for k, f in format.items()) from mathics.core.expression import Expression, BoxError if format == "text": result = expr.format(self, "System`OutputForm") elif format == "xml": result = Expression("StandardForm", expr).format(self, "System`MathMLForm") elif format == "tex": result = Expression("StandardForm", expr).format(self, "System`TeXForm") else: raise ValueError try: boxes = result.boxes_to_text(evaluation=self) except BoxError: self.message("General", "notboxes", Expression("FullForm", result).evaluate(self)) boxes = None return boxes
def format_output(obj, expr, format=None): """ Handle unformatted output using the *specific* capabilities of mathics-django. evaluation.py format_output() from which this was derived is similar but it can't make use of a front-ends specific capabilities. """ def eval_boxes(result, fn, obj, **options): try: boxes = fn(evaluation=obj, **options) # print("XXX\n", boxes) except BoxError: boxes = None if not hasattr(obj, "seen_box_error"): obj.seen_box_error = True obj.message("General", "notboxes", Expression("FullForm", result).evaluate(obj)) return boxes if format is None: format = obj.format if isinstance(format, dict): return dict((k, obj.format_output(expr, f)) for k, f in format.items()) # For some expressions, we want formatting to be different. # In particular for FullForm output, we dont' want MathML, we want # plain-ol' text so we can cut and paste that. expr_type = expr.get_head_name() if expr_type in ("System`MathMLForm", "System`TeXForm"): # For these forms, we strip off the outer "Form" part format = FORM_TO_FORMAT[expr_type] leaves = expr.get_leaves() if len(leaves) == 1: expr = leaves[0] if expr_type in ("System`FullForm", "System`OutputForm"): result = Expression("StandardForm", expr).format(obj, expr_type) return str(result) elif expr_type == "System`Graphics": result = Expression("StandardForm", expr).format(obj, "System`MathMLForm") # This part was derived from and the same as evaluation.py format_output. use_quotes = get_settings_value(obj.definitions, "Settings`$QuotedStrings") if format == "text": result = expr.format(obj, "System`OutputForm") result = eval_boxes(result, result.boxes_to_text, obj) if use_quotes: result = '"' + result + '"' return result elif format == "xml": result = Expression("StandardForm", expr).format(obj, "System`MathMLForm") elif format == "tex": result = Expression("StandardForm", expr).format(obj, "System`TeXForm") elif format == "unformatted": # This part is custom to mathics-django: if str(expr) == "-Graph-" and hasattr(expr, "G"): return format_graph(expr.G) head = str(expr.get_head()) if head == "System`CompiledFunction": result = expr.format(obj, "System`OutputForm") elif head == "System`String": result = expr.format(obj, "System`InputForm") result = result.boxes_to_text(result) if not use_quotes: # Substring without the quotes result = result[1:-1] return result elif head == "System`Graphics3D": form_expr = Expression("StandardForm", expr) result = form_expr.format(obj, "System`StandardForm") return eval_boxes(result, result.boxes_to_js, obj) elif head == "System`Graphics": form_expr = Expression("StandardForm", expr) result = form_expr.format(obj, "System`StandardForm") return eval_boxes(result, result.boxes_to_svg, obj) else: result = Expression("StandardForm", expr).format(obj, "System`MathMLForm") else: raise ValueError if result is None: return f"Error in evaluating {expr}" return eval_boxes(result, result.boxes_to_text, obj)