done
This commit is contained in:
		
							
								
								
									
										99
									
								
								lib/python3.11/site-packages/numpy/f2py/use_rules.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								lib/python3.11/site-packages/numpy/f2py/use_rules.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
"""
 | 
			
		||||
Build 'use others module data' mechanism for f2py2e.
 | 
			
		||||
 | 
			
		||||
Copyright 1999 -- 2011 Pearu Peterson all rights reserved.
 | 
			
		||||
Copyright 2011 -- present NumPy Developers.
 | 
			
		||||
Permission to use, modify, and distribute this software is given under the
 | 
			
		||||
terms of the NumPy License.
 | 
			
		||||
 | 
			
		||||
NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
 | 
			
		||||
"""
 | 
			
		||||
__version__ = "$Revision: 1.3 $"[10:-1]
 | 
			
		||||
 | 
			
		||||
f2py_version = 'See `f2py -v`'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from .auxfuncs import applyrules, dictappend, gentitle, hasnote, outmess
 | 
			
		||||
 | 
			
		||||
usemodule_rules = {
 | 
			
		||||
    'body': """
 | 
			
		||||
#begintitle#
 | 
			
		||||
static char doc_#apiname#[] = \"\\\nVariable wrapper signature:\\n\\
 | 
			
		||||
\t #name# = get_#name#()\\n\\
 | 
			
		||||
Arguments:\\n\\
 | 
			
		||||
#docstr#\";
 | 
			
		||||
extern F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#);
 | 
			
		||||
static PyObject *#apiname#(PyObject *capi_self, PyObject *capi_args) {
 | 
			
		||||
/*#decl#*/
 | 
			
		||||
\tif (!PyArg_ParseTuple(capi_args, \"\")) goto capi_fail;
 | 
			
		||||
printf(\"c: %d\\n\",F_MODFUNC(#usemodulename#,#USEMODULENAME#,#realname#,#REALNAME#));
 | 
			
		||||
\treturn Py_BuildValue(\"\");
 | 
			
		||||
capi_fail:
 | 
			
		||||
\treturn NULL;
 | 
			
		||||
}
 | 
			
		||||
""",
 | 
			
		||||
    'method': '\t{\"get_#name#\",#apiname#,METH_VARARGS|METH_KEYWORDS,doc_#apiname#},',
 | 
			
		||||
    'need': ['F_MODFUNC']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def buildusevars(m, r):
 | 
			
		||||
    ret = {}
 | 
			
		||||
    outmess(
 | 
			
		||||
        f"\t\tBuilding use variable hooks for module \"{m['name']}\" (feature only for F90/F95)...\n")
 | 
			
		||||
    varsmap = {}
 | 
			
		||||
    revmap = {}
 | 
			
		||||
    if 'map' in r:
 | 
			
		||||
        for k in r['map'].keys():
 | 
			
		||||
            if r['map'][k] in revmap:
 | 
			
		||||
                outmess('\t\t\tVariable "%s<=%s" is already mapped by "%s". Skipping.\n' % (
 | 
			
		||||
                    r['map'][k], k, revmap[r['map'][k]]))
 | 
			
		||||
            else:
 | 
			
		||||
                revmap[r['map'][k]] = k
 | 
			
		||||
    if r.get('only'):
 | 
			
		||||
        for v in r['map'].keys():
 | 
			
		||||
            if r['map'][v] in m['vars']:
 | 
			
		||||
 | 
			
		||||
                if revmap[r['map'][v]] == v:
 | 
			
		||||
                    varsmap[v] = r['map'][v]
 | 
			
		||||
                else:
 | 
			
		||||
                    outmess(f"\t\t\tIgnoring map \"{v}=>{r['map'][v]}\". See above.\n")
 | 
			
		||||
            else:
 | 
			
		||||
                outmess(
 | 
			
		||||
                    f"\t\t\tNo definition for variable \"{v}=>{r['map'][v]}\". Skipping.\n")
 | 
			
		||||
    else:
 | 
			
		||||
        for v in m['vars'].keys():
 | 
			
		||||
            varsmap[v] = revmap.get(v, v)
 | 
			
		||||
    for v in varsmap.keys():
 | 
			
		||||
        ret = dictappend(ret, buildusevar(v, varsmap[v], m['vars'], m['name']))
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def buildusevar(name, realname, vars, usemodulename):
 | 
			
		||||
    outmess('\t\t\tConstructing wrapper function for variable "%s=>%s"...\n' % (
 | 
			
		||||
        name, realname))
 | 
			
		||||
    ret = {}
 | 
			
		||||
    vrd = {'name': name,
 | 
			
		||||
           'realname': realname,
 | 
			
		||||
           'REALNAME': realname.upper(),
 | 
			
		||||
           'usemodulename': usemodulename,
 | 
			
		||||
           'USEMODULENAME': usemodulename.upper(),
 | 
			
		||||
           'texname': name.replace('_', '\\_'),
 | 
			
		||||
           'begintitle': gentitle(f'{name}=>{realname}'),
 | 
			
		||||
           'endtitle': gentitle(f'end of {name}=>{realname}'),
 | 
			
		||||
           'apiname': f'#modulename#_use_{realname}_from_{usemodulename}'
 | 
			
		||||
           }
 | 
			
		||||
    nummap = {0: 'Ro', 1: 'Ri', 2: 'Rii', 3: 'Riii', 4: 'Riv',
 | 
			
		||||
              5: 'Rv', 6: 'Rvi', 7: 'Rvii', 8: 'Rviii', 9: 'Rix'}
 | 
			
		||||
    vrd['texnamename'] = name
 | 
			
		||||
    for i in nummap.keys():
 | 
			
		||||
        vrd['texnamename'] = vrd['texnamename'].replace(repr(i), nummap[i])
 | 
			
		||||
    if hasnote(vars[realname]):
 | 
			
		||||
        vrd['note'] = vars[realname]['note']
 | 
			
		||||
    rd = dictappend({}, vrd)
 | 
			
		||||
 | 
			
		||||
    print(name, realname, vars[realname])
 | 
			
		||||
    ret = applyrules(usemodule_rules, rd)
 | 
			
		||||
    return ret
 | 
			
		||||
		Reference in New Issue
	
	Block a user