#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# see benchsimple.py
# manually written python code
#
# probably nearly fastest possible...
# Note: escape consumes about 1/3..1/2 of the time
import time, sys
from benchsimple import test_results, context_dict, N
#----------------------
# evaluation
cache={}
def _eval(expr, a=None):
if expr not in cache:
cache[expr] = compile(expr,"","eval")
return eval(cache[expr],{"__builtins__":None},nsDict)
#----------------------
# different escapeing-routines
(HTML, LATEX) = range(0, 2)
#import cgi
#import xml.sax.saxutils
#from xml.sax.saxutils import escape,quoteattr
def escape(s, format=HTML):
# return cgi.escape(s, True) #is slower
# return xml.sax.saxutils.escape(s) #s
# return xml.sax.saxutils.escape(s,{'"':""","'":"&abc;"}) #s
s = s.replace(u"&", u"&") # must be done first!
s = s.replace(u"<", u"<")
s = s.replace(u">", u">")
s = s.replace(u'"', u""")
s = s.replace(u"'", u"'")
return s
#escape = escape_ #0.106..8, 0.0675..69, <>&"'
#escape = cgi.escape #0.092..4, 0.061..2 <>&
#escape = xml.sax.saxutils.escape #0.095..6, 0.063..67 <>&
#cgi..., xml... are both slower if wrapped into escape-function
myDict = context_dict.copy()
#----------------------
# different handcoded versions
result_header = '''
'''
def handcoded_eval_escape(nsDict):
myDict.update(nsDict)
l = []
write = l.append
write(result_header)
write(''' Benchsimple | ''')
write(escape(_eval("title")))
write('''
Benchsimple | ''')
write(escape(_eval("title")))
write('''
''' )
for i in enumerate(_eval("table")):
nsDict["n"] =i[0]
nsDict["row"]=i[1]
write( '''
''' )
for col in _eval("row"):
nsDict["col"]=col
if col == nsDict["highlight"]:
write( ''' ''' )
else:
write( ''' | ''' )
write( escape(str(_eval("col"))) )
write( ''' | \n''' )
write( '''
\n''' )
write( '''
''' )
return u"".join(l)
def handcoded_eval_noescape(nsDict):
myDict.update(nsDict)
l = []
write = l.append
write(result_header)
write(''' Benchsimple | ''')
write(_eval("title"))
write('''
Benchsimple | ''')
write(_eval("title"))
write('''
''' )
for i in enumerate(_eval("table")):
nsDict["n"] =i[0]
nsDict["row"]=i[1]
write( '''
''' )
for col in _eval("row"):
nsDict["col"]=col
if col == nsDict["highlight"]:
write( ''' ''' )
else:
write( ''' | ''' )
write( str(_eval("col")) )
write( ''' | \n''' )
write( '''
\n''' )
write( '''