-
Notifications
You must be signed in to change notification settings - Fork 1
/
TestFortran.py
48 lines (35 loc) · 1.16 KB
/
TestFortran.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python3
import sys
import numpy as np
import libprimes
from fprimes import fprimes
# Don't be lazy compile f2py using check=all option for fortran
# It can save you hours and maybe days of looking for weird errors
# f2py3.6 -c Primes.f90 -m fprimes <-- STUPID
# f2py3.6 --f90flags=-fcheck=all -c Primes.f90 -m fprimes <-- SMART
def primes(n):
sieve_array = fprimes.sieve(n)
return fprimes.logical_to_integer(sieve_array, sum(sieve_array), n)
def primes2(n):
# pi = int(libprimes.Ri4(n))
# pi = int(1.2 * n / np.log(n))
pi = int(0.123 * n)
# primes = np.zeros(pi, dtype=np.int32, order='F')
primes = fprimes.all_in_one(n, pi)
return primes
def primes3(n):
sieve_array = fprimes.sieve(n)
return 1 + np.nonzero(sieve_array)[0]
if __name__ == '__main__':
if len(sys.argv) <= 1:
print(dir(fprimes))
print(fprimes.__doc__)
print(fprimes.sieve.__doc__)
print(fprimes.logical_to_integer.__doc__)
print(fprimes.all_in_one.__doc__)
print("Please set loop numbers")
sys.exit()
N = int(sys.argv[1])
print(primes(N))
print(primes2(N))
print(primes3(N))