##// END OF EJS Templates
Merge pull request #1399 from asmeurer/sympyprinting...
Merge pull request #1399 from asmeurer/sympyprinting Use LaTeX to display, on output, various built-in types with the SymPy printing extension. SymPy's latex() function supports printing lists, tuples, and dicts using latex notation (it uses bmatrix, pmatrix, and Bmatrix, respectively). This provides a more unified experience with SymPy functions that return these types (such as solve()). Also display ints, longs, and floats using LaTeX, to get a more unified printing experience (so that, e.g., x/x will print the same as just 1). The string form can always be obtained by manually calling the actual print function, or 2d unicode printing using pprint(). SymPy's latex() function doesn't treat set() or frosenset() correctly presently (see http://code.google.com/p/sympy/issues /detail?id=3062), so for the present, we leave those alone.

File last commit:

r4872:34c10438
r6482:ba882bf7 merge
Show More
thread_ex.py
50 lines | 1.7 KiB | text/x-python | PythonLexer
Ville M. Vainio
merge, fix crlf
r1112 """
Thread subclass that can deal with asynchronously function calls via
raise_exc.
"""
Ville M. Vainio
crlf -> lf
r1032 import threading
import inspect
import ctypes
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 def _async_raise(tid, exctype):
"""raises the exception, performs cleanup if needed"""
if not inspect.isclass(exctype):
raise TypeError("Only types can be raised (not instances)")
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
if res == 0:
raise ValueError("invalid thread id")
elif res != 1:
Bernardo B. Marques
remove all trailling spaces
r4872 # """if it returns a number greater than one, you're in trouble,
Ville M. Vainio
crlf -> lf
r1032 # and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
raise SystemError("PyThreadState_SetAsyncExc failed")
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
merge, fix crlf
r1112 class ThreadEx(threading.Thread):
Ville M. Vainio
crlf -> lf
r1032 def _get_my_tid(self):
"""determines this (self's) thread id"""
if not self.isAlive():
raise threading.ThreadError("the thread is not active")
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 # do we have it cached?
if hasattr(self, "_thread_id"):
return self._thread_id
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 # no, look for it in the _active dict
for tid, tobj in threading._active.items():
if tobj is self:
self._thread_id = tid
return tid
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 raise AssertionError("could not determine the thread's id")
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 def raise_exc(self, exctype):
"""raises the given exception type in the context of this thread"""
_async_raise(self._get_my_tid(), exctype)
Bernardo B. Marques
remove all trailling spaces
r4872
Ville M. Vainio
crlf -> lf
r1032 def kill(self):
Bernardo B. Marques
remove all trailling spaces
r4872 """raises SystemExit in the context of the given thread, which should
Ville M. Vainio
crlf -> lf
r1032 cause the thread to exit silently (unless caught)"""
self.raise_exc(SystemExit)