Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
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)