From 3dfe0e10aa27cc057b1c5acfb77df8cfb2669a6c Mon Sep 17 00:00:00 2001 From: Pearu Peterson Date: Sun, 27 Feb 2011 20:23:30 +0200 Subject: Implemented selected_real_kind evaluation, added tests to catch processor dependencies.. --- numpy/f2py/crackfortran.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'numpy/f2py') 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.*)\s*\)',re.I) selected_int_kind_re = re.compile(r'\bselected_int_kind\s*\(\s*(?P.*)\s*\)',re.I) + selected_kind_re = re.compile(r'\bselected_(int|real)_kind\s*\(\s*(?P.*)\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) -- cgit v1.2.1