MCPcopy
hub / github.com/numpy/numpy / createsubrwrapper

Function createsubrwrapper

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

Source from the content-addressed store, hash-verified

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

Callers 1

assubrFunction · 0.85

Calls 13

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

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…