Ticket #12719: 12719-displayhook-library.patch

File 12719-displayhook-library.patch, 1.9 KB (added by jason, 9 years ago)
  • sage/misc/displayhook.py

    # HG changeset patch
    # User Jason Grout <jason.grout@drake.edu>
    # Date 1349973953 18000
    # Node ID 6cc19df5ca3aa3206752598d3041c120929d5f93
    # Parent  77a9809f8a917846d424ed93f19a44cfc6d88abc
    Make a display hook that can be used when Sage is used as a library.
    
    diff --git a/sage/misc/displayhook.py b/sage/misc/displayhook.py
    a b  
    143143        if len(obj) > 0 and (is_Matrix(obj[0]) or isinstance(obj[0], ArithmeticSubgroupElement)):
    144144            return _check_tall_list_and_format(obj)
    145145    return None
     146
     147class DisplayHook(object):
     148    """
     149    Display hook for Sage.
     150
     151    This is not used directly in interactive Sage (where we use the
     152    IPython system for display hooks).  This class provides a way to
     153    use the Sage display formatting when not using interactive Sage.
     154    """
     155    def __init__(self, oldhook = sys.__displayhook__):
     156        """
     157        Set the old display hook (default to repr)
     158
     159        EXAMPLES::
     160
     161            sage: from sage.misc.displayhook import DisplayHook
     162            sage: def f(o): print repr(o)[:5], "..."
     163            sage: d = DisplayHook(f)
     164            sage: d(range(10))
     165            [0, 1 ...
     166        """
     167        self.oldhook = oldhook
     168
     169    def __call__(self, obj):
     170        """
     171        Format the object using Sage's formatting, or format it using the old
     172        display hook if Sage does not want to handle the object.
     173
     174        EXAMPLES::
     175
     176            sage: from sage.misc.displayhook import DisplayHook
     177            sage: d = DisplayHook()
     178            sage: d((identity_matrix(3), identity_matrix(3)))
     179            (
     180            [1 0 0]  [1 0 0]
     181            [0 1 0]  [0 1 0]
     182            [0 0 1], [0 0 1]
     183            )
     184        """
     185        s = format_obj(obj)
     186        if s is not None:
     187            print s
     188            __builtin__._ = obj
     189        else:
     190            self.oldhook(obj)