_eval_apply() converted to canonize()
[sympy.git] / sympy / functions / special / zeta_functions.py
blob6599753fd14b8a236c75b3a6aa52bbf7da0a1eb2
2 from sympy.core import SingleValuedFunction, S, Basic, pi
4 ###############################################################################
5 ###################### HURWITZ GENERALIZED ZETA FUNCTION ######################
6 ###############################################################################
8 class zeta(SingleValuedFunction):
10 nofargs = (1, 2)
12 @classmethod
13 def canonize(cls, z, a=S.One):
14 z, a = map(Basic.sympify, (z, a))
16 if isinstance(a, Basic.Number):
17 if isinstance(a, Basic.NaN):
18 return S.NaN
19 elif isinstance(a, Basic.Zero):
20 return cls(z)
22 if isinstance(z, Basic.Number):
23 if isinstance(z, Basic.NaN):
24 return S.NaN
25 elif isinstance(z, Basic.Infinity):
26 return S.One
27 elif isinstance(z, Basic.Zero):
28 if a.is_negative:
29 return S.Half - a - 1
30 else:
31 return S.Half - a
32 elif isinstance(z, Basic.One):
33 return S.ComplexInfinity
34 elif isinstance(z, Basic.Integer):
35 if isinstance(a, Basic.Integer):
36 if z.is_negative:
37 zeta = (-1)**z * Basic.bernoulli(-z+1)/(-z+1)
38 elif z.is_even:
39 B, F = Basic.bernoulli(z), Basic.Factorial(z)
40 zeta = 2**(z-1) * abs(B) * pi**z / F
42 if a.is_negative:
43 return zeta + Basic.harmonic(abs(a), z)
44 else:
45 return zeta - Basic.harmonic(a-1, z)
48 class dirichlet_eta(SingleValuedFunction):
49 """
50 Dirichlet eta function
51 """
52 nofargs = 1
54 @classmethod
55 def canonize(cls, s):
56 if s == 1:
57 return Basic.log(2)
58 else:
59 return (1-2**(1-s)) * zeta(s)