1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * gmpy2_math.h                                                            *
3  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4  * Python interface to the GMP or MPIR, MPFR, and MPC multiple precision   *
5  * libraries.                                                              *
6  *                                                                         *
7  * Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,               *
8  *           2008, 2009 Alex Martelli                                      *
9  *                                                                         *
10  * Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014,                     *
11  *           2015, 2016, 2017, 2018, 2019, 2020 Case Van Horsen            *
12  *                                                                         *
13  * This file is part of GMPY2.                                             *
14  *                                                                         *
15  * GMPY2 is free software: you can redistribute it and/or modify it under  *
16  * the terms of the GNU Lesser General Public License as published by the  *
17  * Free Software Foundation, either version 3 of the License, or (at your  *
18  * option) any later version.                                              *
19  *                                                                         *
20  * GMPY2 is distributed in the hope that it will be useful, but WITHOUT    *
21  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or   *
22  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public    *
23  * License for more details.                                               *
24  *                                                                         *
25  * You should have received a copy of the GNU Lesser General Public        *
26  * License along with GMPY2; if not, see <http://www.gnu.org/licenses/>    *
27  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
28 
29 #ifndef GMPY_MATH_H
30 #define GMPY_MATH_H
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 static PyObject * GMPy_Real_Sin(PyObject *x, CTXT_Object *context);
37 static PyObject * GMPy_Complex_Sin(PyObject *x, CTXT_Object *context);
38 static PyObject * GMPy_Number_Sin(PyObject *x, CTXT_Object *context);
39 static PyObject * GMPy_Context_Sin(PyObject *self, PyObject *other);
40 
41 static PyObject * GMPy_Real_Cos(PyObject *x, CTXT_Object *context);
42 static PyObject * GMPy_Complex_Cos(PyObject *x, CTXT_Object *context);
43 static PyObject * GMPy_Number_Cos(PyObject *x, CTXT_Object *context);
44 static PyObject * GMPy_Context_Cos(PyObject *self, PyObject *other);
45 
46 static PyObject * GMPy_Real_Tan(PyObject *x, CTXT_Object *context);
47 static PyObject * GMPy_Complex_Tan(PyObject *x, CTXT_Object *context);
48 static PyObject * GMPy_Number_Tan(PyObject *x, CTXT_Object *context);
49 static PyObject * GMPy_Context_Tan(PyObject *self, PyObject *other);
50 
51 static PyObject * GMPy_Real_Atan(PyObject *x, CTXT_Object *context);
52 static PyObject * GMPy_Complex_Atan(PyObject *x, CTXT_Object *context);
53 static PyObject * GMPy_Number_Atan(PyObject *x, CTXT_Object *context);
54 static PyObject * GMPy_Context_Atan(PyObject *self, PyObject *other);
55 
56 static PyObject * GMPy_Real_Sinh(PyObject *x, CTXT_Object *context);
57 static PyObject * GMPy_Complex_Sinh(PyObject *x, CTXT_Object *context);
58 static PyObject * GMPy_Number_Sinh(PyObject *x, CTXT_Object *context);
59 static PyObject * GMPy_Context_Sinh(PyObject *self, PyObject *other);
60 
61 static PyObject * GMPy_Real_Cosh(PyObject *x, CTXT_Object *context);
62 static PyObject * GMPy_Complex_Cosh(PyObject *x, CTXT_Object *context);
63 static PyObject * GMPy_Number_Cosh(PyObject *x, CTXT_Object *context);
64 static PyObject * GMPy_Context_Cosh(PyObject *self, PyObject *other);
65 
66 static PyObject * GMPy_Real_Tanh(PyObject *x, CTXT_Object *context);
67 static PyObject * GMPy_Complex_Tanh(PyObject *x, CTXT_Object *context);
68 static PyObject * GMPy_Number_Tanh(PyObject *x, CTXT_Object *context);
69 static PyObject * GMPy_Context_Tanh(PyObject *self, PyObject *other);
70 
71 static PyObject * GMPy_Real_Asinh(PyObject *x, CTXT_Object *context);
72 static PyObject * GMPy_Complex_Asinh(PyObject *x, CTXT_Object *context);
73 static PyObject * GMPy_Number_Asinh(PyObject *x, CTXT_Object *context);
74 static PyObject * GMPy_Context_Asinh(PyObject *self, PyObject *other);
75 
76 static PyObject * GMPy_Real_Acosh(PyObject *x, CTXT_Object *context);
77 static PyObject * GMPy_Complex_Acosh(PyObject *x, CTXT_Object *context);
78 static PyObject * GMPy_Number_Acosh(PyObject *x, CTXT_Object *context);
79 static PyObject * GMPy_Context_Acosh(PyObject *self, PyObject *other);
80 
81 static PyObject * GMPy_Real_Sec(PyObject *x, CTXT_Object *context);
82 static PyObject * GMPy_Number_Sec(PyObject *x, CTXT_Object *context);
83 static PyObject * GMPy_Context_Sec(PyObject *self, PyObject *other);
84 
85 static PyObject * GMPy_Real_Csc(PyObject *x, CTXT_Object *context);
86 static PyObject * GMPy_Number_Csc(PyObject *x, CTXT_Object *context);
87 static PyObject * GMPy_Context_Csc(PyObject *self, PyObject *other);
88 
89 static PyObject * GMPy_Real_Cot(PyObject *x, CTXT_Object *context);
90 static PyObject * GMPy_Number_Cot(PyObject *x, CTXT_Object *context);
91 static PyObject * GMPy_Context_Cot(PyObject *self, PyObject *other);
92 
93 static PyObject * GMPy_Real_Sech(PyObject *x, CTXT_Object *context);
94 static PyObject * GMPy_Number_Sech(PyObject *x, CTXT_Object *context);
95 static PyObject * GMPy_Context_Sech(PyObject *self, PyObject *other);
96 
97 static PyObject * GMPy_Real_Csch(PyObject *x, CTXT_Object *context);
98 static PyObject * GMPy_Number_Csch(PyObject *x, CTXT_Object *context);
99 static PyObject * GMPy_Context_Csch(PyObject *self, PyObject *other);
100 
101 static PyObject * GMPy_Real_Coth(PyObject *x, CTXT_Object *context);
102 static PyObject * GMPy_Number_Coth(PyObject *x, CTXT_Object *context);
103 static PyObject * GMPy_Context_Coth(PyObject *self, PyObject *other);
104 
105 static PyObject * GMPy_Real_Acos(PyObject *x, CTXT_Object *context);
106 static PyObject * GMPy_Complex_Acos(PyObject *x, CTXT_Object *context);
107 static PyObject * GMPy_Number_Acos(PyObject *x, CTXT_Object *context);
108 static PyObject * GMPy_Context_Acos(PyObject *self, PyObject *other);
109 
110 static PyObject * GMPy_Real_Asin(PyObject *x, CTXT_Object *context);
111 static PyObject * GMPy_Complex_Asin(PyObject *x, CTXT_Object *context);
112 static PyObject * GMPy_Number_Asin(PyObject *x, CTXT_Object *context);
113 static PyObject * GMPy_Context_Asin(PyObject *self, PyObject *other);
114 
115 static PyObject * GMPy_Real_Atanh(PyObject *x, CTXT_Object *context);
116 static PyObject * GMPy_Complex_Atanh(PyObject *x, CTXT_Object *context);
117 static PyObject * GMPy_Number_Atanh(PyObject *x, CTXT_Object *context);
118 static PyObject * GMPy_Context_Atanh(PyObject *self, PyObject *other);
119 
120 static PyObject * GMPy_Real_Sin_Cos(PyObject *x, CTXT_Object *context);
121 static PyObject * GMPy_Complex_Sin_Cos(PyObject *x, CTXT_Object *context);
122 static PyObject * GMPy_Number_Sin_Cos(PyObject *x, CTXT_Object *context);
123 static PyObject * GMPy_Context_Sin_Cos(PyObject *self, PyObject *other);
124 
125 static PyObject * GMPy_Real_Sinh_Cosh(PyObject *x, CTXT_Object *context);
126 static PyObject * GMPy_Number_Sinh_Cosh(PyObject *x, CTXT_Object *context);
127 static PyObject * GMPy_Context_Sinh_Cosh(PyObject *self, PyObject *other);
128 
129 static PyObject * GMPy_Real_Atan2(PyObject *x, PyObject *y, CTXT_Object *context);
130 static PyObject * GMPy_Number_Atan2(PyObject *x, PyObject *y, CTXT_Object *context);
131 static PyObject * GMPy_Context_Atan2(PyObject *self, PyObject *args);
132 
133 static PyObject * GMPy_Real_Hypot(PyObject *x, PyObject *y, CTXT_Object *context);
134 static PyObject * GMPy_Number_Hypot(PyObject *x, PyObject *y, CTXT_Object *context);
135 static PyObject * GMPy_Context_Hypot(PyObject *self, PyObject *args);
136 
137 static PyObject * GMPy_Context_Degrees(PyObject *self, PyObject *other);
138 static PyObject * GMPy_Context_Radians(PyObject *self, PyObject *other);
139 
140 static PyObject * GMPy_Real_Log(PyObject *x, CTXT_Object *context);
141 static PyObject * GMPy_Complex_Log(PyObject *x, CTXT_Object *context);
142 static PyObject * GMPy_Number_Log(PyObject *x, CTXT_Object *context);
143 static PyObject * GMPy_Context_Log(PyObject *self, PyObject *other);
144 
145 static PyObject * GMPy_Real_Log10(PyObject *x, CTXT_Object *context);
146 static PyObject * GMPy_Complex_Log10(PyObject *x, CTXT_Object *context);
147 static PyObject * GMPy_Number_Log10(PyObject *x, CTXT_Object *context);
148 static PyObject * GMPy_Context_Log10(PyObject *self, PyObject *other);
149 
150 static PyObject * GMPy_Real_Exp(PyObject *x, CTXT_Object *context);
151 static PyObject * GMPy_Complex_Exp(PyObject *x, CTXT_Object *context);
152 static PyObject * GMPy_Number_Exp(PyObject *x, CTXT_Object *context);
153 static PyObject * GMPy_Context_Exp(PyObject *self, PyObject *other);
154 
155 static PyObject * GMPy_Real_Sqrt(PyObject *x, CTXT_Object *context);
156 static PyObject * GMPy_Complex_Sqrt(PyObject *x, CTXT_Object *context);
157 static PyObject * GMPy_Number_Sqrt(PyObject *x, CTXT_Object *context);
158 static PyObject * GMPy_Context_Sqrt(PyObject *self, PyObject *other);
159 
160 static PyObject * GMPy_Real_RecSqrt(PyObject *x, CTXT_Object *context);
161 static PyObject * GMPy_Number_RecSqrt(PyObject *x, CTXT_Object *context);
162 static PyObject * GMPy_Context_RecSqrt(PyObject *self, PyObject *other);
163 
164 static PyObject * GMPy_Real_Rint(PyObject *x, CTXT_Object *context);
165 static PyObject * GMPy_Number_Rint(PyObject *x, CTXT_Object *context);
166 static PyObject * GMPy_Context_Rint(PyObject *self, PyObject *other);
167 
168 static PyObject * GMPy_Real_RintCeil(PyObject *x, CTXT_Object *context);
169 static PyObject * GMPy_Number_RintCeil(PyObject *x, CTXT_Object *context);
170 static PyObject * GMPy_Context_RintCeil(PyObject *self, PyObject *other);
171 
172 static PyObject * GMPy_Real_RintFloor(PyObject *x, CTXT_Object *context);
173 static PyObject * GMPy_Number_RintFloor(PyObject *x, CTXT_Object *context);
174 static PyObject * GMPy_Context_RintFloor(PyObject *self, PyObject *other);
175 
176 static PyObject * GMPy_Real_RintRound(PyObject *x, CTXT_Object *context);
177 static PyObject * GMPy_Number_RintRound(PyObject *x, CTXT_Object *context);
178 static PyObject * GMPy_Context_RintRound(PyObject *self, PyObject *other);
179 
180 static PyObject * GMPy_Real_RintTrunc(PyObject *x, CTXT_Object *context);
181 static PyObject * GMPy_Number_RintTrunc(PyObject *x, CTXT_Object *context);
182 static PyObject * GMPy_Context_RintTrunc(PyObject *self, PyObject *other);
183 
184 static PyObject * GMPy_Real_Frac(PyObject *x, CTXT_Object *context);
185 static PyObject * GMPy_Number_Frac(PyObject *x, CTXT_Object *context);
186 static PyObject * GMPy_Context_Frac(PyObject *self, PyObject *other);
187 
188 static PyObject * GMPy_Real_Cbrt(PyObject *x, CTXT_Object *context);
189 static PyObject * GMPy_Number_Cbrt(PyObject *x, CTXT_Object *context);
190 static PyObject * GMPy_Context_Cbrt(PyObject *self, PyObject *other);
191 
192 static PyObject * GMPy_Real_Log2(PyObject *x, CTXT_Object *context);
193 static PyObject * GMPy_Number_Log2(PyObject *x, CTXT_Object *context);
194 static PyObject * GMPy_Context_Log2(PyObject *self, PyObject *other);
195 
196 static PyObject * GMPy_Real_Exp2(PyObject *x, CTXT_Object *context);
197 static PyObject * GMPy_Number_Exp2(PyObject *x, CTXT_Object *context);
198 static PyObject * GMPy_Context_Exp2(PyObject *self, PyObject *other);
199 
200 static PyObject * GMPy_Real_Exp10(PyObject *x, CTXT_Object *context);
201 static PyObject * GMPy_Number_Exp10(PyObject *x, CTXT_Object *context);
202 static PyObject * GMPy_Context_Exp10(PyObject *self, PyObject *other);
203 
204 static PyObject * GMPy_Real_Log1p(PyObject *x, CTXT_Object *context);
205 static PyObject * GMPy_Number_Log1p(PyObject *x, CTXT_Object *context);
206 static PyObject * GMPy_Context_Log1p(PyObject *self, PyObject *other);
207 
208 static PyObject * GMPy_Real_Expm1(PyObject *x, CTXT_Object *context);
209 static PyObject * GMPy_Number_Expm1(PyObject *x, CTXT_Object *context);
210 static PyObject * GMPy_Context_Expm1(PyObject *self, PyObject *other);
211 
212 static PyObject * GMPy_Real_Eint(PyObject *x, CTXT_Object *context);
213 static PyObject * GMPy_Number_Eint(PyObject *x, CTXT_Object *context);
214 static PyObject * GMPy_Context_Eint(PyObject *self, PyObject *other);
215 
216 static PyObject * GMPy_Real_Li2(PyObject *x, CTXT_Object *context);
217 static PyObject * GMPy_Number_Li2(PyObject *x, CTXT_Object *context);
218 static PyObject * GMPy_Context_Li2(PyObject *self, PyObject *other);
219 
220 static PyObject * GMPy_Real_Lngamma(PyObject *x, CTXT_Object *context);
221 static PyObject * GMPy_Number_Lngamma(PyObject *x, CTXT_Object *context);
222 static PyObject * GMPy_Context_Lngamma(PyObject *self, PyObject *other);
223 
224 static PyObject * GMPy_Real_Digamma(PyObject *x, CTXT_Object *context);
225 static PyObject * GMPy_Number_Digamma(PyObject *x, CTXT_Object *context);
226 static PyObject * GMPy_Context_Digamma(PyObject *self, PyObject *other);
227 
228 static PyObject * GMPy_Real_Zeta(PyObject *x, CTXT_Object *context);
229 static PyObject * GMPy_Number_Zeta(PyObject *x, CTXT_Object *context);
230 static PyObject * GMPy_Context_Zeta(PyObject *self, PyObject *other);
231 
232 static PyObject * GMPy_Real_Erf(PyObject *x, CTXT_Object *context);
233 static PyObject * GMPy_Number_Erf(PyObject *x, CTXT_Object *context);
234 static PyObject * GMPy_Context_Erf(PyObject *self, PyObject *other);
235 
236 static PyObject * GMPy_Real_Erfc(PyObject *x, CTXT_Object *context);
237 static PyObject * GMPy_Number_Erfc(PyObject *x, CTXT_Object *context);
238 static PyObject * GMPy_Context_Erfc(PyObject *self, PyObject *other);
239 
240 static PyObject * GMPy_Real_J0(PyObject *x, CTXT_Object *context);
241 static PyObject * GMPy_Number_J0(PyObject *x, CTXT_Object *context);
242 static PyObject * GMPy_Context_J0(PyObject *self, PyObject *other);
243 
244 static PyObject * GMPy_Real_J1(PyObject *x, CTXT_Object *context);
245 static PyObject * GMPy_Number_J1(PyObject *x, CTXT_Object *context);
246 static PyObject * GMPy_Context_J1(PyObject *self, PyObject *other);
247 
248 static PyObject * GMPy_Real_Y0(PyObject *x, CTXT_Object *context);
249 static PyObject * GMPy_Number_Y0(PyObject *x, CTXT_Object *context);
250 static PyObject * GMPy_Context_Y0(PyObject *self, PyObject *other);
251 
252 static PyObject * GMPy_Real_Y1(PyObject *x, CTXT_Object *context);
253 static PyObject * GMPy_Number_Y1(PyObject *x, CTXT_Object *context);
254 static PyObject * GMPy_Context_Y1(PyObject *self, PyObject *other);
255 
256 static PyObject * GMPy_Real_Ai(PyObject *x, CTXT_Object *context);
257 static PyObject * GMPy_Number_Ai(PyObject *x, CTXT_Object *context);
258 static PyObject * GMPy_Context_Ai(PyObject *self, PyObject *other);
259 
260 static PyObject * GMPy_Real_FMA(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context);
261 static PyObject * GMPy_Number_FMA(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context);
262 static PyObject * GMPy_Context_FMA(PyObject *self, PyObject *args);
263 
264 static PyObject * GMPy_Real_FMS(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context);
265 static PyObject * GMPy_Number_FMS(PyObject *x, PyObject *y, PyObject *z, CTXT_Object *context);
266 static PyObject * GMPy_Context_FMS(PyObject *self, PyObject *args);
267 
268 static PyObject * GMPy_Real_Root(PyObject *x, PyObject *y, CTXT_Object *context);
269 static PyObject * GMPy_Number_Root(PyObject *x, PyObject *y, CTXT_Object *context);
270 static PyObject * GMPy_Context_Root(PyObject *self, PyObject *args);
271 
272 static PyObject * GMPy_Real_Jn(PyObject *x, PyObject *y, CTXT_Object *context);
273 static PyObject * GMPy_Number_Jn(PyObject *x, PyObject *y, CTXT_Object *context);
274 static PyObject * GMPy_Context_Jn(PyObject *self, PyObject *args);
275 
276 static PyObject * GMPy_Real_Yn(PyObject *x, PyObject *y, CTXT_Object *context);
277 static PyObject * GMPy_Number_Yn(PyObject *x, PyObject *y, CTXT_Object *context);
278 static PyObject * GMPy_Context_Yn(PyObject *self, PyObject *args);
279 
280 static PyObject * GMPy_Real_AGM(PyObject *x, PyObject *y, CTXT_Object *context);
281 static PyObject * GMPy_Number_AGM(PyObject *x, PyObject *y, CTXT_Object *context);
282 static PyObject * GMPy_Context_AGM(PyObject *self, PyObject *args);
283 
284 static PyObject * GMPy_Real_Maxnum(PyObject *x, PyObject *y, CTXT_Object *context);
285 static PyObject * GMPy_Number_Maxnum(PyObject *x, PyObject *y, CTXT_Object *context);
286 static PyObject * GMPy_Context_Maxnum(PyObject *self, PyObject *args);
287 
288 static PyObject * GMPy_Real_Minnum(PyObject *x, PyObject *y, CTXT_Object *context);
289 static PyObject * GMPy_Number_Minnum(PyObject *x, PyObject *y, CTXT_Object *context);
290 static PyObject * GMPy_Context_Minnum(PyObject *self, PyObject *args);
291 
292 static PyObject * GMPy_Real_Remainder(PyObject *x, PyObject *y, CTXT_Object *context);
293 static PyObject * GMPy_Number_Remainder(PyObject *x, PyObject *y, CTXT_Object *context);
294 static PyObject * GMPy_Context_Remainder(PyObject *self, PyObject *args);
295 
296 static PyObject * GMPy_Real_Fmod(PyObject *x, PyObject *y, CTXT_Object *context);
297 static PyObject * GMPy_Number_Fmod(PyObject *x, PyObject *y, CTXT_Object *context);
298 static PyObject * GMPy_Context_Fmod(PyObject *self, PyObject *args);
299 
300 static PyObject * GMPy_Real_RelDiff(PyObject *x, PyObject *y, CTXT_Object *context);
301 static PyObject * GMPy_Number_RelDiff(PyObject *x, PyObject *y, CTXT_Object *context);
302 static PyObject * GMPy_Context_RelDiff(PyObject *self, PyObject *args);
303 
304 static PyObject * GMPy_Real_Ceil(PyObject *x, CTXT_Object *context);
305 static PyObject * GMPy_Number_Ceil(PyObject *x, CTXT_Object *context);
306 static PyObject * GMPy_MPFR_Method_Ceil(PyObject *self, PyObject *args);
307 static PyObject * GMPy_Context_Ceil(PyObject *self, PyObject *args);
308 
309 static PyObject * GMPy_Real_Floor(PyObject *x, CTXT_Object *context);
310 static PyObject * GMPy_Number_Floor(PyObject *x, CTXT_Object *context);
311 static PyObject * GMPy_MPFR_Method_Floor(PyObject *self, PyObject *args);
312 static PyObject * GMPy_Context_Floor(PyObject *self, PyObject *args);
313 
314 static PyObject * GMPy_Real_Trunc(PyObject *x, CTXT_Object *context);
315 static PyObject * GMPy_Number_Trunc(PyObject *x, CTXT_Object *context);
316 static PyObject * GMPy_MPFR_Method_Trunc(PyObject *self, PyObject *args);
317 static PyObject * GMPy_Context_Trunc(PyObject *self, PyObject *args);
318 
319 static PyObject * GMPy_Real_Round2(PyObject *x, PyObject *y, CTXT_Object *context);
320 static PyObject * GMPy_Number_Round2(PyObject *x, PyObject *y, CTXT_Object *context);
321 static PyObject * GMPy_Context_Round2(PyObject *self, PyObject *args);
322 
323 static PyObject * GMPy_Real_RoundAway(PyObject *x, CTXT_Object *context);
324 static PyObject * GMPy_Number_RoundAway(PyObject *x, CTXT_Object *context);
325 static PyObject * GMPy_Context_RoundAway(PyObject *self, PyObject *other);
326 
327 static PyObject * GMPy_Real_Modf(PyObject *x, CTXT_Object *context);
328 static PyObject * GMPy_Number_Modf(PyObject *x, CTXT_Object *context);
329 static PyObject * GMPy_Context_Modf(PyObject *self, PyObject *other);
330 
331 static PyObject * GMPy_Real_Lgamma(PyObject *x, CTXT_Object *context);
332 static PyObject * GMPy_Number_Lgamma(PyObject *x, CTXT_Object *context);
333 static PyObject * GMPy_Context_Lgamma(PyObject *self, PyObject *other);
334 
335 static PyObject * GMPy_Real_RemQuo(PyObject *x, PyObject *y, CTXT_Object *context);
336 static PyObject * GMPy_Number_RemQuo(PyObject *x, PyObject *y, CTXT_Object *context);
337 static PyObject * GMPy_Context_RemQuo(PyObject *self, PyObject *other);
338 
339 static PyObject * GMPy_Real_Frexp(PyObject *x, CTXT_Object *context);
340 static PyObject * GMPy_Number_Frexp(PyObject *x, CTXT_Object *context);
341 static PyObject * GMPy_Context_Frexp(PyObject *self, PyObject *other);
342 
343 static PyObject * GMPy_Context_NextToward(PyObject *self, PyObject *args);
344 
345 static PyObject * GMPy_Context_NextAbove(PyObject *self, PyObject *other);
346 
347 static PyObject * GMPy_Context_NextBelow(PyObject *self, PyObject *other);
348 
349 static PyObject * GMPy_Context_Factorial(PyObject *self, PyObject *other);
350 
351 static PyObject * GMPy_Context_Fsum(PyObject *self, PyObject *other);
352 
353 #ifdef __cplusplus
354 }
355 #endif
356 #endif
357