'Return a string representation of this decision tree that
expresses the decisions it makes as a nested set of pseudocode
if statements.'

def pseudocode(self, prefix=u'', depth=4):

    if (self._fname is None):
        return u'{0}return    {1!r}\n'.format(prefix, self._label)
    s = u''
    for (fval, result) in sorted(self._decisions.items()):
        s += u'{0}if    {1}    ==    {2!r}:    '.format(prefix, self._fname, fval)
        if ((result._fname is not None) and (depth > 1)):
            s += (u'\n' + result.pseudocode((prefix + u'        '), (depth - 1)))
        else:
            s += u'return    {0!r}\n'.format(result._label)
    if (self._default is not None):
        if (len(self._decisions) == 1):
            s += u'{0}if    {1}    !=    {2!r}:    '.format(prefix, self._fname, list(self._decisions.keys())[0])
        else:
            s += u'{0}else:    '.format(prefix)
        if ((self._default._fname is not None) and (depth > 1)):
            s += (u'\n' + self._default.pseudocode((prefix + u'        '), (depth - 1)))
        else:
            s += u'return    {0!r}\n'.format(self._default._label)
    return s
