diff options
author | Pearu Peterson <pearu.peterson@gmail.com> | 2011-02-27 20:23:30 +0200 |
---|---|---|
committer | Pearu Peterson <pearu.peterson@gmail.com> | 2011-02-27 20:23:30 +0200 |
commit | 3dfe0e10aa27cc057b1c5acfb77df8cfb2669a6c (patch) | |
tree | ef652fc79a195eb532ac2f3671ee4bfdc54784d9 /numpy/f2py | |
parent | aea92de6e7322d5cc1674bf13e74498f310733e9 (diff) | |
download | numpy-3dfe0e10aa27cc057b1c5acfb77df8cfb2669a6c.tar.gz |
Implemented selected_real_kind evaluation, added tests to catch processor dependencies..
Diffstat (limited to 'numpy/f2py')
-rwxr-xr-x | numpy/f2py/crackfortran.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/numpy/f2py/crackfortran.py b/numpy/f2py/crackfortran.py index 43bcfa259..3463b69f1 100755 --- a/numpy/f2py/crackfortran.py +++ b/numpy/f2py/crackfortran.py @@ -1956,15 +1956,23 @@ def _selected_int_kind_func(r): if m<=2**8: return 1 if m<=2**16: return 2 if m<=2**32: return 4 - if m<=2**64: return 8 + if m<=2**63: return 8 if m<=2**128: return 16 return -1 +def _selected_real_kind_func(p,r=0,radix=0): + #XXX: This should be processor dependent + if p<7: return 4 + if p<16: return 8 + if p<19: return 10 + return -1 + def get_parameters(vars, global_params={}): params = copy.copy(global_params) g_params = copy.copy(global_params) for name,func in [('kind',_kind_func), ('selected_int_kind',_selected_int_kind_func), + ('selected_real_kind',_selected_real_kind_func), ]: if name not in g_params: g_params[name] = func @@ -1974,6 +1982,7 @@ def get_parameters(vars, global_params={}): param_names.append(n) kind_re = re.compile(r'\bkind\s*\(\s*(?P<value>.*)\s*\)',re.I) selected_int_kind_re = re.compile(r'\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)',re.I) + selected_kind_re = re.compile(r'\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)',re.I) for n in param_names: if '=' in vars[n]: v = vars[n]['='] @@ -1987,7 +1996,7 @@ def get_parameters(vars, global_params={}): v = v.replace(*repl) v = kind_re.sub(r'kind("\1")',v) v = selected_int_kind_re.sub(r'selected_int_kind(\1)',v) - if isinteger(vars[n]) and not selected_int_kind_re.match(v): + if isinteger(vars[n]) and not selected_kind_re.match(v): v = v.split('_')[0] if isdouble(vars[n]): tt = list(v) |