Weird behavior BuiltinFunction    
   Dear Sage,
I'm trying to program qPochhammer functions which can interact with sage in a nice way. However I encounter some weird behavior of these new BuiltinFunctions. This is what I made: from sage.symbolic.function import BuiltinFunction
class qPochhammer(BuiltinFunction):
    def __init__(self, m=1, expand_exp=False):
        self.m = m
        self.expand_exp = expand_exp
        self.has_arguments = False
        BuiltinFunction.__init__(self, 'qPochhammer(%i)' % self.m, nargs=(m+2))
    def _latex_(self):
        if self.has_arguments:
            return '(%s; %s)_{%s}' % (self.a, self.q, self.n)
        return 'qPochhammer'
    def _qPochhammer1(self, a, q, n):
        if n == 0:
            return 1
        return (1 - a*q**(n-1))*self._qPochhammer1(a, q, n-1)
    def _expand(self):
        return prod([self._qPochhammer1(elm, self.q, self.n) \
                     for elm in self.a])
    def _eval_(self, *args):
        if len(args) != self.m + 2:
            raise RuntimeError, args
        if self.expand_exp:
            return self.evaluate(args[:self.m], args[-2], args[-1])
        return None
    def _evalf_(self, *args, **kwds):
        if type(self.a) == tuple:
            return self._expand()
        return self._qPochhammer1(self.a, self.q, self.n)
    def evaluate(self, a, q, n):
        self.a = a
        self.q = q
        self.n = n
        self.has_arguments = True
        if type(self.a) == tuple:
            return self._expand()
        return self._qPochhammer1(self.a, self.q, self.n)
Now I try the following the the sage console:
sage: a, b, c, q = var('a b c q')
sage: qshift3 = qPochhammer(m=3, expand_exp=True)
sage: qshift3(a, b, c, q, 2)
(c - 1)*(b - 1)*(a - 1)*(c*q - 1)*(b*q - 1)*(a*q - 1)
sage: qshift2 = qPochhammer(m=2, expand_exp=True)
sage: qshift2(a, b, q, 2)
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
/home/noud/work/sage/local/lib/python2.7/site-packages/sage/all_cmdline.pyc in  <module>()
----> 1 
      2 
      3 
      4 
      5 
/home/noud/work/sage/local/lib/python2.7/site-packages/sage/symbolic/function.so in sage.symbolic.function.Function.__call__ (sage/symbolic/function.cpp:4941)()
    430 
    431 
--> 432 
    433 
    434 
/home/noud/work/sage/local/lib/python2.7/site-packages/sage/all_cmdline.pyc in _eval_(self, *args)
     27 
     28 
---> 29 
     30 
     31 
RuntimeError: (a, b, q, 2)
Can someone explain to my why I get a RuntimeError and how to solve this?
Best regards, Noud
 
 