import formatting
from formatting import FormatElement
[docs]def call(func, description=None, *args):
"""Return a representation of this call. Any elements in args can
be given their own FormatElements in the final dictionary.
"""
if len(args) == 0:
funcvar = formatting.get_function()
return {'main': FormatElement(funcvar + "()", [funcvar + '()'], is_primitive=True),
funcvar + '()': FormatElement(description, is_abstract=True)}
latex = latex_function(func, *tuple(map(formatting.get_repstr, args)))
if latex:
return {'main': FormatElement(latex)}
if len(args) == 1:
funcvar = formatting.get_function()
argvar = formatting.call_argvar(args[0])
if isinstance(argvar, FormatElement):
return {'main': FormatElement("%s(%s)" % (funcvar, argvar.repstr),
[funcvar + r"(\cdot)"] + argvar.dependencies, is_primitive=True),
funcvar + r"(\cdot)": FormatElement(description, is_abstract=True)}
elif isinstance(args[0], FormatElement):
return {'main': FormatElement("%s(%s)" % (funcvar, argvar),
[funcvar + r"(\cdot)", argvar], is_primitive=True),
funcvar + r"(\cdot)": FormatElement(description, is_abstract=True),
argvar: args[0]}
else:
return {'main': FormatElement("%s(%s)" % (funcvar, args[0]),
[funcvar + r"(\cdot)"], is_primitive=True),
funcvar + r"(\cdot)": FormatElement(description, is_abstract=True)}
elif len(args) == 2:
funcvar = formatting.get_function()
argname0 = formatting.call_argvar(args[0])
argname1 = formatting.call_argvar(args[1])
result = {'main': FormatElement("%s(%s, %s)" % (funcvar, argname0, argname1),
[funcvar + r"(\cdot)"], is_primitive=True),
funcvar + r"(\cdot)": FormatElement(description, is_abstract=True)}
if isinstance(args[0], FormatElement):
result[argname0] = args[0]
result['main'].dependencies.append(argname0)
if isinstance(args[1], FormatElement):
result[argname1] = args[1]
result['main'].dependencies.append(argname1)
return result
raise RuntimeError("Cannot format %s(%s)" % (func, ', '.join(["%s" % arg for arg in args])))
[docs]def latex_function(func, *args):
if len(args) == 1:
interp = formatting.interpret1(func)
if interp == 'identity':
return args[0]
if len(args) == 2:
interp = formatting.interpret2(func)
if interp == '/':
return r"\frac{%s}{%s}" % args
elif interp == '-':
return r"%s - %s" % args
elif interp == '*':
return r"\left(%s\right) \left(%s\right)" % args
[docs]def english_function(func, *args):
if len(args) == 1:
interp = formatting.interpret1(func)
if interp == 'identity':
return args[0]
if len(args) == 2:
interp = formatting.interpret2(func)
if interp == '/':
return r"%s / %s" % args
elif interp == '-':
return r"%s - %s" % args
elif interp == '*':
return r"%s x %s" % args