Skip to content

Commit 435792a

Browse files
authored
Merge pull request #228 from Smit-create/cmath1
Implement cmath python module
2 parents e66f473 + 742ee38 commit 435792a

File tree

3 files changed

+317
-0
lines changed

3 files changed

+317
-0
lines changed

integration_tests/run_tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"test_math_02.py",
3333
"test_c_interop_01.py",
3434
"test_generics_01.py",
35+
"test_cmath.py"
3536
]
3637

3738
# CPython tests only

integration_tests/test_cmath.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
from cmath import (exp, log, sqrt, acos, asin, atan, cos, sin, tan,
2+
acosh, asinh, atanh, cosh, sinh, tanh)
3+
from ltypes import c64
4+
5+
def test_power_logarithmic():
6+
x: c64
7+
y: c64
8+
x = complex(3, 3)
9+
y = exp(x)
10+
y = log(x)
11+
y = sqrt(x)
12+
a: c32
13+
b: c32
14+
a = complex(3, 3)
15+
b = exp(a)
16+
b = log(a)
17+
b = sqrt(a)
18+
19+
20+
def test_trigonometric():
21+
x: c64
22+
y: c64
23+
x = complex(3, 3)
24+
y = acos(x)
25+
y = asin(x)
26+
y = atan(x)
27+
y = cos(x)
28+
y = sin(x)
29+
y = tan(x)
30+
a: c32
31+
b: c32
32+
a = complex(3, 3)
33+
b = acos(a)
34+
b = asin(a)
35+
b = atan(a)
36+
b = cos(a)
37+
b = sin(a)
38+
b = tan(a)
39+
40+
41+
def test_hyperbolic():
42+
x: c64
43+
y: c64
44+
x = complex(3, 3)
45+
y = acosh(x)
46+
y = asinh(x)
47+
y = atanh(x)
48+
y = cosh(x)
49+
y = sinh(x)
50+
y = tanh(x)
51+
a: c32
52+
b: c32
53+
a = complex(3, 3)
54+
b = acosh(a)
55+
b = asinh(a)
56+
b = atanh(a)
57+
b = cosh(a)
58+
b = sinh(a)
59+
b = tanh(a)
60+
61+
62+
test_power_logarithmic()
63+
test_trigonometric()
64+
test_hyperbolic()

src/runtime/cmath.py

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
from ltypes import c64, ccall, f64, overload, c32
2+
3+
pi: f64 = 3.141592653589793238462643383279502884197
4+
e: f64 = 2.718281828459045235360287471352662497757
5+
tau: f64 = 6.283185307179586
6+
7+
8+
@ccall
9+
def _lfortran_zexp(x: c64) -> c64:
10+
pass
11+
12+
@ccall
13+
def _lfortran_cexp(x: c32) -> c32:
14+
pass
15+
16+
@overload
17+
def exp(x: c64) -> c64:
18+
return _lfortran_zexp(x)
19+
20+
@overload
21+
def exp(x: c32) -> c32:
22+
return _lfortran_cexp(x)
23+
24+
25+
@ccall
26+
def _lfortran_zlog(x: c64) -> c64:
27+
pass
28+
29+
@ccall
30+
def _lfortran_clog(x: c32) -> c32:
31+
pass
32+
33+
@overload
34+
def log(x: c64) -> c64:
35+
return _lfortran_zlog(x)
36+
37+
@overload
38+
def log(x: c32) -> c32:
39+
return _lfortran_clog(x)
40+
41+
42+
@ccall
43+
def _lfortran_zsqrt(x: c64) -> c64:
44+
pass
45+
46+
@ccall
47+
def _lfortran_csqrt(x: c32) -> c32:
48+
pass
49+
50+
@overload
51+
def sqrt(x: c64) -> c64:
52+
return _lfortran_zsqrt(x)
53+
54+
@overload
55+
def sqrt(x: c32) -> c32:
56+
return _lfortran_csqrt(x)
57+
58+
59+
@ccall
60+
def _lfortran_zacos(x: c64) -> c64:
61+
pass
62+
63+
@ccall
64+
def _lfortran_cacos(x: c32) -> c32:
65+
pass
66+
67+
@overload
68+
def acos(x: c64) -> c64:
69+
return _lfortran_zacos(x)
70+
71+
@overload
72+
def acos(x: c32) -> c32:
73+
return _lfortran_cacos(x)
74+
75+
@ccall
76+
def _lfortran_zasin(x: c64) -> c64:
77+
pass
78+
79+
@ccall
80+
def _lfortran_casin(x: c32) -> c32:
81+
pass
82+
83+
@overload
84+
def asin(x: c64) -> c64:
85+
return _lfortran_zasin(x)
86+
87+
@overload
88+
def asin(x: c32) -> c32:
89+
return _lfortran_casin(x)
90+
91+
@ccall
92+
def _lfortran_zatan(x: c64) -> c64:
93+
pass
94+
95+
@ccall
96+
def _lfortran_catan(x: c32) -> c32:
97+
pass
98+
99+
@overload
100+
def atan(x: c64) -> c64:
101+
return _lfortran_zatan(x)
102+
103+
@overload
104+
def atan(x: c32) -> c32:
105+
return _lfortran_catan(x)
106+
107+
@ccall
108+
def _lfortran_zcos(x: c64) -> c64:
109+
pass
110+
111+
@ccall
112+
def _lfortran_ccos(x: c32) -> c32:
113+
pass
114+
115+
@overload
116+
def cos(x: c64) -> c64:
117+
return _lfortran_zcos(x)
118+
119+
@overload
120+
def cos(x: c32) -> c32:
121+
return _lfortran_ccos(x)
122+
123+
@ccall
124+
def _lfortran_zsin(x: c64) -> c64:
125+
pass
126+
127+
@ccall
128+
def _lfortran_csin(x: c32) -> c32:
129+
pass
130+
131+
@overload
132+
def sin(x: c64) -> c64:
133+
return _lfortran_zsin(x)
134+
135+
@overload
136+
def sin(x: c32) -> c32:
137+
return _lfortran_csin(x)
138+
139+
@ccall
140+
def _lfortran_ztan(x: c64) -> c64:
141+
pass
142+
143+
@ccall
144+
def _lfortran_ctan(x: c32) -> c32:
145+
pass
146+
147+
@overload
148+
def tan(x: c64) -> c64:
149+
return _lfortran_ztan(x)
150+
151+
@overload
152+
def tan(x: c32) -> c32:
153+
return _lfortran_ctan(x)
154+
155+
156+
@ccall
157+
def _lfortran_zacosh(x: c64) -> c64:
158+
pass
159+
160+
@ccall
161+
def _lfortran_cacosh(x: c32) -> c32:
162+
pass
163+
164+
@overload
165+
def acosh(x: c64) -> c64:
166+
return _lfortran_zacosh(x)
167+
168+
@overload
169+
def acosh(x: c32) -> c32:
170+
return _lfortran_cacosh(x)
171+
172+
@ccall
173+
def _lfortran_zasinh(x: c64) -> c64:
174+
pass
175+
176+
@ccall
177+
def _lfortran_casinh(x: c32) -> c32:
178+
pass
179+
180+
@overload
181+
def asinh(x: c64) -> c64:
182+
return _lfortran_zasinh(x)
183+
184+
@overload
185+
def asinh(x: c32) -> c32:
186+
return _lfortran_casinh(x)
187+
188+
@ccall
189+
def _lfortran_zatanh(x: c64) -> c64:
190+
pass
191+
192+
@ccall
193+
def _lfortran_catanh(x: c32) -> c32:
194+
pass
195+
196+
@overload
197+
def atanh(x: c64) -> c64:
198+
return _lfortran_zatanh(x)
199+
200+
@overload
201+
def atanh(x: c32) -> c32:
202+
return _lfortran_catanh(x)
203+
204+
205+
@ccall
206+
def _lfortran_zcosh(x: c64) -> c64:
207+
pass
208+
209+
@ccall
210+
def _lfortran_ccosh(x: c32) -> c32:
211+
pass
212+
213+
@overload
214+
def cosh(x: c64) -> c64:
215+
return _lfortran_zcosh(x)
216+
217+
@overload
218+
def cosh(x: c32) -> c32:
219+
return _lfortran_ccosh(x)
220+
221+
@ccall
222+
def _lfortran_zsinh(x: c64) -> c64:
223+
pass
224+
225+
@ccall
226+
def _lfortran_csinh(x: c32) -> c32:
227+
pass
228+
229+
@overload
230+
def sinh(x: c64) -> c64:
231+
return _lfortran_zsinh(x)
232+
233+
@overload
234+
def sinh(x: c32) -> c32:
235+
return _lfortran_csinh(x)
236+
237+
238+
@ccall
239+
def _lfortran_ztanh(x: c64) -> c64:
240+
pass
241+
242+
@ccall
243+
def _lfortran_ctanh(x: c32) -> c32:
244+
pass
245+
246+
@overload
247+
def tanh(x: c64) -> c64:
248+
return _lfortran_ztanh(x)
249+
250+
@overload
251+
def tanh(x: c32) -> c32:
252+
return _lfortran_ctanh(x)

0 commit comments

Comments
 (0)