summaryrefslogtreecommitdiff
path: root/numpy/f2py/auxfuncs.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/f2py/auxfuncs.py')
-rw-r--r--numpy/f2py/auxfuncs.py71
1 files changed, 50 insertions, 21 deletions
diff --git a/numpy/f2py/auxfuncs.py b/numpy/f2py/auxfuncs.py
index c8f2067c9..98c9eff78 100644
--- a/numpy/f2py/auxfuncs.py
+++ b/numpy/f2py/auxfuncs.py
@@ -28,10 +28,12 @@ __all__ = [
'getfortranname', 'getpymethoddef', 'getrestdoc', 'getusercode',
'getusercode1', 'hasbody', 'hascallstatement', 'hascommon',
'hasexternals', 'hasinitvalue', 'hasnote', 'hasresultnote',
- 'isallocatable', 'isarray', 'isarrayofstrings', 'iscomplex',
+ 'isallocatable', 'isarray', 'isarrayofstrings',
+ 'ischaracter', 'ischaracterarray', 'ischaracter_or_characterarray',
+ 'iscomplex',
'iscomplexarray', 'iscomplexfunction', 'iscomplexfunction_warn',
'isdouble', 'isdummyroutine', 'isexternal', 'isfunction',
- 'isfunction_wrap', 'isint1array', 'isinteger', 'isintent_aux',
+ 'isfunction_wrap', 'isint1', 'isint1array', 'isinteger', 'isintent_aux',
'isintent_c', 'isintent_callback', 'isintent_copy', 'isintent_dict',
'isintent_hide', 'isintent_in', 'isintent_inout', 'isintent_inplace',
'isintent_nothide', 'isintent_out', 'isintent_overwrite', 'islogical',
@@ -39,7 +41,8 @@ __all__ = [
'islong_doublefunction', 'islong_long', 'islong_longfunction',
'ismodule', 'ismoduleroutine', 'isoptional', 'isprivate', 'isrequired',
'isroutine', 'isscalar', 'issigned_long_longarray', 'isstring',
- 'isstringarray', 'isstringfunction', 'issubroutine',
+ 'isstringarray', 'isstring_or_stringarray', 'isstringfunction',
+ 'issubroutine',
'issubroutine_wrap', 'isthreadsafe', 'isunsigned', 'isunsigned_char',
'isunsigned_chararray', 'isunsigned_long_long',
'isunsigned_long_longarray', 'isunsigned_short',
@@ -68,24 +71,41 @@ def debugcapi(var):
return 'capi' in debugoptions
+def _ischaracter(var):
+ return 'typespec' in var and var['typespec'] == 'character' and \
+ not isexternal(var)
+
+
def _isstring(var):
return 'typespec' in var and var['typespec'] == 'character' and \
not isexternal(var)
-def isstring(var):
- return _isstring(var) and not isarray(var)
+def ischaracter_or_characterarray(var):
+ return _ischaracter(var) and 'charselector' not in var
def ischaracter(var):
- return isstring(var) and 'charselector' not in var
+ return ischaracter_or_characterarray(var) and not isarray(var)
+
+
+def ischaracterarray(var):
+ return ischaracter_or_characterarray(var) and isarray(var)
+
+
+def isstring_or_stringarray(var):
+ return _ischaracter(var) and 'charselector' in var
+
+
+def isstring(var):
+ return isstring_or_stringarray(var) and not isarray(var)
def isstringarray(var):
- return isarray(var) and _isstring(var)
+ return isstring_or_stringarray(var) and isarray(var)
-def isarrayofstrings(var):
+def isarrayofstrings(var): # obsolete?
# leaving out '*' for now so that `character*(*) a(m)` and `character
# a(m,*)` are treated differently. Luckily `character**` is illegal.
return isstringarray(var) and var['dimension'][-1] == '(*)'
@@ -126,6 +146,11 @@ def get_kind(var):
pass
+def isint1(var):
+ return var.get('typespec') == 'integer' \
+ and get_kind(var) == '1' and not isarray(var)
+
+
def islong_long(var):
if not isscalar(var):
return 0
@@ -426,6 +451,7 @@ def isintent_hide(var):
('out' in var['intent'] and 'in' not in var['intent'] and
(not l_or(isintent_inout, isintent_inplace)(var)))))
+
def isintent_nothide(var):
return not isintent_hide(var)
@@ -469,6 +495,7 @@ def isintent_aligned8(var):
def isintent_aligned16(var):
return 'aligned16' in var.get('intent', [])
+
isintent_dict = {isintent_in: 'INTENT_IN', isintent_inout: 'INTENT_INOUT',
isintent_out: 'INTENT_OUT', isintent_hide: 'INTENT_HIDE',
isintent_cache: 'INTENT_CACHE',
@@ -566,19 +593,19 @@ class throw_error:
def l_and(*f):
- l, l2 = 'lambda v', []
+ l1, l2 = 'lambda v', []
for i in range(len(f)):
- l = '%s,f%d=f[%d]' % (l, i, i)
+ l1 = '%s,f%d=f[%d]' % (l1, i, i)
l2.append('f%d(v)' % (i))
- return eval('%s:%s' % (l, ' and '.join(l2)))
+ return eval('%s:%s' % (l1, ' and '.join(l2)))
def l_or(*f):
- l, l2 = 'lambda v', []
+ l1, l2 = 'lambda v', []
for i in range(len(f)):
- l = '%s,f%d=f[%d]' % (l, i, i)
+ l1 = '%s,f%d=f[%d]' % (l1, i, i)
l2.append('f%d(v)' % (i))
- return eval('%s:%s' % (l, ' or '.join(l2)))
+ return eval('%s:%s' % (l1, ' or '.join(l2)))
def l_not(f):
@@ -666,7 +693,9 @@ def getcallprotoargument(rout, cb_map={}):
pass
else:
ctype = ctype + '*'
- if isstring(var) or isarrayofstrings(var):
+ if ((isstring(var)
+ or isarrayofstrings(var) # obsolete?
+ or isstringarray(var))):
arg_types2.append('size_t')
arg_types.append(ctype)
@@ -731,14 +760,14 @@ def getrestdoc(rout):
def gentitle(name):
- l = (80 - len(name) - 6) // 2
- return '/*%s %s %s*/' % (l * '*', name, l * '*')
+ ln = (80 - len(name) - 6) // 2
+ return '/*%s %s %s*/' % (ln * '*', name, ln * '*')
-def flatlist(l):
- if isinstance(l, list):
- return reduce(lambda x, y, f=flatlist: x + f(y), l, [])
- return [l]
+def flatlist(lst):
+ if isinstance(lst, list):
+ return reduce(lambda x, y, f=flatlist: x + f(y), lst, [])
+ return [lst]
def stripcomma(s):