Error: function () takes at least n arguments (n specified)

I am trying to use SymPy to remove residuals, in this case a cotangent function. I have an integrate () function:

import sympy as sy import numpy as np def integrate(f, z, gamma, t, lower, upper, exact=True): ''' Integrate f(z) along the contour gamma(t): [lower, upper] --> C INPUTS: f - A SymPy expression. Should represent a function from C to C. z - A SymPy symbol. Should be the variable of f. gamma - A SymPy expression. Should represent a function from [lower, upper] to C. t - A SymPy symbol. Should be the variable of gamma. lower - The lower bound for the domain of gamma. upper - The upper bound for the domain of gamma. RETURN: A complex number. ''' integrand = f.subs(z, gamma)*sy.diff(gamma, t) ans = sy.integrate(integrand, (t, lower, upper)) if exact: return sy.simplify(ans) if ~exact: return sy.N(sy.simplify(ans)) 

which I call this way:

 def cot_res(n): """Return the residue of the cotangent function at n*pi/2.""" z, t = sy.symbols('z t') f = sy.cot(z) gamma = n*np.pi/2 + sy.exp(1j*t) return 1/(2*np.pi*1j)*integrate(f, z, gamma, 0, 2*sy.pi, exact=True) for i in xrange(10): print i/2., cot_res(i) 

And I keep getting the integrate() takes at least 6 arguments (6 given) error integrate() takes at least 6 arguments (6 given) , and I'm not sure where my problem is. I tried to restart the kernel.

+6
source share
1 answer

When you receive an error message indicating that Python cannot read the arguments, this is usually because the number of arguments you passed is equal to the number of arguments required, but you are missing some necessary arguments, including some optional arguments. In this case, you have the following definition:

 def integrate(f, z, gamma, t, lower, upper, exact=True): 

and the following call:

 integrate(f, z, gamma, 0, 2*sy.pi, exact=True) 

If we align them, we will see

 def integrate(f, z, gamma, t, lower, upper, exact=True): integrate(f, z, gamma, 0, 2*sy.pi, exact=True) 

that you are missing one of lower , upper or t , but since you provided exact , the error message gets confused.

Python 3 has a better error message for things like this:

 >>> def f(a, b=0): pass ... >>> f(b=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() missing 1 required positional argument: 'a' 
+12
source

Source: https://habr.com/ru/post/987976/


All Articles