improved unicode handling.
background message is now stoppable. background message not “jumping” (multiplying) anymore.
This commit is contained in:
parent
40c2a5dd6d
commit
38c536b6b7
|
@ -5,14 +5,21 @@ import sys,time,random,threading,os,subprocess,shlex
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from optparse import Option
|
from optparse import Option
|
||||||
|
|
||||||
|
# -----------------------------
|
||||||
|
def srepr(arg,
|
||||||
|
glue = '\n'):
|
||||||
|
# -----------------------------
|
||||||
|
if (not hasattr(arg, "strip") and
|
||||||
|
hasattr(arg, "__getitem__") or
|
||||||
|
hasattr(arg, "__iter__")):
|
||||||
|
return glue.join(srepr(x) for x in arg)
|
||||||
|
return arg if isinstance(arg,basestring) else repr(arg)
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
def croak(what,
|
def croak(what,
|
||||||
newline = True):
|
newline = True):
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
sys.stderr.write(('\n'.join(map(str,what)) if not hasattr(what, "strip")
|
sys.stderr.write(srepr(what,glue = '\n') + ('\n' if newline else ''))
|
||||||
and hasattr(what, "__getitem__")
|
|
||||||
or hasattr(what, "__iter__") else str(what))
|
|
||||||
+('\n' if newline else ''))
|
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
@ -23,7 +30,7 @@ def report(who,what):
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
def emph(what):
|
def emph(what):
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
return '\033[1m'+str(what)+'\033[0m'
|
return '\033[1m'+srepr(what)+'\033[0m'
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Matlab like trigonometric functions that take and return angles in degrees.
|
# Matlab like trigonometric functions that take and return angles in degrees.
|
||||||
|
@ -67,29 +74,29 @@ class extendableOption(Option):
|
||||||
else:
|
else:
|
||||||
Option.take_action(self, action, dest, opt, value, values, parser)
|
Option.take_action(self, action, dest, opt, value, values, parser)
|
||||||
|
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
class backgroundMessage(threading.Thread):
|
class backgroundMessage(threading.Thread):
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
choices = {'bounce': ['_','o','O','°','¯','¯','°','O','o',],
|
choices = {'bounce': ['_','o','O','°','¯','¯','°','O','o',],
|
||||||
'circle': [u'\u25f4',u'\u25f5',u'\u25f6',u'\u25f7'],
|
'circle': [u'\u25f4',u'\u25f5',u'\u25f6',u'\u25f7'],
|
||||||
'hexagon': [u'\u2b22',u'\u2b23'],
|
'hexagon': [u'\u2b22',u'\u2b23'],
|
||||||
'pentagon': [u'\u2b20',u'\u2b54'],
|
|
||||||
'square': [u'\u2596',u'\u2598',u'\u259d',u'\u2597'],
|
'square': [u'\u2596',u'\u2598',u'\u259d',u'\u2597'],
|
||||||
'triangle': [u'\u140a',u'\u140a',u'\u1403',u'\u1405',u'\u1405',u'\u1403'],
|
'triangle': [u'\u140a',u'\u140a',u'\u1403',u'\u1405',u'\u1405',u'\u1403'],
|
||||||
'amoeba': [u'\u2596',u'\u258f',u'\u2598',u'\u2594',u'\u259d',u'\u2595',u'\u2597',u'\u2582'],
|
'amoeba': [u'\u2596',u'\u258f',u'\u2598',u'\u2594',u'\u259d',u'\u2595',u'\u2597',u'\u2582'],
|
||||||
'beat': [u'\u2581',u'\u2582',u'\u2583',u'\u2584',u'\u2585',u'\u2586',u'\u2587',u'\u2588',u'\u2587',u'\u2586',u'\u2585',u'\u2584',u'\u2583',u'\u2582',],
|
'beat': [u'\u2581',u'\u2582',u'\u2583',u'\u2585',u'\u2586',u'\u2587',u'\u2587',u'\u2586',u'\u2585',u'\u2583',u'\u2582',],
|
||||||
'prison': [u'\u168b',u'\u168c',u'\u168d',u'\u168f',u'\u168e',u'\u168d',u'\u168c',u'\u168b',],
|
'prison': [u'\u168b',u'\u168c',u'\u168d',u'\u168f',u'\u168e',u'\u168d',u'\u168c',u'\u168b',],
|
||||||
'breath': [u'\u1690',u'\u1691',u'\u1692',u'\u1693',u'\u1694',u'\u1693',u'\u1692',u'\u1691',u'\u1690'],
|
'breath': [u'\u1690',u'\u1691',u'\u1692',u'\u1693',u'\u1694',u'\u1693',u'\u1692',u'\u1691',u'\u1690',],
|
||||||
'pulse': ['·','•',u'\u25cf',u'\u25cf','•',],
|
'pulse': [u'·',u'•',u'\u25cf',u'\u25cf',u'•',],
|
||||||
'ant': [u'\u2801',u'\u2802',u'\u2810',u'\u2820',u'\u2804',u'\u2840',u'\u2880',u'\u2820',u'\u2804',u'\u2802',u'\u2810',u'\u2808'],
|
'ant': [u'\u2801',u'\u2802',u'\u2810',u'\u2820',u'\u2804',u'\u2840',u'\u2880',u'\u2820',u'\u2804',u'\u2802',u'\u2810',u'\u2808'],
|
||||||
|
'juggle': [u'\ua708',u'\ua709',u'\ua70a',u'\ua70b',u'\ua70c',u'\ua711',u'\ua710',u'\ua70f',u'\ua70d',],
|
||||||
'classic': ['-', '\\', '|', '/',],
|
'classic': ['-', '\\', '|', '/',],
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
symbol = None,
|
symbol = None,
|
||||||
wait = 0.1):
|
wait = 0.1):
|
||||||
threading.Thread.__init__(self)
|
super(backgroundMessage, self).__init__()
|
||||||
|
self._stop = threading.Event()
|
||||||
self.message = ''
|
self.message = ''
|
||||||
self.new_message = ''
|
self.new_message = ''
|
||||||
self.counter = 0
|
self.counter = 0
|
||||||
|
@ -101,9 +108,17 @@ class backgroundMessage(threading.Thread):
|
||||||
length = len(self.symbols[self.counter] + self.gap + self.message)
|
length = len(self.symbols[self.counter] + self.gap + self.message)
|
||||||
sys.stderr.write(chr(8)*length + ' '*length + chr(8)*length)
|
sys.stderr.write(chr(8)*length + ' '*length + chr(8)*length)
|
||||||
sys.stderr.write('')
|
sys.stderr.write('')
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._stop.set()
|
||||||
|
|
||||||
|
def stopped(self):
|
||||||
|
return self._stop.is_set()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while not threading.enumerate()[0]._Thread__stopped:
|
# while not threading.enumerate()[0]._Thread__stopped:
|
||||||
|
while not self.stopped():
|
||||||
time.sleep(self.waittime)
|
time.sleep(self.waittime)
|
||||||
self.update_message()
|
self.update_message()
|
||||||
self.__quit__()
|
self.__quit__()
|
||||||
|
@ -114,14 +129,18 @@ class backgroundMessage(threading.Thread):
|
||||||
|
|
||||||
def print_message(self):
|
def print_message(self):
|
||||||
length = len(self.symbols[self.counter] + self.gap + self.message)
|
length = len(self.symbols[self.counter] + self.gap + self.message)
|
||||||
sys.stderr.write(chr(8)*length + ' '*length + chr(8)*length) # delete former message
|
sys.stderr.write(chr(8)*length + ' '*length + chr(8)*length + \
|
||||||
sys.stderr.write(self.symbols[self.counter] + self.gap + self.new_message) # print new message
|
self.symbols[self.counter] + self.gap + self.new_message) # delete former and print new message
|
||||||
|
sys.stderr.flush()
|
||||||
self.message = self.new_message
|
self.message = self.new_message
|
||||||
|
|
||||||
def update_message(self):
|
def update_message(self):
|
||||||
self.counter = (self.counter + 1)%len(self.symbols)
|
self.counter = (self.counter + 1)%len(self.symbols)
|
||||||
self.print_message()
|
self.print_message()
|
||||||
|
|
||||||
|
def animation(self,which = None):
|
||||||
|
return ''.join(self.choices[which]) if which in self.choices else ''
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Non-linear least square fitting (Levenberg-Marquardt method) with
|
Non-linear least square fitting (Levenberg-Marquardt method) with
|
||||||
the bounded parameters.
|
the bounded parameters.
|
||||||
|
|
Loading…
Reference in New Issue