MCPcopy Create free account
hub / github.com/numpy/numpy / createsubrwrapper

Function createsubrwrapper

numpy/f2py/func2subr.py:202–287  ·  view source on GitHub ↗
(rout, signature=0)

Source from the content-addressed store, hash-verified

200
201
202def createsubrwrapper(rout, signature=0):
203 assert issubroutine(rout)
204
205 extra_args = []
206 vars = rout['vars']
207 for a in rout['args']:
208 v = rout['vars'][a]
209 for i, d in enumerate(v.get('dimension', [])):
210 if d == ':':
211 dn = 'f2py_%s_d%s' % (a, i)
212 dv = dict(typespec='integer', intent=['hide'])
213 dv['='] = 'shape(%s, %s)' % (a, i)
214 extra_args.append(dn)
215 vars[dn] = dv
216 v['dimension'][i] = dn
217 rout['args'].extend(extra_args)
218 need_interface = bool(extra_args)
219
220 ret = ['']
221
222 def add(line, ret=ret):
223 ret[0] = '%s\n %s' % (ret[0], line)
224 name = rout['name']
225 fortranname = getfortranname(rout)
226 f90mode = ismoduleroutine(rout)
227
228 args = rout['args']
229
230 useisoc = useiso_c_binding(rout)
231 sargs = ', '.join(args)
232 if f90mode:
233 add('subroutine f2pywrap_%s_%s (%s)' %
234 (rout['modulename'], name, sargs))
235 if useisoc:
236 add('use iso_c_binding')
237 if not signature:
238 add('use %s, only : %s' % (rout['modulename'], fortranname))
239 else:
240 add('subroutine f2pywrap%s (%s)' % (name, sargs))
241 if useisoc:
242 add('use iso_c_binding')
243 if not need_interface:
244 add('external %s' % (fortranname))
245
246 if need_interface:
247 for line in rout['saved_interface'].split('\n'):
248 if line.lstrip().startswith('use ') and '__user__' not in line:
249 add(line)
250
251 dumped_args = []
252 for a in args:
253 if isexternal(vars[a]):
254 add('external %s' % (a))
255 dumped_args.append(a)
256 for a in args:
257 if a in dumped_args:
258 continue
259 if isscalar(vars[a]):

Callers 1

assubrFunction · 0.85

Calls 13

issubroutineFunction · 0.85
getfortrannameFunction · 0.85
ismoduleroutineFunction · 0.85
useiso_c_bindingFunction · 0.85
isexternalFunction · 0.85
var2fixfortranFunction · 0.85
startswithMethod · 0.80
lstripMethod · 0.80
addFunction · 0.70
isscalarFunction · 0.70
getMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected