From 136f362805616a249dddc7ba38e893e707af88a4 Mon Sep 17 00:00:00 2001 From: jguterl Date: Fri, 3 Dec 2021 19:46:09 -0800 Subject: [PATCH 1/2] add setpyobject --- dist/Forthon-0.9.4-py3.8.egg | Bin 0 -> 159979 bytes run.grid | 102 +++ source/#wrappergenerator.py# | 1350 ++++++++++++++++++++++++++++++++++ source/.#wrappergenerator.py | 1 + source/Forthon.h | 18 + 5 files changed, 1471 insertions(+) create mode 100644 dist/Forthon-0.9.4-py3.8.egg create mode 100644 run.grid create mode 100644 source/#wrappergenerator.py# create mode 120000 source/.#wrappergenerator.py diff --git a/dist/Forthon-0.9.4-py3.8.egg b/dist/Forthon-0.9.4-py3.8.egg new file mode 100644 index 0000000000000000000000000000000000000000..02456e5f14cc02cc12b1cc551588344b281d37d1 GIT binary patch literal 159979 zcmZ_z1B@_C)GP>(ZF}Y!+qP}nwr$(CZQHhO+vdJ^?~iYHvq_(%)9K2|sZ@7Pb<0Zu zgP;Ha06+lb=L9K{SAqPB0096{g8~2`{V~i0h#3+V|KZ)eMFYN#63a zs`gsF=v2(g15Hm3ch&CDJyiIU@Pf;(}NRxUtam}?ZYiP08WM*4TBlvm)L0v0DT_E#%qL{7GjpZ%iYQJ{m zfYqr}h_TbXdNokoMv6vJ%GGJrq#9N++-9?&=J7zq1m(Fzv<+@_jutRXu+sS+ODnd0XQ8hN4Y>fM|z03H|Ptu(cNX~e?2;E)ogZ$1YfX>9~jEg;k-4CdS z(_hwcgou+0=&)&Zl(M3>*d_g3Y7%|0ZPDS+EsBxv=8_g!$~bUq<$3FDr@p8V-K?jr z5SOYD@#{plq5px|30>i4Wddm-p0n+l$>Zjjk}0+Cj0m4dbOwmJa0DtULLlVa(>{Q{ zps@UzDGA}}$-lyY4W%xlOg?=BUG5M2p`U%c;23@yNgd$xXpauWZ#+KP4~aB$9S^fY zI~(FKI7DsVcZ`1!uo317dk%67V-{P7kJp~c5)Jd@oGfo>lT5c4Zx^Wy0Kl{AN6yl# zN7}S*$$PLDcqsuZpS$RLRv^PGLJl>d5xo4=CLXw&sH)y~@(8vvyM7-Y5736Z1Izzk zG*=G{8oBqM)^PvR-TzYJ|4(yDaw>{KB1*K*?#@2(GqOYU2*GzAX{F$~00Mysd?Ga2 zHT%+wsIfhoc7ji@AeDhjqBuW3$aCx_2s_|@DK=48TV;fIm(+q@vmVovMN9(NNfQKa>X_Y4ei#s@@;zD}24QkX)y%jqB+q1}R+lY}J&Mvn2#g_xBaA8%Z_ z@7AQy>VYECM?=ooGppW`BQO>RGtbgk@>k>GQIO�>28Tn$bbBdkEt*p?C;uNx{lCEcpJ*o| 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 literal 0 HcmV?d00001 diff --git a/run.grid b/run.grid new file mode 100644 index 0000000..a3335f5 --- /dev/null +++ b/run.grid @@ -0,0 +1,102 @@ + j x +0000 0.000E+00 +0001 1.000E-09 +0002 2.153E-09 +0003 3.483E-09 +0004 5.016E-09 +0005 6.783E-09 +0006 8.821E-09 +0007 1.117E-08 +0008 1.388E-08 +0009 1.701E-08 +0010 2.061E-08 +0011 2.476E-08 +0012 2.955E-08 +0013 3.508E-08 +0014 4.144E-08 +0015 4.879E-08 +0016 5.725E-08 +0017 6.702E-08 +0018 7.827E-08 +0019 9.125E-08 +0020 1.062E-07 +0021 1.235E-07 +0022 1.434E-07 +0023 1.663E-07 +0024 1.928E-07 +0025 2.233E-07 +0026 2.585E-07 +0027 2.990E-07 +0028 3.458E-07 +0029 3.997E-07 +0030 4.619E-07 +0031 5.336E-07 +0032 6.162E-07 +0033 7.115E-07 +0034 8.214E-07 +0035 9.481E-07 +0036 1.094E-06 +0037 1.263E-06 +0038 1.457E-06 +0039 1.681E-06 +0040 1.939E-06 +0041 2.237E-06 +0042 2.580E-06 +0043 2.976E-06 +0044 3.433E-06 +0045 3.959E-06 +0046 4.566E-06 +0047 5.266E-06 +0048 6.073E-06 +0049 7.004E-06 +0050 8.077E-06 +0051 9.314E-06 +0052 1.074E-05 +0053 1.239E-05 +0054 1.428E-05 +0055 1.647E-05 +0056 1.899E-05 +0057 2.190E-05 +0058 2.525E-05 +0059 2.912E-05 +0060 3.357E-05 +0061 3.871E-05 +0062 4.464E-05 +0063 5.147E-05 +0064 5.935E-05 +0065 6.843E-05 +0066 7.891E-05 +0067 9.099E-05 +0068 1.049E-04 +0069 1.210E-04 +0070 1.395E-04 +0071 1.608E-04 +0072 1.855E-04 +0073 2.138E-04 +0074 2.466E-04 +0075 2.843E-04 +0076 3.278E-04 +0077 3.780E-04 +0078 4.358E-04 +0079 5.025E-04 +0080 5.795E-04 +0081 6.682E-04 +0082 7.704E-04 +0083 8.883E-04 +0084 1.024E-03 +0085 1.181E-03 +0086 1.362E-03 +0087 1.570E-03 +0088 1.811E-03 +0089 2.088E-03 +0090 2.407E-03 +0091 2.776E-03 +0092 3.200E-03 +0093 3.690E-03 +0094 4.255E-03 +0095 4.906E-03 +0096 5.657E-03 +0097 6.523E-03 +0098 7.521E-03 +0099 8.673E-03 +0100 1.000E-02 diff --git a/source/#wrappergenerator.py# b/source/#wrappergenerator.py# new file mode 100644 index 0000000..6c93897 --- /dev/null +++ b/source/#wrappergenerator.py# @@ -0,0 +1,1350 @@ +#!/usr/bin/env python +# Python wrapper generation +# Created by David P. Grote, March 6, 1998 +# Modified by T. B. Yang, May 21, 1998 + +import sys +import os.path +import hashlib +from .interfaceparser import processfile +import string +import re +from . import fvars +import pickle +from .Forthon_options import args +from .cfinterface import * +from . import wrappergen_derivedtypes +from .wrappergenerator_ompextension import PyWrap_OMPExtension + + + + +class PyWrap(PyWrap_OMPExtension): + """ + Usage: + -a All groups will be allocated on initialization + -t ARCH Build for specified architecture (default is HP700) + -d <.scalars file> a .scalars file in another module that this module depends on + -F The fortran compiler being used. This is needed since some + operations depend on the compiler specific oddities. + --nowritemodules The modules will not be written out, assuming + that they are already written. + --macros pkg.v Other interface files that are needed for the definition + of macros. + --timeroutines Calls to the routines from python will be timed + file1 Main variable description file for the package + [file2, ...] Subsidiary variable description files + """ + + def __init__(self, varfile, pkgname, pkgsuffix, pkgbase, initialgallot=1, writemodules=1, + otherinterfacefiles=[], other_scalar_vars=[], timeroutines=0, + otherfortranfiles=[], fcompname=None, ompactive=False, ompdebug=False): + self.varfile = varfile + self.pkgname = pkgname + self.pkgsuffix = pkgsuffix + self.pkgbase = pkgbase + self.initialgallot = initialgallot + self.writemodules = writemodules + self.timeroutines = timeroutines + self.otherinterfacefiles = otherinterfacefiles + self.other_scalar_vars = other_scalar_vars + self.otherfortranfiles = otherfortranfiles + self.fcompname = fcompname + self.isz = isz # isz defined in cfinterface + self.processvariabledescriptionfile() + self.OMPInit(ompactive, ompdebug) + + def cname(self, n): + # --- Standard name of the C interface to a Fortran routine + # --- pkg_varname + return self.pkgname + '_' + n + + transtable = (10 * string.ascii_lowercase)[:256] + + def fsub(self, prefix, suffix=''): + """ + The fortran standard limits routine names to 31 characters. If the + routine name is longer than that, this routine takes the first 15 + characters and and creates a hashed string based on the full name to get + the next 16. This does not guarantee uniqueness, but the nonuniqueness + should be minute. + """ + name = self.pkgname + prefix + suffix + if len(name) < 32: + return name + transtable = PyWrap.transtable + hashbytes = hashlib.md5(name.encode()).digest() + hash = ''.join([transtable[d] for d in hashbytes]) + return name[:15] + hash + + def dimisparameter(self, dim): + # --- Convert fortran variable name into reference from list of variables + # --- and check if it is a parameter. + sl = re.split('[ ()/\*\+\-]', dim) + for ss in sl: + if re.search('[a-zA-Z]', ss) is not None: + try: + v = self.slist[self.sdict[ss]] + if v.parameter: + return True + except KeyError: + pass + return False + + def prefixdimsc(self, dim): + # --- Convert fortran variable name into reference from list of variables. + sl = re.split('[ ()/\*\+\-]', dim) + for ss in sl: + if re.search('[a-zA-Z]', ss) is not None: + if ss in self.sdict: + dim = re.sub(ss, + '*(long *)' + self.pkgname + '_fscalars[' + repr(self.sdict[ss]) + '].data', + dim, count=1) + else: + for other_vars in self.other_scalar_vars: + other_dict = other_vars[0] + if ss in other_dict: + dim = re.sub(ss, '*(long *)' + other_dict['_module_name_'] + + '_fscalars[' + repr(other_dict[ss]) + '].data', dim, count=1) + break + else: + raise SyntaxError(ss + ' is not declared in the interface file') + return dim.lower() + + # --- Convert dimensions for unspecified arrays + def prefixdimsf(self, dim): + # --- Check for any unspecified dimensions and replace it with an element + # --- from the dims array. + sl = re.split(',', dim[1:-1]) + for i in range(len(sl)): + if sl[i] == ':': + sl[i] = 'dims__(%d)' % (i + 1) + dim = '(' + ','.join(sl) + ')' + return dim.lower() + + def dimsgroups(self, dim): + # --- Returns a list of group names that contain the variables listed in + # --- a dimension statement + groups = [] + sl = re.split('[ (),:/\*\+\-]', dim) + for ss in sl: + if re.search('[a-zA-Z]', ss) is not None: + if ss in self.sdict: + groups.append(self.slist[self.sdict[ss]].group) + else: + for other_vars in self.other_scalar_vars: + other_dict = other_vars[0] + other_list = other_vars[1] + if ss in other_dict: + groups.append(other_list[other_dict[ss]].group) + break + else: + raise SyntaxError(ss + ' is not declared in the interface file') + return groups + + def getmodulename(self): + if self.pkgbase is not None: + return self.pkgbase + else: + return self.pkgname + self.pkgsuffix + 'py' + + def cw(self, text, noreturn=0): + if noreturn: + self.cfile.write(text) + else: + self.cfile.write(text + '\n') + + def fw(self, text, noreturn=0): + i = 0 + while len(text[i:]) > 132 and text[i:].find('&') == -1: + # --- If the line is too long, then break it up, adding line + # --- continuation marks in between any variable names. + # --- This is the same as \W, but also skips %, since PG compilers + # --- don't seem to like a line continuation mark just before a %. + ss = re.search('[^a-zA-Z0-9_%]', text[i + 130::-1]) + assert ss is not None, "Forthon can't find a place to break up this line:\n" + text + text = text[:i + 130-ss.start()] + '&\n' + text[i+130-ss.start():] + i += 130 - ss.start() + 1 + if noreturn: + self.ffile.write(text) + else: + self.ffile.write(text + '\n') + + def setffile(self): + """ + Set the ffile attribute, which is the fortran file object. + It the attribute hasn't been created, then open the file with write status. + If it has, and the file is closed, then open it with append status. + """ + if 'ffile' in self.__dict__: + status = 'a' + else: + status = 'w' + if status == 'w' or (status == 'a' and self.ffile.closed): + self.ffile = open(self.pkgname + '_p.F90', status) + + def processvariabledescriptionfile(self): + """ + Read in and parse the variable description file and create the lists + of scalars and arrays. + """ + + # --- Get the list of variables and subroutine from the var file + vlist, hidden_vlist, typelist = processfile(self.pkgname, self.varfile, + self.otherinterfacefiles, + self.timeroutines) + + # --- Get a list of all of the group names which have variables in it + # --- (only used when writing fortran files but done here while complete + # --- list of variables is still in one place, vlist). + currentgroup = '' + groups = [] + for v in vlist: + if not v.function and v.group != currentgroup: + groups.append(v.group) + currentgroup = v.group + + # --- Get a list of all of the hidden group names. + current_hidden_group = '' + hidden_groups = [] + for hv in hidden_vlist: + if not hv.function and hv.group != current_hidden_group: + hidden_groups.append(hv.group) + current_hidden_group = hv.group + + # --- Select out all of the scalars and build a dictionary + # --- The dictionary is used to get number of the variables use as + # --- dimensions for arrays. + slist = [] + sdict = {} + i = 0 + temp = vlist[:] + for v in temp: + if not v.dims and not v.function: + slist.append(v) + sdict[v.name] = i + i = i + 1 + vlist.remove(v) + + # --- Select out all of the arrays + alist = [] + i = 0 + temp = vlist[:] + for v in temp: + if not v.function: + alist.append(v) + i = i + 1 + vlist.remove(v) + temp = [] + + # --- The remaining elements should all be functions + flist = vlist + + self.typelist = typelist + self.slist = slist + self.sdict = sdict + self.alist = alist + self.flist = flist + self.groups = groups + self.hidden_groups = hidden_groups + + ########################################################################### + def createmodulefile(self): + # --- This is the routine that does all of the work + + # --- Create the module file + self.cfile = open(self.pkgname + 'pymodule.c', 'w') + self.cw('#include "Forthon.h"') + self.cw('#include ') + self.cw('ForthonObject *' + self.pkgname + 'Object;') + + # --- See the kaboom command in Forthon.c for information on these two + # --- variables. + self.cw('extern jmp_buf stackenvironment;') + self.cw('extern int lstackenvironmentset;') + + # --- Print out the external commands + self.cw('extern void ' + fname(self.fsub('passpointers')) + '(void);') + self.cw('extern void ' + fname(self.fsub('nullifypointers')) + '(void);') + + # --- fortran routine prototypes + for f in self.flist: + # --- Functions + self.cw('extern ' + fvars.ftoc(f.type) + ' ' + fname(f.name) + '(', noreturn=1) + i = 0 + istr = 0 + if len(f.args) == 0: + self.cw('void', noreturn=1) + for a in f.args: + if i > 0: + self.cw(', ', noreturn=1) + i = i + 1 + self.cw(fvars.ftoc(a.type) + ' ', noreturn=1) + if a.type == 'string' or a.type == 'character': + istr = istr + 1 + else: + self.cw('*', noreturn=1) + self.cw(a.name, noreturn=1) + if charlen_at_end: + for i in range(istr): + self.cw(', int sl' + repr(i), noreturn=1) + self.cw(');') + for t in self.typelist: + self.cw('extern PyObject *' + self.cname(t.name) + 'New(PyObject *self, PyObject *args);') + self.cw('') + + # --- setpointer and getpointer routines + # --- Note that setpointer gets written out for all derived types - + # --- for non-dynamic derived types, the setpointer routine does a copy. + # --- The double underscores in the argument names are to avoid name + # --- collisions with package variables. + for s in self.slist: + if (s.dynamic or s.derivedtype) and not s.parameter: + self.cw('extern void ' + fname(self.fsub('setscalarpointer', s.name)) + + '(char *p__, char *fobj__, npy_intp *nullit__);') + if s.dynamic: + self.cw('extern void ' + fname(self.fsub('getscalarpointer', s.name)) + + '(ForthonObject **cobj__, char *fobj__, int *createnew__);') + for a in self.alist: + self.cw('extern void ' + fname(self.fsub('setarraypointer', a.name)) + + '(char *p__, char *fobj__, npy_intp *dims__);') + if re.search('fassign', a.attr): + self.cw('extern void ' + fname(self.fsub('getarraypointer', a.name)) + + '(Fortranarray *farray__, char *fobj__);') + self.cw('') + + # --- setaction and getaction routines + for s in self.slist: + if s.setaction is not None: + self.cw('extern void ' + fname(self.fsub('setaction', s.name)) + + '(' + fvars.ftoc_dict[s.type] + ' *v);') + if s.getaction is not None: + self.cw('extern void ' + fname(self.fsub('getaction', s.name)) + '(void);') + for a in self.alist: + if a.setaction is not None: + self.cw('extern void ' + fname(self.fsub('setaction', a.name)) + + '(' + fvars.ftoc_dict[a.type] + ' *v);') + if a.getaction is not None: + self.cw('extern void ' + fname(self.fsub('getaction', a.name)) + '(void);') + + ########################################################################### + # --- Write declarations of c pointers to fortran variables + + # --- Declare scalars from other modules + for other_vars in self.other_scalar_vars: + other_dict = other_vars[0] + self.cw('extern Fortranscalar ' + other_dict['_module_name_'] + + '_fscalars[];') + + # --- Note that the pointers to the subroutines set and getpointer and + # --- set and get action are at first set to NULL. The data is then setup + # --- in a seperate call to the declarevars. This is done since it is not + # --- standard C to have function pointers in structure initializers. + + # --- Scalars + self.cw('int ' + self.pkgname + 'nscalars = ' + repr(len(self.slist)) + ';') + if len(self.slist) > 0: + self.cw('Fortranscalar ' + self.pkgname + '_fscalars[' + repr(len(self.slist)) + ']={') + for i in range(len(self.slist)): + s = self.slist[i] + self.cw('{NPY_%s,' % fvars.ftop(s.type) + + '"%s",' % s.type + + '"%s",' % s.name + + 'NULL,' + + '"%s",' % s.group + + '"%s",' % s.attr + + '"%s",' % repr(s.comment)[1:-1].replace('"', '\\"') + + '"%s",' % repr(s.unit)[1:-1] + + '%i,' % s.dynamic + + '%i,' % s.parameter + + 'NULL,' + # setscalarpointer + 'NULL,' + # getscalarpointer + 'NULL,' + # setaction + 'NULL' + # getaction + '}', noreturn=1) + if i < len(self.slist) - 1: + self.cw(',') + self.cw('};') + else: + self.cw('Fortranscalar *' + self.pkgname + '_fscalars=NULL;') + + # --- Arrays + self.cw('int ' + self.pkgname + 'narrays = ' + repr(len(self.alist)) + ';') + if len(self.alist) > 0: + self.cw('static Fortranarray ' + + self.pkgname + '_farrays[' + repr(len(self.alist)) + ']={') + for i in range(len(self.alist)): + a = self.alist[i] + if a.data and a.dynamic: + initvalue = a.data[1:-1] + else: + initvalue = '0' + self.cw('{NPY_%s,' % fvars.ftop(a.type) + + '%d,' % a.dynamic + + '%d,'% len(a.dims) + + 'NULL,' + + '"%s",' % a.name + + '{NULL},' + + 'NULL,' + # setarraypointer + 'NULL,' + # getarraypointer + 'NULL,' + # setaction + 'NULL,' + # getaction + '%s,' % initvalue + + 'NULL,' + + '"%s",' % a.group + + '"%s",' % a.attr + + '"%s",' % repr(a.comment)[1:-1].replace('"', '\\"') + + '"%s",' % repr(a.unit)[1:-1] + + '"%s"}' % repr(a.dimstring)[1:-1], noreturn=1) + if i < len(self.alist) - 1: + self.cw(',') + self.cw('};') + else: + self.cw('static Fortranarray *' + self.pkgname + '_farrays=NULL;') + + ######################################################################### + # --- Write declarations of c pointers to fortran variables + self.cw('void ' + self.pkgname + 'declarevars(ForthonObject *obj) {') + + # --- Scalars + for i in range(len(self.slist)): + s = self.slist[i] + if (s.dynamic or s.derivedtype) and not s.parameter: + setscalarpointer = '*' + fname(self.fsub('setscalarpointer', s.name)) + self.cw('obj->fscalars[%d].setscalarpointer = %s;' % (i, setscalarpointer)) + if s.dynamic: + getscalarpointer = '*' + fname(self.fsub('getscalarpointer', s.name)) + self.cw('obj->fscalars[%d].getscalarpointer = %s;' % (i, getscalarpointer)) + if s.setaction is not None: + setaction = '*' + fname(self.fsub('setaction', s.name)) + self.cw('obj->fscalars[%d].setaction = %s;' % (i, setaction)) + if s.getaction is not None: + getaction = '*' + fname(self.fsub('getaction', s.name)) + self.cw('obj->fscalars[%d].getaction = %s;' % (i, getaction)) + + # --- Arrays + for i in range(len(self.alist)): + a = self.alist[i] + if a.dynamic: + setarraypointer = '*' + fname(self.fsub('setarraypointer', a.name)) + self.cw('obj->farrays[%d].setarraypointer = %s;' % (i, setarraypointer)) + if re.search('fassign', a.attr): + getarraypointer = '*' + fname(self.fsub('getarraypointer', a.name)) + self.cw('obj->farrays[%d].getarraypointer = %s;' % (i, getarraypointer)) + if a.setaction is not None: + setaction = '*' + fname(self.fsub('setaction', a.name)) + self.cw('obj->farrays[%d].setaction = %s;' % (i, setaction)) + if a.getaction is not None: + getaction = '*' + fname(self.fsub('getaction', a.name)) + self.cw('obj->farrays[%d].getaction = %s;' % (i, getaction)) + + self.cw('}') + +# Some extra work is needed to get the getset attribute access scheme working. +# # --- Write out the table of getset routines +# self.cw('') +# self.cw('static PyGetSetDef ' + self.pkgname + '_getseters[] = {') +# for i in range(len(self.slist)): +# s = self.slist[i] +# if s.type == 'real': gstype = 'double' +# elif s.type == 'double': gstype = 'double' +# elif s.type == 'float': gstype = 'float' +# elif s.type == 'integer': gstype = 'integer' +# elif s.type == 'complex': gstype = 'cdouble' +# else: gstype = 'derivedtype' +# self.cw('{"' + s.name + '", (getter)Forthon_getscalar' + gstype + +# ', (setter)Forthon_setscalar' + gstype + +# ', "%s"'%repr(s.comment)[1:-1].replace('"', '\\"') + +# ', "%s"'%repr(s.unit)[1:-1] + +# ', (void *)' + repr(i) + '}, ') +# for i in range(len(self.alist)): +# a = self.alist[i] +# self.cw('{"' + a.name + '", (getter)Forthon_getarray' + +# ', (setter)Forthon_setarray' + +# ', "%s"'%repr(a.comment)[1:-1].replace('"', '\\"') + +# ', "%s"'%repr(a.unit)[1:-1] + +# ', (void *)' + repr(i) + '}, ') +# self.cw('{"scalardict", (getter)Forthon_getscalardict, ' + +# '(setter)Forthon_setscalardict, ' + +# '"internal scalar dictionary", NULL}, ') +# self.cw('{"arraydict", (getter)Forthon_getarraydict, ' + +# '(setter)Forthon_setarraydict, ' + +# '"internal array dictionary", NULL}, ') +# self.cw('{NULL}};') + + ########################################################################### + if self.timeroutines: + # --- This is written out here instead of just being in Forthon.h + # --- so that when it is not used, the compiler doesn't complain + # --- about cputime being unused. + self.cw('#include ') + self.cw('#include ') + self.cw('static double cputime(void)') + self.cw('{') + self.cw(' struct tms usage;') + self.cw(' long hardware_ticks_per_second;') + self.cw(' (void) times(&usage);') + self.cw(' hardware_ticks_per_second = sysconf(_SC_CLK_TCK);') + self.cw(' return (double) usage.tms_utime/hardware_ticks_per_second;') + self.cw('}') + + ########################################################################### + ########################################################################### + # --- Now, the fun part, writing out the wrapper for the subroutine and + # --- function calls. + for f in self.flist: + # --- Write out the documentation first. + docstring = ('static char doc_' + self.cname(f.name) + '[] = "' + f.name + + f.dimstring + '\n' + f.comment + '";') + # --- Replaces newlines with '\\n' so that the string is all on one line + # --- in the C coding using repr, easily. + # --- The [1:-1] strips off the single quotes that repr puts there. + self.cw(repr(docstring)[1:-1]) + # --- Now write out the wrapper + self.cw('static PyObject *') + self.cw(self.cname(f.name) + '(PyObject *self, PyObject *args)') + self.cw('{') + + # --- With arguments, it gets very messy + lv = repr(len(f.args)) + if len(f.args) > 0: + self.cw(' PyObject * pyobj[' + lv + '];') + self.cw(' PyArrayObject * ax[' + lv + '];') + self.cw(' int i;') + self.cw(' char e[256];') + + if self.timeroutines: + # --- Setup for the timer, getting time routine started. + self.cw(' double time1, time2;') + self.cw(' time1 = cputime();') + + # --- For character arguments, need to create an FSTRING array. + istr = 0 + for a in f.args: + if a.type == 'string' or a.type == 'character': + istr = istr + 1 + if istr > 0: + self.cw(' FSTRING fstr[' + repr(istr) + '];') + + # --- If this is a function, set up variables to hold return value + if f.type != 'void': + self.cw(' PyObject * ret_val;') + self.cw(' ' + fvars.ftoc(f.type) + ' r;') + + # --- Set all of the ax's to NULL + if len(f.args) > 0: + self.cw(' for (i=0;i<' + repr(len(f.args)) + ';i++) ax[i] = NULL;') + + # --- Parse incoming arguments into a list of PyObjects + self.cw(' if (!PyArg_ParseTuple(args, "' + 'O' * len(f.args) + '"', noreturn=1) + for i in range(len(f.args)): + self.cw(', &pyobj[' + repr(i) + ']', noreturn=1) + self.cw(')) return NULL;') + + # --- Loop over arguments, extracting the data addresses. + # --- Convert all arguments into arrays. This allows complete flexibility + # --- in what can be passed to fortran functions. + istr = 0 + for i in range(len(f.args)): + if not fvars.isderivedtype(f.args[i]): + self.cw(' if (!Forthon_checksubroutineargtype(pyobj[' + repr(i) + '], ' + + 'NPY_' + fvars.ftop(f.args[i].type) + ')) {') + self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + + ' has the wrong type");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + if f.function == 'fsub': + self.cw(' ax[' + repr(i) + '] = FARRAY_FROMOBJECT(' + + 'pyobj[' + repr(i) + '], NPY_' + fvars.ftop(f.args[i].type) + ');') + elif f.function == 'csub': + self.cw(' ax[' + repr(i) + ']=(PyArrayObject *)PyArray_ContiguousFromObject(' + + 'pyobj[' + repr(i) + '], NPY_' + fvars.ftop(f.args[i].type) + ', 0, 0);') + self.cw(' if (ax[' + repr(i) + '] == NULL) {') + self.cw(' sprintf(e, "There is an error in argument ' + f.args[i].name + + ' in ' + f.name + '");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + if f.args[i].type == 'string' or f.args[i].type == 'character': + self.cw(' FSETSTRING(fstr[%d], PyArray_BYTES(ax[%d]), PyArray_ITEMSIZE(ax[%d]));' % (istr, i, i)) + istr = istr + 1 + else: + self.cw(' {') + self.cw(' PyObject *t;') + self.cw(' t = PyObject_Type(pyobj[' + repr(i) + ']);') + self.cw(' if (strcmp(((PyTypeObject *)t)->tp_name, "Forthon") != 0) {') + self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + + ' has the wrong type");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + self.cw(' Py_DECREF(t);') + typename = '((ForthonObject *)pyobj[' + repr(i) + '])->typename' + self.cw(' if (strcmp(' + typename + ', "' + f.args[i].type + '") != 0) {') + self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + + ' has the wrong type");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + self.cw(' }') + + # --- Write the code checking dimensions of arrays + # --- This must be done after all of the ax's are setup in case the + # --- dimensioning arguments come after the array argument. + # --- This creates a local variable with the same name as the argument + # --- and gives it the value passed in. Then any expressions in the + # --- dimensions statements will be explicitly evaluated in C. + if len(f.dimvars) > 0: + + # --- Find the variables used as dimensions that are arrays + arraydimvarnames = [] + for var, i in f.dimvars: + for arg in f.args: + if var.name == arg.name and len(arg.dims) > 0: + assert len(arg.dims) == 1, 'Only one dimensional arrays can be used as array dimensions' + arraydimvarnames.append(var.name) + + def maparraydimsctof(dim): + # --- Map array dimensions from Fortran to C, e.g. convert (n) to [(n)-1]. + # --- Check for each array dimension variable. + # --- The inner loop is needed in case the name appears multiple times. + for d in arraydimvarnames: + i = 0 + while True: + m = re.search(r'\b' + d + r'\b', dim[i:]) + if m is None: + break + else: + # --- Find the matching parenthesis + # --- p1 and p1 will be the indices of the opening and closing parenthesis + p1 = m.end() + i + p2 = p1 + nn = 1 + while nn > 0: + p2 += 1 + if dim[p2] == '(': + nn += 1 + elif dim[p2] == ')': + nn -= 1 + # --- Do the replacement + dim = dim[:p1] + '[' + dim[p1:p2 + 1] + '-1]' + dim[p2 + 1:] + i = p2 + 1 + return dim + + self.cw(' {') + self.cw(' long _n;') + + # --- Declare the dimension variables. + for var, i in f.dimvars: + if var.name in arraydimvarnames: + # --- Declare the variable as a pointer to an array + self.cw(' ' + fvars.ftoc(var.type) + ' * ' + var.name + '=' + + '(' + fvars.ftoc(var.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']));') + else: + # --- Declare the variable as a scalar + self.cw(' ' + fvars.ftoc(var.type) + ' ' + var.name + '= *' + + '(' + fvars.ftoc(var.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']));') + + # --- Loop over the arguments, looking for dimensioned arrays + i = -1 + for arg in f.args: + i += 1 + if len(arg.dims) > 0: + # --- Check the number of dimensions of the input argument + # --- For a 1-D argument, allow a scaler to be passed, which has + # --- a number of dimensions (nd) == 0. + self.cw(' if (!(PyArray_NDIM(ax[%d]) == %d' % (i, len(arg.dims)), noreturn=1) + if len(arg.dims) == 1: + self.cw(' ||PyArray_NDIM(ax[%d]) == 0)) {'%i) + else: + self.cw(' )) {') + self.cw(' sprintf(e, "Argument %s in %s ' % (arg.name, f.name) + + 'has the wrong number of dimensions");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + + # --- Skip the check of dimension sizes if the total size of + # --- the array should be zero. This gets around an issue with + # --- numpy that zero length arrays seem to be always in + # --- C ordering. + self.cw(' if (1', noreturn=1) + for dim in arg.dims: + self.cw('*((' + maparraydimsctof(dim.high) + ') - (' + maparraydimsctof(dim.low) + ') + 1)', noreturn=1) + self.cw(' != 0) {') + + j = -1 + for dim in arg.dims: + j += 1 + # --- Compare each dimension with its specified value + # --- For a 1-D argument, allow a scalar to be passed, which has + # --- a number of dimensions (nd) == 0, but only if the + # --- argument needs to have a length of 0 or 1. + self.cw(' _n = (' + maparraydimsctof(dim.high) + ') - (' + maparraydimsctof(dim.low) + ') + 1;') + if len(arg.dims) == 1: + self.cw(' if (!((_n==0||_n==1)||(PyArray_NDIM(ax[%d]) > 0 &&'%i, + noreturn=1) + else: + self.cw(' if (!((', noreturn=1) + self.cw('_n == (long)(PyArray_DIMS(ax[%d])[%d])))) {'%(i, j)) + self.cw(' sprintf(e, "Dimension ' + repr(j + 1) + ' of argument ' + + arg.name + ' in ' + f.name + + ' has the wrong size");') + self.cw(' PyErr_SetString(ErrorObject, e);') + self.cw(' goto err;}') + self.cw(' }') + self.cw(' }') + + # --- If the stackenvironment has not already been set, then make a call + # --- to setjmp to save the state in case an error happens. + # --- If there was an error, setjmp returns 1, so exit out. + # --- If this routine is called from a python routine that was called + # --- from another fortran routine, then the stackenvironment will + # --- already have been setup (from the calling fortran routine) so don't + # --- reset it. + self.cw(' if (!(lstackenvironmentset++) && setjmp(stackenvironment)) goto err;') + + # --- Write the actual call to the fortran routine. + if f.type == 'void': + self.cw(' ') + else: + self.cw(' r = ') + self.cw(fname(f.name) + '(', noreturn = 1) + i = 0 + istr = 0 + for a in f.args: + if i > 0: + self.cw(', ', noreturn=1) + if fvars.isderivedtype(a): + self.cw('((ForthonObject *)(pyobj[' + repr(i) + ']))->fobj', noreturn=1) + elif a.type == 'string' or a.type == 'character': + self.cw('fstr[%d]'%(istr), noreturn = 1) + istr = istr + 1 + else: + self.cw('(' + fvars.ftoc(a.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']))', noreturn=1) + i = i + 1 + if charlen_at_end: + i = 0 + istr = 0 + for a in f.args: + if a.type == 'string' or a.type == 'character': + self.cw(', (int)PyArray_ITEMSIZE(ax[' + repr(i) + '])', noreturn=1) + istr = istr + 1 + i = i + 1 + + self.cw(');') # --- Closing parenthesis on the call list + + # --- Decrement the counter. This will reach zero when the top of the + # --- fortran call chain is reached and is about to return to the top + # --- level python. + self.cw(' lstackenvironmentset--;') + + # --- Copy the data that was sent to the routine back into the passed + # --- in object if it is an PyArray. + # --- Decrement reference counts of array objects created. + # --- This is now handled by a separate subroutine included in Forthon.h + if len(f.args) > 0: + self.cw(' Forthon_restoresubroutineargs(' + repr(len(f.args)) + ', pyobj, ax);') + + if self.timeroutines: + # --- Now get ending time and add to timer variable + self.cw(' time2 = cputime();') + self.cw(' *(double *)' + self.pkgname + '_fscalars[' + + repr(self.sdict[f.name + 'runtime']) + '].data += (time2 - time1);') + + # --- Write return sequence + if f.type == 'void': + self.cw(' returnnone;') + else: + self.cw(' ret_val = Py_BuildValue ("' + fvars.fto1[f.type] + '", r);') + self.cw(' return ret_val;') + + # --- Error section, in case there was an error above or in the + # --- fortran call + self.cw('err:') + + if len(f.args) > 0: + # --- Decrement reference counts of array objects created. + self.cw(' for (i=0;i<' + repr(len(f.args)) + ';i++)') + self.cw(' if (ax[i] != NULL) {Py_XDECREF(ax[i]);}') + + self.cw(' return NULL;') + + self.cw('}') + + # --- Add blank line + self.cw('') + + ########################################################################### + # --- Write out method list + self.cw('static struct PyMethodDef ' + self.pkgname + '_methods[] = {') + for f in self.flist: + if f.function: + self.cw('{"' + f.name + '", (PyCFunction)' + self.cname(f.name) + ', 1, ' + + 'doc_' + self.cname(f.name) + '}, ') + for t in self.typelist: + self.cw('{"' + t.name + '", (PyCFunction)' + self.cname(t.name) + 'New, 1, ' + + '"Creates a new instance of fortran derived type ' + t.name + '"}, ') + self.cw('{NULL, NULL}};') + self.cw('') + + ########################################################################### + # --- Write static array initialization routines + self.cw('void ' + self.pkgname + 'setstaticdims(ForthonObject *self)') + self.cw('{') + + i = -1 + for a in self.alist: + i = i + 1 + vname = self.pkgname + '_farrays[' + repr(i) + ']' + if a.dims and not a.dynamic: + j = 0 + for d in a.dims: + if d.high == '': + continue + self.cw(' ' + vname + '.dimensions[' + repr(j) + ']=(npy_intp)((int)', + noreturn=1) + j = j + 1 + if re.search('[a-zA-Z]', d.high) is None: + self.cw('(' + d.high + ') - ', noreturn=1) + else: + if not self.dimisparameter(d.high): + raise SyntaxError('%s: static dims must be constants or parameters' % a.name) + self.cw('(' + self.prefixdimsc(d.high) + ') - ', noreturn=1) + if re.search('[a-zA-Z]', d.low) is None: + self.cw('(' + d.low + ') + 1);') + else: + if not self.dimisparameter(d.low): + raise SyntaxError('%s: static dims must be constants or parameters' % a.name) + self.cw('(' + self.prefixdimsc(d.low) + ') + 1);') + + self.cw('}') + self.cw('') + + ########################################################################### + # --- Write routine which sets the dimensions of the dynamic arrays. + # --- This is done in a seperate routine so it only appears once. + # --- A routine is written out for each group which has dynamic arrays. Then + # --- a routine is written which calls all of the individual group routines. + # --- That is done to reduce the strain on the compiler by reducing the size + # --- of the routines. (In fact, in one case, with everything in one + # --- routine the cc compiler was giving a core dump!) + # --- Loop over the variables. This assumes that the variables are sorted + # --- by group. + i = -1 + currentgroup = '' + dyngroups = [] + for a in self.alist: + if a.group != currentgroup and a.dynamic: + if currentgroup != '': + self.cw(' }}') + currentgroup = a.group + if len(dyngroups) > 0: + dyngroups[-1][2] = i + dyngroups.append([currentgroup, i + 1, len(self.alist)]) + self.cw('static void ' + self.pkgname + 'setdims' + currentgroup + '(char *name, long i)') + self.cw('{') + self.cw(' if (strcmp(name, "' + a.group + '") || strcmp(name, "*")) {') + + i = i + 1 + vname = self.pkgname + '_farrays[' + repr(i) + ']' + if a.dynamic == 1 or a.dynamic == 2: + j = 0 + self.cw(' if (i == -1 || i == %d) {' % i) + # --- create lines of the form dims[1] = high - low + 1 + for d in a.dims: + if d.high == '': + continue + self.cw(' ' + vname + '.dimensions[' + repr(j) + ']=(npy_intp)((int)', + noreturn=1) + j = j + 1 + if re.search('[a-zA-Z]', d.high) is None: + self.cw('(' + d.high + ') - ', noreturn=1) + else: + self.cw('(' + self.prefixdimsc(d.high) + ') - ', noreturn=1) + if re.search('[a-zA-Z]', d.low) is None: + self.cw('(' + d.low + ') + 1);') + else: + self.cw('(' + self.prefixdimsc(d.low) + ') + 1);') + self.cw(' }') + + if currentgroup != '': + self.cw(' }}') + + # --- Now write out the setdims routine which calls of the routines + # --- for the individual groups. + self.cw('void ' + self.pkgname + 'setdims(char *name, ForthonObject *obj, long i)') + self.cw('{') + for groupinfo in dyngroups: + self.cw(' if (i == -1 || (%d <= i && i <= %d))' % tuple(groupinfo[1:]), noreturn=1) + self.cw(' ' + self.pkgname + 'setdims' + groupinfo[0] + '(name, i);') + self.cw('}') + + self.cw('') + + ########################################################################### + # --- Write set pointers routine which gets all of the fortran pointers + # --- A version needs to be written out for each basic type since Fortran + # --- checks the consistency of the arguments for each call. + # --- The versions are otherwise identical. + for tt in ['real', 'float', 'double', 'integer', 'character', 'logical', 'complex']: + self.cw('void ' + fname(self.fsub('grabscalarpointers_' + tt)) + '(long *i, char *p)') + self.cw('{') + self.cw(' /* Gabs pointer for the scalar */') + self.cw(' ' + self.pkgname + '_fscalars[*i].data = (char *)p;') + self.cw('}') + + # --- A serarate routine is needed for derived types since the cobj__ + # --- that is passed in is already a pointer, so **p is needed. + self.cw('void ' + fname(self.fsub('setderivedtypepointers')) + '(long *i, char **p)') + self.cw('{') + self.cw(' /* Gabs pointer for the scalar */') + self.cw(' ' + self.pkgname + '_fscalars[*i].data = (char *)(*p);') + self.cw('}') + + # --- Get pointer to an array. This takes an integer to specify which array + # --- A version needs to be written out for each basic type since Fortran + # --- checks the consistency of the arguments for each call. + # --- The versions are otherwise identical. + for tt in ['real', 'float', 'double', 'integer', 'character', 'logical', 'complex']: + self.cw('void ' + fname(self.fsub('grabarraypointers_' + tt)) + '(long *i, char *p)') + self.cw('{') + self.cw(' /* Grabs pointer for the array */') + self.cw(' ' + self.pkgname + '_farrays[*i].data.s = (char *)p;') + self.cw('}') + + # --- This takes a Fortranarray object directly. + self.cw('void ' + fname(self.fsub('grabarraypointersobj')) + '(Fortranarray *farray, char *p)') + self.cw('{') + self.cw(' /* Grabs pointer for the array */') + self.cw(' farray->data.s = (char *)p;') + self.cw('}') + + # --- This routine gets the dimensions from an array. It is called from + # --- fortran and the last argument should be shape(array). + # --- This is only used for routines with the fassign attribute. + # --- Note that the dimensions are stored in C order. + self.cw('void ' + fname(self.fsub('setarraydims')) + '(Fortranarray *farray, long *dims)') + self.cw('{') + self.cw(' int id;') + self.cw(' for (id=0;idnd;id++)') + self.cw(' farray->dimensions[id] = (npy_intp)(dims[id]);') + self.cw('}') + + # --- This routine initializes the pkg object. This is separated from the init package + # --- routine so that it can be called independently. + self.cw('void init' + self.pkgname + 'object' + '(PyObject *module)') + self.cw('{') + # self.cw(' PyModule_AddObject(m, "' + self.pkgname + 'Type", ' + '(PyObject *)&ForthonType);') + self.cw(' ' + self.pkgname + 'Object=(ForthonObject *)' + 'PyObject_GC_New(ForthonObject, &ForthonType);') + # 'ForthonObject_New(NULL, NULL);') + self.cw(' ' + self.pkgname + 'Object->name = "' + self.pkgname + '";') + self.cw(' ' + self.pkgname + 'Object->typename = "' + self.pkgname + '";') + self.cw(' ' + self.pkgname + 'Object->nscalars = ' + self.pkgname + 'nscalars;') + self.cw(' ' + self.pkgname + 'Object->fscalars = ' + self.pkgname + '_fscalars;') + self.cw(' ' + self.pkgname + 'Object->narrays = ' + self.pkgname + 'narrays;') + self.cw(' ' + self.pkgname + 'Object->farrays = ' + self.pkgname + '_farrays;') + self.cw(' ' + self.pkgname + 'Object->setdims = *' + self.pkgname + 'setdims;') + self.cw(' ' + self.pkgname + 'Object->setstaticdims = *' + self.pkgname + 'setstaticdims;') + self.cw(' ' + self.pkgname + 'Object->fmethods = ' + self.pkgname + '_methods;') + self.cw(' ' + self.pkgname + 'Object->__module__ = Py_BuildValue("s", "%s");'%self.getmodulename()) + self.cw(' ' + self.pkgname + 'Object->fobj = NULL;') + self.cw(' ' + self.pkgname + 'Object->fobjdeallocate = NULL;') + self.cw(' ' + self.pkgname + 'Object->nullifycobj = NULL;') + self.cw(' ' + self.pkgname + 'Object->allocated = 0;') + self.cw(' ' + self.pkgname + 'Object->garbagecollected = 0;') + self.cw(' PyModule_AddObject(module, "' + self.pkgname + '", (PyObject *)' + self.pkgname + 'Object);') + self.cw(' ' + self.pkgname + 'declarevars(' + self.pkgname + 'Object);') + self.cw(' Forthon_BuildDicts(' + self.pkgname + 'Object);') + self.cw(' ForthonPackage_allotdims(' + self.pkgname + 'Object);') + self.cw(' ' + fname(self.fsub('passpointers')) + '();') + self.cw(' ' + fname(self.fsub('nullifypointers')) + '();') + self.cw(' ForthonPackage_staticarrays(' + self.pkgname + 'Object);') + + if self.initialgallot: + self.cw(' {') + self.cw(' PyObject *s;') + self.cw(' s = Py_BuildValue("(s)", "*");') + self.cw(' ForthonPackage_gallot((PyObject *)' + self.pkgname + 'Object, s);') + self.cw(' Py_XDECREF(s);') + self.cw(' }') + + self.cw(' {') + self.cw(' PyObject *m, *d, *f, *r;') + self.cw(' r = NULL;') + self.cw(' m = PyImport_ImportModule("Forthon");') + self.cw(' if (m != NULL) {') + self.cw(' d = PyModule_GetDict(m);') + self.cw(' if (d != NULL) {') + self.cw(' f = PyDict_GetItemString(d, "registerpackage");') + self.cw(' if (f != NULL) {') + self.cw(' r = PyObject_CallFunction(f, "Os", (PyObject *)' + self.pkgname + 'Object, "' + self.pkgname + '");') + self.cw(' }}}') + self.cw(' if (NULL == r) {') + self.cw(' if (PyErr_Occurred()) PyErr_Print();') + self.cw(' Py_FatalError("unable to find a compatible Forthon module in which to register module ' + self.pkgname + '");') + self.cw(' }') + self.cw(' Py_XDECREF(m);') + self.cw(' Py_XDECREF(r);') + self.cw(' }') + self.cw('}') + + ########################################################################### + # --- And finally, the initialization function + self.cw('static struct PyModuleDef moduledef = {') + self.cw(' PyModuleDef_HEAD_INIT,') + self.cw(' "{0}py", /* m_name */'.format(self.pkgname + self.pkgsuffix)) + self.cw(' "{0}", /* m_doc */'.format(self.pkgname)) + self.cw(' -1, /* m_size */') + self.cw(' {0}_methods, /* m_methods */'.format(self.pkgname)) + self.cw(' NULL, /* m_reload */') + self.cw(' NULL, /* m_traverse */') + self.cw(' NULL, /* m_clear */') + self.cw(' NULL, /* m_free */') + self.cw(' };') + + self.cw('PyMODINIT_FUNC') + + self.cw('PyInit_' + self.pkgname + self.pkgsuffix + 'py(void)') + self.cw('{') + + self.cw(' PyObject *m;') + if self.fcompname == 'nag': + self.cw(' int argc; char **argv;') + self.cw(' Py_GetArgcArgv(&argc, &argv);') + self.cw(' f90_init(argc, argv);') + # self.cw(' ForthonType.tp_getset = ' + self.pkgname + '_getseters;') + # self.cw(' ForthonType.tp_methods = ' + self.pkgname + '_methods;') + self.cw(' if (PyType_Ready(&ForthonType) < 0)') + self.cw(' return NULL;') + + self.cw(' m = PyModule_Create(&moduledef);') + + self.cw(' import_array();') + self.cw(' init' + self.pkgname + 'object' + '(m);') + self.cw(' ErrorObject = PyErr_NewException("' + self.pkgname + self.pkgsuffix + 'py.error", NULL, NULL);') + self.cw(' PyModule_AddObject(m, "' + self.pkgname + 'error", ErrorObject);') + self.cw(' PyModule_AddObject(m, "fcompname", ' + 'PyUnicode_FromString("' + self.fcompname + '"));') + self.cw(' PyModule_AddObject(m, "realsize", ' + 'PyLong_FromLong((long)%s' % realsize + '));') + self.cw(' if (PyErr_Occurred()) {') + self.cw(' PyErr_Print();') + self.cw(' Py_FatalError("can not initialize module ' + self.pkgname + '");') + self.cw(' }') + + if machine == 'win32': + self.cw(' /* Initialize FORTRAN on CYGWIN */') + self.cw(' initPGfortran();') + + self.cw(' return m;') + + self.cw('}') + self.cw('') + + ########################################################################### + # --- Close the c package module file + self.cfile.close() + + ########################################################################### + ########################################################################### + ########################################################################### + # --- Write out fortran initialization routines + self.setffile() + self.ffile.close() + + ########################################################################### + ########################################################################### + # --- Process any derived types + wrappergen_derivedtypes.ForthonDerivedType(self.typelist, self.pkgname, self.pkgsuffix, self.pkgbase, + self.pkgname + 'pymodule.c', + self.pkgname + '_p.F90', self.isz, + self.writemodules, self.fcompname) + ########################################################################### + ########################################################################### + + self.setffile() + + ########################################################################### + # --- Write out f90 modules, including any data statements + if self.writemodules: + self.writef90modules() + ########################################################################### + self.fw('subroutine ' + self.fsub('passpointers') + '()') + + # --- Write out the Use statements + for g in self.groups + self.hidden_groups: + self.fw(' use ' + g) + + # --- Write out calls to c routine passing down pointers to scalars + for i in range(len(self.slist)): + s = self.slist[i] + if s.dynamic: + continue + if s.derivedtype: + # --- This is only called for static instances, so deallocatable is + # --- set to false (the last argument). + self.fw(' call init' + s.type + 'py(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + ', ' + + s.name + '%cobj__, int(1, ' + self.isz + '), int(0, ' + self.isz + '))') + self.fw(' call ' + self.fsub('setderivedtypepointers') + '(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + '%cobj__)') + else: + self.fw(' call ' + self.fsub('grabscalarpointers_' + s.type) + '(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + ')') + + # --- Write out calls to c routine passing down pointers to arrays. + for i in range(len(self.alist)): + a = self.alist[i] + if not a.dynamic: + self.fw(' call ' + self.fsub('grabarraypointers_' + a.type) + '(int(' + repr(i) + ', ' + self.isz + '), ' + a.name + ')') + + # --- Finish the routine + self.fw(' return') + self.fw('end') + + ########################################################################### + # --- Nullifies the pointers of all dynamic variables. This is needed + # --- since in some compilers, the associated routine returns + # --- erroneous information if the status of a pointer is undefined. + # --- Pointers must be explicitly nullified in order to get + # --- associated to return a false value. + self.fw('subroutine ' + self.fsub('nullifypointers') + '()') + # --- Write out the Use statements + for g in self.groups + self.hidden_groups: + self.fw(' use ' + g) + if self.ompactive: + self.fw('integer::tid,omp_get_thread_num') + for i in range(len(self.slist)): + s = self.slist[i] + if s.dynamic: + if self.ompactive: + self.ThreadedNullify(s) + else: + self.fw(' nullify(' + s.name + ')') + for i in range(len(self.alist)): + a = self.alist[i] + if a.dynamic: + if self.ompactive: + self.ThreadedNullify(a) + else: + self.fw(' nullify(' + a.name + ')') + + self.fw(' return') + self.fw('end') + ########################################################################### + # --- Write routine for each dynamic variable which gets the pointer from the + # --- wrapper + for s in self.slist: + if (s.dynamic or s.derivedtype) and not s.parameter: + self.fw('subroutine ' + self.fsub('setscalarpointer', s.name) + '(p__, fobj__, nullit__)') + self.fw(' use ' + s.group) + self.fw(' integer(' + self.isz + '):: fobj__') + self.fw(' integer(' + self.isz + '):: nullit__') + if s.type == 'character': + self.fw(' character(len=' + s.dims[0].high + '), target:: p__') + else: + self.fw(' ' + fvars.ftof(s.type) + ', target:: p__') + if s.dynamic: + self.fw(' if (nullit__ == 0) then') + self.fw(' ' + s.name + ' => p__') + self.fw(' else') + self.fw(' nullify(' + s.name + ')') + self.fw(' endif') + else: + self.fw(' ' + s.name + ' = p__') + self.fw(' return') + self.fw('end') + if s.dynamic: + # --- In all cases, it is not desirable to create a new instance, + # --- for example when the object is being deleted. + self.fw('subroutine ' + self.fsub('getscalarpointer', s.name) + + '(cobj__, fobj__, createnew__)') + self.fw(' use ' + s.group) + self.fw(' integer(' + self.isz + '):: cobj__, fobj__') + self.fw(' integer(4):: createnew__') + self.fw(' if (associated(' + s.name + ')) then') + self.fw(' if (' + s.name + '%cobj__ == 0 .and. createnew__ == 1) then') + self.fw(' call init' + s.type + 'py(int(-1, ' + self.isz + '), ' + s.name + ', ' + + s.name + '%cobj__, int(0, ' + self.isz + '), int(0, ' + self.isz + '))') + self.fw(' endif') + self.fw(' cobj__ = ' + s.name + '%cobj__') + self.fw(' else') + self.fw(' cobj__ = 0') + self.fw(' endif') + self.fw(' return') + self.fw('end') + + for a in self.alist: + if a.dynamic: + self.fw('subroutine ' + self.fsub('setarraypointer', a.name) + '(p__, fobj__, dims__)') + groups = self.dimsgroups(a.dimstring) + groupsprinted = [a.group] + for g in groups: + if g not in groupsprinted: + self.fw(' use ' + g) + groupsprinted.append(g) + self.fw(' use ' + a.group) + self.fw(' integer(' + self.isz + '):: fobj__') + self.fw(' integer(' + self.isz + '):: dims__(' + repr(len(a.dims)) + ')') + + if a.type == 'character': + self.fw(' character(len=' + a.dims[0].high + '), target:: p__' + + self.prefixdimsf(re.sub('[ \t\n]', '', a.dimstring))) + else: + self.fw(' ' + fvars.ftof(a.type) + ', target:: p__' + + self.prefixdimsf(re.sub('[ \t\n]', '', a.dimstring))) + if self.ompactive: + self.ThreadedAssociation(a) + else: + self.fw(' ' + a.name + ' => p__') + self.fw(' return') + self.fw('end') + if re.search('fassign', a.attr): + self.fw('subroutine ' + self.fsub('getarraypointer', a.name) + '(farray__, fobj__)') + self.fw(' use ' + a.group) + self.fw(' integer(' + self.isz + '):: farray__, fobj__') + self.fw(' integer(' + self.isz + '):: ss(%d)' % (len(a.dims))) + self.fw(' if (.not. associated(' + a.name + ')) return') + self.fw(' call ' + self.fsub('grabarraypointersobj') + '(farray__, ' + a.name + ')') + self.fw(' ss = shape(' + a.name + ')') + self.fw(' call ' + self.fsub('setarraydims') + '(farray__, ss)') + self.fw(' return') + self.fw('end') + + ########################################################################### + + # --- Close fortran file + self.ffile.close() + + scalar_pickle_file = open(self.pkgname + '.scalars', 'wb') + self.sdict['_module_name_'] = self.pkgname + pickle.dump(self.sdict, scalar_pickle_file) + pickle.dump(self.slist, scalar_pickle_file) + scalar_pickle_file.close() + + def writef90modules(self): + """Write the fortran90 modules.""" + self.setffile() + if self.fcompname == 'xlf': + save = ', save' + else: + save = '' + for g in self.groups + self.hidden_groups: + self.fw('module ' + g) + # --- Check if any variables are derived types. If so, the module + # --- containing the type must be used. + printedtypes = [] + for v in self.slist + self.alist: + if v.group == g and v.derivedtype: + if v.type not in printedtypes: + self.fw(' use ' + v.type + 'module') + printedtypes.append(v.type) + self.fw(' save') + # --- Declerations for scalars and arrays + for s in self.slist: + if s.group == g: + self.fw(' ' + fvars.ftof(s.type), noreturn=1) + if s.dynamic: + self.fw(', pointer', noreturn=1) + self.fw(save + ':: ' + s.name, noreturn=1) + if s.data: + self.fw('=' + s.data[1:-1], noreturn=1) + self.fw('') + for a in self.alist: + if a.group == g: + if a.dynamic: + if a.type == 'character': + self.fw(' character(len=' + a.dims[0].high + '), pointer' + save + ':: ' + a.name, noreturn=1) + ndims = len(a.dims) - 1 + else: + self.fw(' ' + fvars.ftof(a.type) + ', pointer' + save + ':: ' + a.name, noreturn=1) + ndims = len(a.dims) + if ndims > 0: + self.fw('(' + (ndims * ':,')[:-1] + ')', noreturn=1) + self.fw('') + else: + if a.type == 'character': + self.fw(' character(len=' + a.dims[0].high + ')' + save + ':: ' + a.name + + re.sub('[ \t\n]', '', a.dimstring)) + else: + self.fw(' ' + fvars.ftof(a.type) + save + ':: ' + + a.name + re.sub('[ \t\n]', '', a.dimstring)) + if a.data: + # --- Add line continuation marks if the data line extends over + # --- multiple lines. + dd = re.sub(r'\n', '&\n', a.data) + self.fw(' data ' + a.name + dd) + if self.ompactive: + self.DeclareThreadPrivate(g) + self.fw('end module ' + g) + if self.ompactive: + self.writef90OMPCopyHelper() + self.writef90OMPInitHelper() + self.PrintListThreadPrivateVars() + +############################################################################### +############################################################################### +############################################################################### + + +module_prefix_pat = re.compile('([a-zA-Z_][a-zA-Z0-9_]*)\.scalars') + + +def get_another_scalar_dict(file_name, other_scalar_vars): + m = module_prefix_pat.search(file_name) + if m.start() == -1: + raise SyntaxError('expect a .scalars file') + f = open(file_name, 'rb') + vars = [] + vars.append(pickle.load(f)) + vars.append(pickle.load(f)) + other_scalar_vars.append(vars) + f.close() + + +def wrappergenerator_main(argv=None, writef90modulesonly=0): + # --- Get package name from argument list + try: + pkgname = args.pkgname + varfile = args.remainder[0] + otherfortranfiles = args.remainder[1:] + except IndexError: + print(PyWrap.__doc__) + sys.exit(1) + + # --- get other command line args and default actions + pkgsuffix = args.pkgsuffix + pkgbase = args.pkgbase + initialgallot = args.initialgallot + fcompname = args.fcomp + writemodules = args.writemodules + timeroutines = args.timeroutines + ompactive = args.omp + otherinterfacefiles = args.othermacros + ompdebug = args.ompdebug + + # --- a list of scalar dictionaries from other modules. + other_scalar_vars = [] + for d in args.dependencies: + get_another_scalar_dict(d, other_scalar_vars) + + cc = PyWrap(varfile, pkgname, pkgsuffix, pkgbase, initialgallot, writemodules, + otherinterfacefiles, other_scalar_vars, timeroutines, + otherfortranfiles, fcompname, ompactive, ompdebug) + if writef90modulesonly: + cc.writef90modules() + else: + cc.createmodulefile() + + # --- forthonf2c.h is imported by Forthon.h, and defines macros needed for strings. + writeforthonf2c() + + +# --- This might make some of the write statements cleaner. +# --- From http://aspn.activestate.com/ASPN/Python/Cookbook/ +class PrintEval: + + def __init__(self, globals=None, locals=None): + self.globals = globals or {} + self.locals = locals or None + + def __getitem__(self, key): + if self.locals is None: + self.locals = sys._getframe(1).f_locals + key = key % self + return eval(key, self.globals, self.locals) + +if __name__ == '__main__': + wrappergenerator_main(sys.argv[1:]) diff --git a/source/.#wrappergenerator.py b/source/.#wrappergenerator.py new file mode 120000 index 0000000..12ee8c2 --- /dev/null +++ b/source/.#wrappergenerator.py @@ -0,0 +1 @@ +guterlj@irisd.cluster.20567:1637540524 \ No newline at end of file diff --git a/source/Forthon.h b/source/Forthon.h index 3e3eb7e..99a53be 100644 --- a/source/Forthon.h +++ b/source/Forthon.h @@ -1477,6 +1477,7 @@ static PyObject *ForthonPackage_getgroup(PyObject *_self_,PyObject *args) /* # the same thing as getattr except that for unallocated objects, it */ /* # returns None */ static char getpyobject_doc[] = "Returns the python object associated with a name, returns None is object is unallocated"; +static char setpyobject_doc[] = "Set the value to the python object associated with a name, returns None"; static PyObject *ForthonPackage_getpyobject(PyObject *_self_,PyObject *args) { ForthonObject *self = (ForthonObject *)_self_; @@ -1493,8 +1494,24 @@ static PyObject *ForthonPackage_getpyobject(PyObject *_self_,PyObject *args) else { return obj; } +} +static PyObject *ForthonPackage_setpyobject(PyObject *_self_,PyObject *args) +{ + ForthonObject *self = (ForthonObject *)_self_; + int e; + PyObject *name,*pyobj; + if (!PyArg_ParseTuple(args,"OO",&name,&pyobj)) { +PyErr_SetString(ErrorObject,"No such variable"); +return NULL; } + e = Forthon_setattro(self,name,pyobj); + if (e !=0) + {PyErr_SetString(ErrorObject,"No such variable...."); + return NULL;} + +returnnone; +} /* ######################################################################### */ static char gettypename_doc[] = "Returns name of type of object."; static PyObject *ForthonPackage_gettypename(PyObject *_self_,PyObject *args) @@ -2273,6 +2290,7 @@ static struct PyMethodDef ForthonPackage_methods[] = { {"getfunctions",(PyCFunction)ForthonPackage_getfunctions,1,getfunctions_doc}, {"getgroup" ,(PyCFunction)ForthonPackage_getgroup,1,getgroup_doc}, {"getpyobject" ,(PyCFunction)ForthonPackage_getpyobject,1,getpyobject_doc}, + {"setpyobject" ,(PyCFunction)ForthonPackage_setpyobject,1,setpyobject_doc}, {"gettypename" ,(PyCFunction)ForthonPackage_gettypename,1,gettypename_doc}, {"getvarattr" ,(PyCFunction)ForthonPackage_getvarattr,1,getvarattr_doc}, {"setvarattr" ,(PyCFunction)ForthonPackage_setvarattr,1,setvarattr_doc}, From f02c74fb57b5f8bbc9ac5d459d83e400b8d8713e Mon Sep 17 00:00:00 2001 From: jguterl Date: Fri, 3 Dec 2021 19:46:44 -0800 Subject: [PATCH 2/2] add setpyobject --- dist/Forthon-0.9.4-py3.8.egg | Bin 159979 -> 0 bytes run.grid | 102 --- source/#wrappergenerator.py# | 1350 ---------------------------------- 3 files changed, 1452 deletions(-) delete mode 100644 dist/Forthon-0.9.4-py3.8.egg delete mode 100644 run.grid delete mode 100644 source/#wrappergenerator.py# diff --git a/dist/Forthon-0.9.4-py3.8.egg b/dist/Forthon-0.9.4-py3.8.egg deleted file mode 100644 index 02456e5f14cc02cc12b1cc551588344b281d37d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159979 zcmZ_z1B@_C)GP>(ZF}Y!+qP}nwr$(CZQHhO+vdJ^?~iYHvq_(%)9K2|sZ@7Pb<0Zu zgP;Ha06+lb=L9K{SAqPB0096{g8~2`{V~i0h#3+V|KZ)eMFYN#63a zs`gsF=v2(g15Hm3ch&CDJyiIU@Pf;(}NRxUtam}?ZYiP08WM*4TBlvm)L0v0DT_E#%qL{7GjpZ%iYQJ{m zfYqr}h_TbXdNokoMv6vJ%GGJrq#9N++-9?&=J7zq1m(Fzv<+@_jutRXu+sS+ODnd0XQ8hN4Y>fM|z03H|Ptu(cNX~e?2;E)ogZ$1YfX>9~jEg;k-4CdS z(_hwcgou+0=&)&Zl(M3>*d_g3Y7%|0ZPDS+EsBxv=8_g!$~bUq<$3FDr@p8V-K?jr z5SOYD@#{plq5px|30>i4Wddm-p0n+l$>Zjjk}0+Cj0m4dbOwmJa0DtULLlVa(>{Q{ zps@UzDGA}}$-lyY4W%xlOg?=BUG5M2p`U%c;23@yNgd$xXpauWZ#+KP4~aB$9S^fY zI~(FKI7DsVcZ`1!uo317dk%67V-{P7kJp~c5)Jd@oGfo>lT5c4Zx^Wy0Kl{AN6yl# zN7}S*$$PLDcqsuZpS$RLRv^PGLJl>d5xo4=CLXw&sH)y~@(8vvyM7-Y5736Z1Izzk zG*=G{8oBqM)^PvR-TzYJ|4(yDaw>{KB1*K*?#@2(GqOYU2*GzAX{F$~00Mysd?Ga2 zHT%+wsIfhoc7ji@AeDhjqBuW3$aCx_2s_|@DK=48TV;fIm(+q@vmVovMN9(NNfQKa>X_Y4ei#s@@;zD}24QkX)y%jqB+q1}R+lY}J&Mvn2#g_xBaA8%Z_ z@7AQy>VYECM?=ooGppW`BQO>RGtbgk@>k>GQIO�>28Tn$bbBdkEt*p?C;uNx{lCEcpJ*o| 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 diff --git a/run.grid b/run.grid deleted file mode 100644 index a3335f5..0000000 --- a/run.grid +++ /dev/null @@ -1,102 +0,0 @@ - j x -0000 0.000E+00 -0001 1.000E-09 -0002 2.153E-09 -0003 3.483E-09 -0004 5.016E-09 -0005 6.783E-09 -0006 8.821E-09 -0007 1.117E-08 -0008 1.388E-08 -0009 1.701E-08 -0010 2.061E-08 -0011 2.476E-08 -0012 2.955E-08 -0013 3.508E-08 -0014 4.144E-08 -0015 4.879E-08 -0016 5.725E-08 -0017 6.702E-08 -0018 7.827E-08 -0019 9.125E-08 -0020 1.062E-07 -0021 1.235E-07 -0022 1.434E-07 -0023 1.663E-07 -0024 1.928E-07 -0025 2.233E-07 -0026 2.585E-07 -0027 2.990E-07 -0028 3.458E-07 -0029 3.997E-07 -0030 4.619E-07 -0031 5.336E-07 -0032 6.162E-07 -0033 7.115E-07 -0034 8.214E-07 -0035 9.481E-07 -0036 1.094E-06 -0037 1.263E-06 -0038 1.457E-06 -0039 1.681E-06 -0040 1.939E-06 -0041 2.237E-06 -0042 2.580E-06 -0043 2.976E-06 -0044 3.433E-06 -0045 3.959E-06 -0046 4.566E-06 -0047 5.266E-06 -0048 6.073E-06 -0049 7.004E-06 -0050 8.077E-06 -0051 9.314E-06 -0052 1.074E-05 -0053 1.239E-05 -0054 1.428E-05 -0055 1.647E-05 -0056 1.899E-05 -0057 2.190E-05 -0058 2.525E-05 -0059 2.912E-05 -0060 3.357E-05 -0061 3.871E-05 -0062 4.464E-05 -0063 5.147E-05 -0064 5.935E-05 -0065 6.843E-05 -0066 7.891E-05 -0067 9.099E-05 -0068 1.049E-04 -0069 1.210E-04 -0070 1.395E-04 -0071 1.608E-04 -0072 1.855E-04 -0073 2.138E-04 -0074 2.466E-04 -0075 2.843E-04 -0076 3.278E-04 -0077 3.780E-04 -0078 4.358E-04 -0079 5.025E-04 -0080 5.795E-04 -0081 6.682E-04 -0082 7.704E-04 -0083 8.883E-04 -0084 1.024E-03 -0085 1.181E-03 -0086 1.362E-03 -0087 1.570E-03 -0088 1.811E-03 -0089 2.088E-03 -0090 2.407E-03 -0091 2.776E-03 -0092 3.200E-03 -0093 3.690E-03 -0094 4.255E-03 -0095 4.906E-03 -0096 5.657E-03 -0097 6.523E-03 -0098 7.521E-03 -0099 8.673E-03 -0100 1.000E-02 diff --git a/source/#wrappergenerator.py# b/source/#wrappergenerator.py# deleted file mode 100644 index 6c93897..0000000 --- a/source/#wrappergenerator.py# +++ /dev/null @@ -1,1350 +0,0 @@ -#!/usr/bin/env python -# Python wrapper generation -# Created by David P. Grote, March 6, 1998 -# Modified by T. B. Yang, May 21, 1998 - -import sys -import os.path -import hashlib -from .interfaceparser import processfile -import string -import re -from . import fvars -import pickle -from .Forthon_options import args -from .cfinterface import * -from . import wrappergen_derivedtypes -from .wrappergenerator_ompextension import PyWrap_OMPExtension - - - - -class PyWrap(PyWrap_OMPExtension): - """ - Usage: - -a All groups will be allocated on initialization - -t ARCH Build for specified architecture (default is HP700) - -d <.scalars file> a .scalars file in another module that this module depends on - -F The fortran compiler being used. This is needed since some - operations depend on the compiler specific oddities. - --nowritemodules The modules will not be written out, assuming - that they are already written. - --macros pkg.v Other interface files that are needed for the definition - of macros. - --timeroutines Calls to the routines from python will be timed - file1 Main variable description file for the package - [file2, ...] Subsidiary variable description files - """ - - def __init__(self, varfile, pkgname, pkgsuffix, pkgbase, initialgallot=1, writemodules=1, - otherinterfacefiles=[], other_scalar_vars=[], timeroutines=0, - otherfortranfiles=[], fcompname=None, ompactive=False, ompdebug=False): - self.varfile = varfile - self.pkgname = pkgname - self.pkgsuffix = pkgsuffix - self.pkgbase = pkgbase - self.initialgallot = initialgallot - self.writemodules = writemodules - self.timeroutines = timeroutines - self.otherinterfacefiles = otherinterfacefiles - self.other_scalar_vars = other_scalar_vars - self.otherfortranfiles = otherfortranfiles - self.fcompname = fcompname - self.isz = isz # isz defined in cfinterface - self.processvariabledescriptionfile() - self.OMPInit(ompactive, ompdebug) - - def cname(self, n): - # --- Standard name of the C interface to a Fortran routine - # --- pkg_varname - return self.pkgname + '_' + n - - transtable = (10 * string.ascii_lowercase)[:256] - - def fsub(self, prefix, suffix=''): - """ - The fortran standard limits routine names to 31 characters. If the - routine name is longer than that, this routine takes the first 15 - characters and and creates a hashed string based on the full name to get - the next 16. This does not guarantee uniqueness, but the nonuniqueness - should be minute. - """ - name = self.pkgname + prefix + suffix - if len(name) < 32: - return name - transtable = PyWrap.transtable - hashbytes = hashlib.md5(name.encode()).digest() - hash = ''.join([transtable[d] for d in hashbytes]) - return name[:15] + hash - - def dimisparameter(self, dim): - # --- Convert fortran variable name into reference from list of variables - # --- and check if it is a parameter. - sl = re.split('[ ()/\*\+\-]', dim) - for ss in sl: - if re.search('[a-zA-Z]', ss) is not None: - try: - v = self.slist[self.sdict[ss]] - if v.parameter: - return True - except KeyError: - pass - return False - - def prefixdimsc(self, dim): - # --- Convert fortran variable name into reference from list of variables. - sl = re.split('[ ()/\*\+\-]', dim) - for ss in sl: - if re.search('[a-zA-Z]', ss) is not None: - if ss in self.sdict: - dim = re.sub(ss, - '*(long *)' + self.pkgname + '_fscalars[' + repr(self.sdict[ss]) + '].data', - dim, count=1) - else: - for other_vars in self.other_scalar_vars: - other_dict = other_vars[0] - if ss in other_dict: - dim = re.sub(ss, '*(long *)' + other_dict['_module_name_'] + - '_fscalars[' + repr(other_dict[ss]) + '].data', dim, count=1) - break - else: - raise SyntaxError(ss + ' is not declared in the interface file') - return dim.lower() - - # --- Convert dimensions for unspecified arrays - def prefixdimsf(self, dim): - # --- Check for any unspecified dimensions and replace it with an element - # --- from the dims array. - sl = re.split(',', dim[1:-1]) - for i in range(len(sl)): - if sl[i] == ':': - sl[i] = 'dims__(%d)' % (i + 1) - dim = '(' + ','.join(sl) + ')' - return dim.lower() - - def dimsgroups(self, dim): - # --- Returns a list of group names that contain the variables listed in - # --- a dimension statement - groups = [] - sl = re.split('[ (),:/\*\+\-]', dim) - for ss in sl: - if re.search('[a-zA-Z]', ss) is not None: - if ss in self.sdict: - groups.append(self.slist[self.sdict[ss]].group) - else: - for other_vars in self.other_scalar_vars: - other_dict = other_vars[0] - other_list = other_vars[1] - if ss in other_dict: - groups.append(other_list[other_dict[ss]].group) - break - else: - raise SyntaxError(ss + ' is not declared in the interface file') - return groups - - def getmodulename(self): - if self.pkgbase is not None: - return self.pkgbase - else: - return self.pkgname + self.pkgsuffix + 'py' - - def cw(self, text, noreturn=0): - if noreturn: - self.cfile.write(text) - else: - self.cfile.write(text + '\n') - - def fw(self, text, noreturn=0): - i = 0 - while len(text[i:]) > 132 and text[i:].find('&') == -1: - # --- If the line is too long, then break it up, adding line - # --- continuation marks in between any variable names. - # --- This is the same as \W, but also skips %, since PG compilers - # --- don't seem to like a line continuation mark just before a %. - ss = re.search('[^a-zA-Z0-9_%]', text[i + 130::-1]) - assert ss is not None, "Forthon can't find a place to break up this line:\n" + text - text = text[:i + 130-ss.start()] + '&\n' + text[i+130-ss.start():] - i += 130 - ss.start() + 1 - if noreturn: - self.ffile.write(text) - else: - self.ffile.write(text + '\n') - - def setffile(self): - """ - Set the ffile attribute, which is the fortran file object. - It the attribute hasn't been created, then open the file with write status. - If it has, and the file is closed, then open it with append status. - """ - if 'ffile' in self.__dict__: - status = 'a' - else: - status = 'w' - if status == 'w' or (status == 'a' and self.ffile.closed): - self.ffile = open(self.pkgname + '_p.F90', status) - - def processvariabledescriptionfile(self): - """ - Read in and parse the variable description file and create the lists - of scalars and arrays. - """ - - # --- Get the list of variables and subroutine from the var file - vlist, hidden_vlist, typelist = processfile(self.pkgname, self.varfile, - self.otherinterfacefiles, - self.timeroutines) - - # --- Get a list of all of the group names which have variables in it - # --- (only used when writing fortran files but done here while complete - # --- list of variables is still in one place, vlist). - currentgroup = '' - groups = [] - for v in vlist: - if not v.function and v.group != currentgroup: - groups.append(v.group) - currentgroup = v.group - - # --- Get a list of all of the hidden group names. - current_hidden_group = '' - hidden_groups = [] - for hv in hidden_vlist: - if not hv.function and hv.group != current_hidden_group: - hidden_groups.append(hv.group) - current_hidden_group = hv.group - - # --- Select out all of the scalars and build a dictionary - # --- The dictionary is used to get number of the variables use as - # --- dimensions for arrays. - slist = [] - sdict = {} - i = 0 - temp = vlist[:] - for v in temp: - if not v.dims and not v.function: - slist.append(v) - sdict[v.name] = i - i = i + 1 - vlist.remove(v) - - # --- Select out all of the arrays - alist = [] - i = 0 - temp = vlist[:] - for v in temp: - if not v.function: - alist.append(v) - i = i + 1 - vlist.remove(v) - temp = [] - - # --- The remaining elements should all be functions - flist = vlist - - self.typelist = typelist - self.slist = slist - self.sdict = sdict - self.alist = alist - self.flist = flist - self.groups = groups - self.hidden_groups = hidden_groups - - ########################################################################### - def createmodulefile(self): - # --- This is the routine that does all of the work - - # --- Create the module file - self.cfile = open(self.pkgname + 'pymodule.c', 'w') - self.cw('#include "Forthon.h"') - self.cw('#include ') - self.cw('ForthonObject *' + self.pkgname + 'Object;') - - # --- See the kaboom command in Forthon.c for information on these two - # --- variables. - self.cw('extern jmp_buf stackenvironment;') - self.cw('extern int lstackenvironmentset;') - - # --- Print out the external commands - self.cw('extern void ' + fname(self.fsub('passpointers')) + '(void);') - self.cw('extern void ' + fname(self.fsub('nullifypointers')) + '(void);') - - # --- fortran routine prototypes - for f in self.flist: - # --- Functions - self.cw('extern ' + fvars.ftoc(f.type) + ' ' + fname(f.name) + '(', noreturn=1) - i = 0 - istr = 0 - if len(f.args) == 0: - self.cw('void', noreturn=1) - for a in f.args: - if i > 0: - self.cw(', ', noreturn=1) - i = i + 1 - self.cw(fvars.ftoc(a.type) + ' ', noreturn=1) - if a.type == 'string' or a.type == 'character': - istr = istr + 1 - else: - self.cw('*', noreturn=1) - self.cw(a.name, noreturn=1) - if charlen_at_end: - for i in range(istr): - self.cw(', int sl' + repr(i), noreturn=1) - self.cw(');') - for t in self.typelist: - self.cw('extern PyObject *' + self.cname(t.name) + 'New(PyObject *self, PyObject *args);') - self.cw('') - - # --- setpointer and getpointer routines - # --- Note that setpointer gets written out for all derived types - - # --- for non-dynamic derived types, the setpointer routine does a copy. - # --- The double underscores in the argument names are to avoid name - # --- collisions with package variables. - for s in self.slist: - if (s.dynamic or s.derivedtype) and not s.parameter: - self.cw('extern void ' + fname(self.fsub('setscalarpointer', s.name)) + - '(char *p__, char *fobj__, npy_intp *nullit__);') - if s.dynamic: - self.cw('extern void ' + fname(self.fsub('getscalarpointer', s.name)) + - '(ForthonObject **cobj__, char *fobj__, int *createnew__);') - for a in self.alist: - self.cw('extern void ' + fname(self.fsub('setarraypointer', a.name)) + - '(char *p__, char *fobj__, npy_intp *dims__);') - if re.search('fassign', a.attr): - self.cw('extern void ' + fname(self.fsub('getarraypointer', a.name)) + - '(Fortranarray *farray__, char *fobj__);') - self.cw('') - - # --- setaction and getaction routines - for s in self.slist: - if s.setaction is not None: - self.cw('extern void ' + fname(self.fsub('setaction', s.name)) + - '(' + fvars.ftoc_dict[s.type] + ' *v);') - if s.getaction is not None: - self.cw('extern void ' + fname(self.fsub('getaction', s.name)) + '(void);') - for a in self.alist: - if a.setaction is not None: - self.cw('extern void ' + fname(self.fsub('setaction', a.name)) + - '(' + fvars.ftoc_dict[a.type] + ' *v);') - if a.getaction is not None: - self.cw('extern void ' + fname(self.fsub('getaction', a.name)) + '(void);') - - ########################################################################### - # --- Write declarations of c pointers to fortran variables - - # --- Declare scalars from other modules - for other_vars in self.other_scalar_vars: - other_dict = other_vars[0] - self.cw('extern Fortranscalar ' + other_dict['_module_name_'] + - '_fscalars[];') - - # --- Note that the pointers to the subroutines set and getpointer and - # --- set and get action are at first set to NULL. The data is then setup - # --- in a seperate call to the declarevars. This is done since it is not - # --- standard C to have function pointers in structure initializers. - - # --- Scalars - self.cw('int ' + self.pkgname + 'nscalars = ' + repr(len(self.slist)) + ';') - if len(self.slist) > 0: - self.cw('Fortranscalar ' + self.pkgname + '_fscalars[' + repr(len(self.slist)) + ']={') - for i in range(len(self.slist)): - s = self.slist[i] - self.cw('{NPY_%s,' % fvars.ftop(s.type) + - '"%s",' % s.type + - '"%s",' % s.name + - 'NULL,' + - '"%s",' % s.group + - '"%s",' % s.attr + - '"%s",' % repr(s.comment)[1:-1].replace('"', '\\"') + - '"%s",' % repr(s.unit)[1:-1] + - '%i,' % s.dynamic + - '%i,' % s.parameter + - 'NULL,' + # setscalarpointer - 'NULL,' + # getscalarpointer - 'NULL,' + # setaction - 'NULL' + # getaction - '}', noreturn=1) - if i < len(self.slist) - 1: - self.cw(',') - self.cw('};') - else: - self.cw('Fortranscalar *' + self.pkgname + '_fscalars=NULL;') - - # --- Arrays - self.cw('int ' + self.pkgname + 'narrays = ' + repr(len(self.alist)) + ';') - if len(self.alist) > 0: - self.cw('static Fortranarray ' + - self.pkgname + '_farrays[' + repr(len(self.alist)) + ']={') - for i in range(len(self.alist)): - a = self.alist[i] - if a.data and a.dynamic: - initvalue = a.data[1:-1] - else: - initvalue = '0' - self.cw('{NPY_%s,' % fvars.ftop(a.type) + - '%d,' % a.dynamic + - '%d,'% len(a.dims) + - 'NULL,' + - '"%s",' % a.name + - '{NULL},' + - 'NULL,' + # setarraypointer - 'NULL,' + # getarraypointer - 'NULL,' + # setaction - 'NULL,' + # getaction - '%s,' % initvalue + - 'NULL,' + - '"%s",' % a.group + - '"%s",' % a.attr + - '"%s",' % repr(a.comment)[1:-1].replace('"', '\\"') + - '"%s",' % repr(a.unit)[1:-1] + - '"%s"}' % repr(a.dimstring)[1:-1], noreturn=1) - if i < len(self.alist) - 1: - self.cw(',') - self.cw('};') - else: - self.cw('static Fortranarray *' + self.pkgname + '_farrays=NULL;') - - ######################################################################### - # --- Write declarations of c pointers to fortran variables - self.cw('void ' + self.pkgname + 'declarevars(ForthonObject *obj) {') - - # --- Scalars - for i in range(len(self.slist)): - s = self.slist[i] - if (s.dynamic or s.derivedtype) and not s.parameter: - setscalarpointer = '*' + fname(self.fsub('setscalarpointer', s.name)) - self.cw('obj->fscalars[%d].setscalarpointer = %s;' % (i, setscalarpointer)) - if s.dynamic: - getscalarpointer = '*' + fname(self.fsub('getscalarpointer', s.name)) - self.cw('obj->fscalars[%d].getscalarpointer = %s;' % (i, getscalarpointer)) - if s.setaction is not None: - setaction = '*' + fname(self.fsub('setaction', s.name)) - self.cw('obj->fscalars[%d].setaction = %s;' % (i, setaction)) - if s.getaction is not None: - getaction = '*' + fname(self.fsub('getaction', s.name)) - self.cw('obj->fscalars[%d].getaction = %s;' % (i, getaction)) - - # --- Arrays - for i in range(len(self.alist)): - a = self.alist[i] - if a.dynamic: - setarraypointer = '*' + fname(self.fsub('setarraypointer', a.name)) - self.cw('obj->farrays[%d].setarraypointer = %s;' % (i, setarraypointer)) - if re.search('fassign', a.attr): - getarraypointer = '*' + fname(self.fsub('getarraypointer', a.name)) - self.cw('obj->farrays[%d].getarraypointer = %s;' % (i, getarraypointer)) - if a.setaction is not None: - setaction = '*' + fname(self.fsub('setaction', a.name)) - self.cw('obj->farrays[%d].setaction = %s;' % (i, setaction)) - if a.getaction is not None: - getaction = '*' + fname(self.fsub('getaction', a.name)) - self.cw('obj->farrays[%d].getaction = %s;' % (i, getaction)) - - self.cw('}') - -# Some extra work is needed to get the getset attribute access scheme working. -# # --- Write out the table of getset routines -# self.cw('') -# self.cw('static PyGetSetDef ' + self.pkgname + '_getseters[] = {') -# for i in range(len(self.slist)): -# s = self.slist[i] -# if s.type == 'real': gstype = 'double' -# elif s.type == 'double': gstype = 'double' -# elif s.type == 'float': gstype = 'float' -# elif s.type == 'integer': gstype = 'integer' -# elif s.type == 'complex': gstype = 'cdouble' -# else: gstype = 'derivedtype' -# self.cw('{"' + s.name + '", (getter)Forthon_getscalar' + gstype + -# ', (setter)Forthon_setscalar' + gstype + -# ', "%s"'%repr(s.comment)[1:-1].replace('"', '\\"') + -# ', "%s"'%repr(s.unit)[1:-1] + -# ', (void *)' + repr(i) + '}, ') -# for i in range(len(self.alist)): -# a = self.alist[i] -# self.cw('{"' + a.name + '", (getter)Forthon_getarray' + -# ', (setter)Forthon_setarray' + -# ', "%s"'%repr(a.comment)[1:-1].replace('"', '\\"') + -# ', "%s"'%repr(a.unit)[1:-1] + -# ', (void *)' + repr(i) + '}, ') -# self.cw('{"scalardict", (getter)Forthon_getscalardict, ' + -# '(setter)Forthon_setscalardict, ' + -# '"internal scalar dictionary", NULL}, ') -# self.cw('{"arraydict", (getter)Forthon_getarraydict, ' + -# '(setter)Forthon_setarraydict, ' + -# '"internal array dictionary", NULL}, ') -# self.cw('{NULL}};') - - ########################################################################### - if self.timeroutines: - # --- This is written out here instead of just being in Forthon.h - # --- so that when it is not used, the compiler doesn't complain - # --- about cputime being unused. - self.cw('#include ') - self.cw('#include ') - self.cw('static double cputime(void)') - self.cw('{') - self.cw(' struct tms usage;') - self.cw(' long hardware_ticks_per_second;') - self.cw(' (void) times(&usage);') - self.cw(' hardware_ticks_per_second = sysconf(_SC_CLK_TCK);') - self.cw(' return (double) usage.tms_utime/hardware_ticks_per_second;') - self.cw('}') - - ########################################################################### - ########################################################################### - # --- Now, the fun part, writing out the wrapper for the subroutine and - # --- function calls. - for f in self.flist: - # --- Write out the documentation first. - docstring = ('static char doc_' + self.cname(f.name) + '[] = "' + f.name + - f.dimstring + '\n' + f.comment + '";') - # --- Replaces newlines with '\\n' so that the string is all on one line - # --- in the C coding using repr, easily. - # --- The [1:-1] strips off the single quotes that repr puts there. - self.cw(repr(docstring)[1:-1]) - # --- Now write out the wrapper - self.cw('static PyObject *') - self.cw(self.cname(f.name) + '(PyObject *self, PyObject *args)') - self.cw('{') - - # --- With arguments, it gets very messy - lv = repr(len(f.args)) - if len(f.args) > 0: - self.cw(' PyObject * pyobj[' + lv + '];') - self.cw(' PyArrayObject * ax[' + lv + '];') - self.cw(' int i;') - self.cw(' char e[256];') - - if self.timeroutines: - # --- Setup for the timer, getting time routine started. - self.cw(' double time1, time2;') - self.cw(' time1 = cputime();') - - # --- For character arguments, need to create an FSTRING array. - istr = 0 - for a in f.args: - if a.type == 'string' or a.type == 'character': - istr = istr + 1 - if istr > 0: - self.cw(' FSTRING fstr[' + repr(istr) + '];') - - # --- If this is a function, set up variables to hold return value - if f.type != 'void': - self.cw(' PyObject * ret_val;') - self.cw(' ' + fvars.ftoc(f.type) + ' r;') - - # --- Set all of the ax's to NULL - if len(f.args) > 0: - self.cw(' for (i=0;i<' + repr(len(f.args)) + ';i++) ax[i] = NULL;') - - # --- Parse incoming arguments into a list of PyObjects - self.cw(' if (!PyArg_ParseTuple(args, "' + 'O' * len(f.args) + '"', noreturn=1) - for i in range(len(f.args)): - self.cw(', &pyobj[' + repr(i) + ']', noreturn=1) - self.cw(')) return NULL;') - - # --- Loop over arguments, extracting the data addresses. - # --- Convert all arguments into arrays. This allows complete flexibility - # --- in what can be passed to fortran functions. - istr = 0 - for i in range(len(f.args)): - if not fvars.isderivedtype(f.args[i]): - self.cw(' if (!Forthon_checksubroutineargtype(pyobj[' + repr(i) + '], ' + - 'NPY_' + fvars.ftop(f.args[i].type) + ')) {') - self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + - ' has the wrong type");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - if f.function == 'fsub': - self.cw(' ax[' + repr(i) + '] = FARRAY_FROMOBJECT(' + - 'pyobj[' + repr(i) + '], NPY_' + fvars.ftop(f.args[i].type) + ');') - elif f.function == 'csub': - self.cw(' ax[' + repr(i) + ']=(PyArrayObject *)PyArray_ContiguousFromObject(' + - 'pyobj[' + repr(i) + '], NPY_' + fvars.ftop(f.args[i].type) + ', 0, 0);') - self.cw(' if (ax[' + repr(i) + '] == NULL) {') - self.cw(' sprintf(e, "There is an error in argument ' + f.args[i].name + - ' in ' + f.name + '");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - if f.args[i].type == 'string' or f.args[i].type == 'character': - self.cw(' FSETSTRING(fstr[%d], PyArray_BYTES(ax[%d]), PyArray_ITEMSIZE(ax[%d]));' % (istr, i, i)) - istr = istr + 1 - else: - self.cw(' {') - self.cw(' PyObject *t;') - self.cw(' t = PyObject_Type(pyobj[' + repr(i) + ']);') - self.cw(' if (strcmp(((PyTypeObject *)t)->tp_name, "Forthon") != 0) {') - self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + - ' has the wrong type");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - self.cw(' Py_DECREF(t);') - typename = '((ForthonObject *)pyobj[' + repr(i) + '])->typename' - self.cw(' if (strcmp(' + typename + ', "' + f.args[i].type + '") != 0) {') - self.cw(' sprintf(e, "Argument ' + f.args[i].name + ' in ' + f.name + - ' has the wrong type");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - self.cw(' }') - - # --- Write the code checking dimensions of arrays - # --- This must be done after all of the ax's are setup in case the - # --- dimensioning arguments come after the array argument. - # --- This creates a local variable with the same name as the argument - # --- and gives it the value passed in. Then any expressions in the - # --- dimensions statements will be explicitly evaluated in C. - if len(f.dimvars) > 0: - - # --- Find the variables used as dimensions that are arrays - arraydimvarnames = [] - for var, i in f.dimvars: - for arg in f.args: - if var.name == arg.name and len(arg.dims) > 0: - assert len(arg.dims) == 1, 'Only one dimensional arrays can be used as array dimensions' - arraydimvarnames.append(var.name) - - def maparraydimsctof(dim): - # --- Map array dimensions from Fortran to C, e.g. convert (n) to [(n)-1]. - # --- Check for each array dimension variable. - # --- The inner loop is needed in case the name appears multiple times. - for d in arraydimvarnames: - i = 0 - while True: - m = re.search(r'\b' + d + r'\b', dim[i:]) - if m is None: - break - else: - # --- Find the matching parenthesis - # --- p1 and p1 will be the indices of the opening and closing parenthesis - p1 = m.end() + i - p2 = p1 - nn = 1 - while nn > 0: - p2 += 1 - if dim[p2] == '(': - nn += 1 - elif dim[p2] == ')': - nn -= 1 - # --- Do the replacement - dim = dim[:p1] + '[' + dim[p1:p2 + 1] + '-1]' + dim[p2 + 1:] - i = p2 + 1 - return dim - - self.cw(' {') - self.cw(' long _n;') - - # --- Declare the dimension variables. - for var, i in f.dimvars: - if var.name in arraydimvarnames: - # --- Declare the variable as a pointer to an array - self.cw(' ' + fvars.ftoc(var.type) + ' * ' + var.name + '=' + - '(' + fvars.ftoc(var.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']));') - else: - # --- Declare the variable as a scalar - self.cw(' ' + fvars.ftoc(var.type) + ' ' + var.name + '= *' + - '(' + fvars.ftoc(var.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']));') - - # --- Loop over the arguments, looking for dimensioned arrays - i = -1 - for arg in f.args: - i += 1 - if len(arg.dims) > 0: - # --- Check the number of dimensions of the input argument - # --- For a 1-D argument, allow a scaler to be passed, which has - # --- a number of dimensions (nd) == 0. - self.cw(' if (!(PyArray_NDIM(ax[%d]) == %d' % (i, len(arg.dims)), noreturn=1) - if len(arg.dims) == 1: - self.cw(' ||PyArray_NDIM(ax[%d]) == 0)) {'%i) - else: - self.cw(' )) {') - self.cw(' sprintf(e, "Argument %s in %s ' % (arg.name, f.name) + - 'has the wrong number of dimensions");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - - # --- Skip the check of dimension sizes if the total size of - # --- the array should be zero. This gets around an issue with - # --- numpy that zero length arrays seem to be always in - # --- C ordering. - self.cw(' if (1', noreturn=1) - for dim in arg.dims: - self.cw('*((' + maparraydimsctof(dim.high) + ') - (' + maparraydimsctof(dim.low) + ') + 1)', noreturn=1) - self.cw(' != 0) {') - - j = -1 - for dim in arg.dims: - j += 1 - # --- Compare each dimension with its specified value - # --- For a 1-D argument, allow a scalar to be passed, which has - # --- a number of dimensions (nd) == 0, but only if the - # --- argument needs to have a length of 0 or 1. - self.cw(' _n = (' + maparraydimsctof(dim.high) + ') - (' + maparraydimsctof(dim.low) + ') + 1;') - if len(arg.dims) == 1: - self.cw(' if (!((_n==0||_n==1)||(PyArray_NDIM(ax[%d]) > 0 &&'%i, - noreturn=1) - else: - self.cw(' if (!((', noreturn=1) - self.cw('_n == (long)(PyArray_DIMS(ax[%d])[%d])))) {'%(i, j)) - self.cw(' sprintf(e, "Dimension ' + repr(j + 1) + ' of argument ' + - arg.name + ' in ' + f.name + - ' has the wrong size");') - self.cw(' PyErr_SetString(ErrorObject, e);') - self.cw(' goto err;}') - self.cw(' }') - self.cw(' }') - - # --- If the stackenvironment has not already been set, then make a call - # --- to setjmp to save the state in case an error happens. - # --- If there was an error, setjmp returns 1, so exit out. - # --- If this routine is called from a python routine that was called - # --- from another fortran routine, then the stackenvironment will - # --- already have been setup (from the calling fortran routine) so don't - # --- reset it. - self.cw(' if (!(lstackenvironmentset++) && setjmp(stackenvironment)) goto err;') - - # --- Write the actual call to the fortran routine. - if f.type == 'void': - self.cw(' ') - else: - self.cw(' r = ') - self.cw(fname(f.name) + '(', noreturn = 1) - i = 0 - istr = 0 - for a in f.args: - if i > 0: - self.cw(', ', noreturn=1) - if fvars.isderivedtype(a): - self.cw('((ForthonObject *)(pyobj[' + repr(i) + ']))->fobj', noreturn=1) - elif a.type == 'string' or a.type == 'character': - self.cw('fstr[%d]'%(istr), noreturn = 1) - istr = istr + 1 - else: - self.cw('(' + fvars.ftoc(a.type) + ' *)(PyArray_BYTES(ax[' + repr(i) + ']))', noreturn=1) - i = i + 1 - if charlen_at_end: - i = 0 - istr = 0 - for a in f.args: - if a.type == 'string' or a.type == 'character': - self.cw(', (int)PyArray_ITEMSIZE(ax[' + repr(i) + '])', noreturn=1) - istr = istr + 1 - i = i + 1 - - self.cw(');') # --- Closing parenthesis on the call list - - # --- Decrement the counter. This will reach zero when the top of the - # --- fortran call chain is reached and is about to return to the top - # --- level python. - self.cw(' lstackenvironmentset--;') - - # --- Copy the data that was sent to the routine back into the passed - # --- in object if it is an PyArray. - # --- Decrement reference counts of array objects created. - # --- This is now handled by a separate subroutine included in Forthon.h - if len(f.args) > 0: - self.cw(' Forthon_restoresubroutineargs(' + repr(len(f.args)) + ', pyobj, ax);') - - if self.timeroutines: - # --- Now get ending time and add to timer variable - self.cw(' time2 = cputime();') - self.cw(' *(double *)' + self.pkgname + '_fscalars[' + - repr(self.sdict[f.name + 'runtime']) + '].data += (time2 - time1);') - - # --- Write return sequence - if f.type == 'void': - self.cw(' returnnone;') - else: - self.cw(' ret_val = Py_BuildValue ("' + fvars.fto1[f.type] + '", r);') - self.cw(' return ret_val;') - - # --- Error section, in case there was an error above or in the - # --- fortran call - self.cw('err:') - - if len(f.args) > 0: - # --- Decrement reference counts of array objects created. - self.cw(' for (i=0;i<' + repr(len(f.args)) + ';i++)') - self.cw(' if (ax[i] != NULL) {Py_XDECREF(ax[i]);}') - - self.cw(' return NULL;') - - self.cw('}') - - # --- Add blank line - self.cw('') - - ########################################################################### - # --- Write out method list - self.cw('static struct PyMethodDef ' + self.pkgname + '_methods[] = {') - for f in self.flist: - if f.function: - self.cw('{"' + f.name + '", (PyCFunction)' + self.cname(f.name) + ', 1, ' + - 'doc_' + self.cname(f.name) + '}, ') - for t in self.typelist: - self.cw('{"' + t.name + '", (PyCFunction)' + self.cname(t.name) + 'New, 1, ' + - '"Creates a new instance of fortran derived type ' + t.name + '"}, ') - self.cw('{NULL, NULL}};') - self.cw('') - - ########################################################################### - # --- Write static array initialization routines - self.cw('void ' + self.pkgname + 'setstaticdims(ForthonObject *self)') - self.cw('{') - - i = -1 - for a in self.alist: - i = i + 1 - vname = self.pkgname + '_farrays[' + repr(i) + ']' - if a.dims and not a.dynamic: - j = 0 - for d in a.dims: - if d.high == '': - continue - self.cw(' ' + vname + '.dimensions[' + repr(j) + ']=(npy_intp)((int)', - noreturn=1) - j = j + 1 - if re.search('[a-zA-Z]', d.high) is None: - self.cw('(' + d.high + ') - ', noreturn=1) - else: - if not self.dimisparameter(d.high): - raise SyntaxError('%s: static dims must be constants or parameters' % a.name) - self.cw('(' + self.prefixdimsc(d.high) + ') - ', noreturn=1) - if re.search('[a-zA-Z]', d.low) is None: - self.cw('(' + d.low + ') + 1);') - else: - if not self.dimisparameter(d.low): - raise SyntaxError('%s: static dims must be constants or parameters' % a.name) - self.cw('(' + self.prefixdimsc(d.low) + ') + 1);') - - self.cw('}') - self.cw('') - - ########################################################################### - # --- Write routine which sets the dimensions of the dynamic arrays. - # --- This is done in a seperate routine so it only appears once. - # --- A routine is written out for each group which has dynamic arrays. Then - # --- a routine is written which calls all of the individual group routines. - # --- That is done to reduce the strain on the compiler by reducing the size - # --- of the routines. (In fact, in one case, with everything in one - # --- routine the cc compiler was giving a core dump!) - # --- Loop over the variables. This assumes that the variables are sorted - # --- by group. - i = -1 - currentgroup = '' - dyngroups = [] - for a in self.alist: - if a.group != currentgroup and a.dynamic: - if currentgroup != '': - self.cw(' }}') - currentgroup = a.group - if len(dyngroups) > 0: - dyngroups[-1][2] = i - dyngroups.append([currentgroup, i + 1, len(self.alist)]) - self.cw('static void ' + self.pkgname + 'setdims' + currentgroup + '(char *name, long i)') - self.cw('{') - self.cw(' if (strcmp(name, "' + a.group + '") || strcmp(name, "*")) {') - - i = i + 1 - vname = self.pkgname + '_farrays[' + repr(i) + ']' - if a.dynamic == 1 or a.dynamic == 2: - j = 0 - self.cw(' if (i == -1 || i == %d) {' % i) - # --- create lines of the form dims[1] = high - low + 1 - for d in a.dims: - if d.high == '': - continue - self.cw(' ' + vname + '.dimensions[' + repr(j) + ']=(npy_intp)((int)', - noreturn=1) - j = j + 1 - if re.search('[a-zA-Z]', d.high) is None: - self.cw('(' + d.high + ') - ', noreturn=1) - else: - self.cw('(' + self.prefixdimsc(d.high) + ') - ', noreturn=1) - if re.search('[a-zA-Z]', d.low) is None: - self.cw('(' + d.low + ') + 1);') - else: - self.cw('(' + self.prefixdimsc(d.low) + ') + 1);') - self.cw(' }') - - if currentgroup != '': - self.cw(' }}') - - # --- Now write out the setdims routine which calls of the routines - # --- for the individual groups. - self.cw('void ' + self.pkgname + 'setdims(char *name, ForthonObject *obj, long i)') - self.cw('{') - for groupinfo in dyngroups: - self.cw(' if (i == -1 || (%d <= i && i <= %d))' % tuple(groupinfo[1:]), noreturn=1) - self.cw(' ' + self.pkgname + 'setdims' + groupinfo[0] + '(name, i);') - self.cw('}') - - self.cw('') - - ########################################################################### - # --- Write set pointers routine which gets all of the fortran pointers - # --- A version needs to be written out for each basic type since Fortran - # --- checks the consistency of the arguments for each call. - # --- The versions are otherwise identical. - for tt in ['real', 'float', 'double', 'integer', 'character', 'logical', 'complex']: - self.cw('void ' + fname(self.fsub('grabscalarpointers_' + tt)) + '(long *i, char *p)') - self.cw('{') - self.cw(' /* Gabs pointer for the scalar */') - self.cw(' ' + self.pkgname + '_fscalars[*i].data = (char *)p;') - self.cw('}') - - # --- A serarate routine is needed for derived types since the cobj__ - # --- that is passed in is already a pointer, so **p is needed. - self.cw('void ' + fname(self.fsub('setderivedtypepointers')) + '(long *i, char **p)') - self.cw('{') - self.cw(' /* Gabs pointer for the scalar */') - self.cw(' ' + self.pkgname + '_fscalars[*i].data = (char *)(*p);') - self.cw('}') - - # --- Get pointer to an array. This takes an integer to specify which array - # --- A version needs to be written out for each basic type since Fortran - # --- checks the consistency of the arguments for each call. - # --- The versions are otherwise identical. - for tt in ['real', 'float', 'double', 'integer', 'character', 'logical', 'complex']: - self.cw('void ' + fname(self.fsub('grabarraypointers_' + tt)) + '(long *i, char *p)') - self.cw('{') - self.cw(' /* Grabs pointer for the array */') - self.cw(' ' + self.pkgname + '_farrays[*i].data.s = (char *)p;') - self.cw('}') - - # --- This takes a Fortranarray object directly. - self.cw('void ' + fname(self.fsub('grabarraypointersobj')) + '(Fortranarray *farray, char *p)') - self.cw('{') - self.cw(' /* Grabs pointer for the array */') - self.cw(' farray->data.s = (char *)p;') - self.cw('}') - - # --- This routine gets the dimensions from an array. It is called from - # --- fortran and the last argument should be shape(array). - # --- This is only used for routines with the fassign attribute. - # --- Note that the dimensions are stored in C order. - self.cw('void ' + fname(self.fsub('setarraydims')) + '(Fortranarray *farray, long *dims)') - self.cw('{') - self.cw(' int id;') - self.cw(' for (id=0;idnd;id++)') - self.cw(' farray->dimensions[id] = (npy_intp)(dims[id]);') - self.cw('}') - - # --- This routine initializes the pkg object. This is separated from the init package - # --- routine so that it can be called independently. - self.cw('void init' + self.pkgname + 'object' + '(PyObject *module)') - self.cw('{') - # self.cw(' PyModule_AddObject(m, "' + self.pkgname + 'Type", ' + '(PyObject *)&ForthonType);') - self.cw(' ' + self.pkgname + 'Object=(ForthonObject *)' + 'PyObject_GC_New(ForthonObject, &ForthonType);') - # 'ForthonObject_New(NULL, NULL);') - self.cw(' ' + self.pkgname + 'Object->name = "' + self.pkgname + '";') - self.cw(' ' + self.pkgname + 'Object->typename = "' + self.pkgname + '";') - self.cw(' ' + self.pkgname + 'Object->nscalars = ' + self.pkgname + 'nscalars;') - self.cw(' ' + self.pkgname + 'Object->fscalars = ' + self.pkgname + '_fscalars;') - self.cw(' ' + self.pkgname + 'Object->narrays = ' + self.pkgname + 'narrays;') - self.cw(' ' + self.pkgname + 'Object->farrays = ' + self.pkgname + '_farrays;') - self.cw(' ' + self.pkgname + 'Object->setdims = *' + self.pkgname + 'setdims;') - self.cw(' ' + self.pkgname + 'Object->setstaticdims = *' + self.pkgname + 'setstaticdims;') - self.cw(' ' + self.pkgname + 'Object->fmethods = ' + self.pkgname + '_methods;') - self.cw(' ' + self.pkgname + 'Object->__module__ = Py_BuildValue("s", "%s");'%self.getmodulename()) - self.cw(' ' + self.pkgname + 'Object->fobj = NULL;') - self.cw(' ' + self.pkgname + 'Object->fobjdeallocate = NULL;') - self.cw(' ' + self.pkgname + 'Object->nullifycobj = NULL;') - self.cw(' ' + self.pkgname + 'Object->allocated = 0;') - self.cw(' ' + self.pkgname + 'Object->garbagecollected = 0;') - self.cw(' PyModule_AddObject(module, "' + self.pkgname + '", (PyObject *)' + self.pkgname + 'Object);') - self.cw(' ' + self.pkgname + 'declarevars(' + self.pkgname + 'Object);') - self.cw(' Forthon_BuildDicts(' + self.pkgname + 'Object);') - self.cw(' ForthonPackage_allotdims(' + self.pkgname + 'Object);') - self.cw(' ' + fname(self.fsub('passpointers')) + '();') - self.cw(' ' + fname(self.fsub('nullifypointers')) + '();') - self.cw(' ForthonPackage_staticarrays(' + self.pkgname + 'Object);') - - if self.initialgallot: - self.cw(' {') - self.cw(' PyObject *s;') - self.cw(' s = Py_BuildValue("(s)", "*");') - self.cw(' ForthonPackage_gallot((PyObject *)' + self.pkgname + 'Object, s);') - self.cw(' Py_XDECREF(s);') - self.cw(' }') - - self.cw(' {') - self.cw(' PyObject *m, *d, *f, *r;') - self.cw(' r = NULL;') - self.cw(' m = PyImport_ImportModule("Forthon");') - self.cw(' if (m != NULL) {') - self.cw(' d = PyModule_GetDict(m);') - self.cw(' if (d != NULL) {') - self.cw(' f = PyDict_GetItemString(d, "registerpackage");') - self.cw(' if (f != NULL) {') - self.cw(' r = PyObject_CallFunction(f, "Os", (PyObject *)' + self.pkgname + 'Object, "' + self.pkgname + '");') - self.cw(' }}}') - self.cw(' if (NULL == r) {') - self.cw(' if (PyErr_Occurred()) PyErr_Print();') - self.cw(' Py_FatalError("unable to find a compatible Forthon module in which to register module ' + self.pkgname + '");') - self.cw(' }') - self.cw(' Py_XDECREF(m);') - self.cw(' Py_XDECREF(r);') - self.cw(' }') - self.cw('}') - - ########################################################################### - # --- And finally, the initialization function - self.cw('static struct PyModuleDef moduledef = {') - self.cw(' PyModuleDef_HEAD_INIT,') - self.cw(' "{0}py", /* m_name */'.format(self.pkgname + self.pkgsuffix)) - self.cw(' "{0}", /* m_doc */'.format(self.pkgname)) - self.cw(' -1, /* m_size */') - self.cw(' {0}_methods, /* m_methods */'.format(self.pkgname)) - self.cw(' NULL, /* m_reload */') - self.cw(' NULL, /* m_traverse */') - self.cw(' NULL, /* m_clear */') - self.cw(' NULL, /* m_free */') - self.cw(' };') - - self.cw('PyMODINIT_FUNC') - - self.cw('PyInit_' + self.pkgname + self.pkgsuffix + 'py(void)') - self.cw('{') - - self.cw(' PyObject *m;') - if self.fcompname == 'nag': - self.cw(' int argc; char **argv;') - self.cw(' Py_GetArgcArgv(&argc, &argv);') - self.cw(' f90_init(argc, argv);') - # self.cw(' ForthonType.tp_getset = ' + self.pkgname + '_getseters;') - # self.cw(' ForthonType.tp_methods = ' + self.pkgname + '_methods;') - self.cw(' if (PyType_Ready(&ForthonType) < 0)') - self.cw(' return NULL;') - - self.cw(' m = PyModule_Create(&moduledef);') - - self.cw(' import_array();') - self.cw(' init' + self.pkgname + 'object' + '(m);') - self.cw(' ErrorObject = PyErr_NewException("' + self.pkgname + self.pkgsuffix + 'py.error", NULL, NULL);') - self.cw(' PyModule_AddObject(m, "' + self.pkgname + 'error", ErrorObject);') - self.cw(' PyModule_AddObject(m, "fcompname", ' + 'PyUnicode_FromString("' + self.fcompname + '"));') - self.cw(' PyModule_AddObject(m, "realsize", ' + 'PyLong_FromLong((long)%s' % realsize + '));') - self.cw(' if (PyErr_Occurred()) {') - self.cw(' PyErr_Print();') - self.cw(' Py_FatalError("can not initialize module ' + self.pkgname + '");') - self.cw(' }') - - if machine == 'win32': - self.cw(' /* Initialize FORTRAN on CYGWIN */') - self.cw(' initPGfortran();') - - self.cw(' return m;') - - self.cw('}') - self.cw('') - - ########################################################################### - # --- Close the c package module file - self.cfile.close() - - ########################################################################### - ########################################################################### - ########################################################################### - # --- Write out fortran initialization routines - self.setffile() - self.ffile.close() - - ########################################################################### - ########################################################################### - # --- Process any derived types - wrappergen_derivedtypes.ForthonDerivedType(self.typelist, self.pkgname, self.pkgsuffix, self.pkgbase, - self.pkgname + 'pymodule.c', - self.pkgname + '_p.F90', self.isz, - self.writemodules, self.fcompname) - ########################################################################### - ########################################################################### - - self.setffile() - - ########################################################################### - # --- Write out f90 modules, including any data statements - if self.writemodules: - self.writef90modules() - ########################################################################### - self.fw('subroutine ' + self.fsub('passpointers') + '()') - - # --- Write out the Use statements - for g in self.groups + self.hidden_groups: - self.fw(' use ' + g) - - # --- Write out calls to c routine passing down pointers to scalars - for i in range(len(self.slist)): - s = self.slist[i] - if s.dynamic: - continue - if s.derivedtype: - # --- This is only called for static instances, so deallocatable is - # --- set to false (the last argument). - self.fw(' call init' + s.type + 'py(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + ', ' + - s.name + '%cobj__, int(1, ' + self.isz + '), int(0, ' + self.isz + '))') - self.fw(' call ' + self.fsub('setderivedtypepointers') + '(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + '%cobj__)') - else: - self.fw(' call ' + self.fsub('grabscalarpointers_' + s.type) + '(int(' + repr(i) + ', ' + self.isz + '), ' + s.name + ')') - - # --- Write out calls to c routine passing down pointers to arrays. - for i in range(len(self.alist)): - a = self.alist[i] - if not a.dynamic: - self.fw(' call ' + self.fsub('grabarraypointers_' + a.type) + '(int(' + repr(i) + ', ' + self.isz + '), ' + a.name + ')') - - # --- Finish the routine - self.fw(' return') - self.fw('end') - - ########################################################################### - # --- Nullifies the pointers of all dynamic variables. This is needed - # --- since in some compilers, the associated routine returns - # --- erroneous information if the status of a pointer is undefined. - # --- Pointers must be explicitly nullified in order to get - # --- associated to return a false value. - self.fw('subroutine ' + self.fsub('nullifypointers') + '()') - # --- Write out the Use statements - for g in self.groups + self.hidden_groups: - self.fw(' use ' + g) - if self.ompactive: - self.fw('integer::tid,omp_get_thread_num') - for i in range(len(self.slist)): - s = self.slist[i] - if s.dynamic: - if self.ompactive: - self.ThreadedNullify(s) - else: - self.fw(' nullify(' + s.name + ')') - for i in range(len(self.alist)): - a = self.alist[i] - if a.dynamic: - if self.ompactive: - self.ThreadedNullify(a) - else: - self.fw(' nullify(' + a.name + ')') - - self.fw(' return') - self.fw('end') - ########################################################################### - # --- Write routine for each dynamic variable which gets the pointer from the - # --- wrapper - for s in self.slist: - if (s.dynamic or s.derivedtype) and not s.parameter: - self.fw('subroutine ' + self.fsub('setscalarpointer', s.name) + '(p__, fobj__, nullit__)') - self.fw(' use ' + s.group) - self.fw(' integer(' + self.isz + '):: fobj__') - self.fw(' integer(' + self.isz + '):: nullit__') - if s.type == 'character': - self.fw(' character(len=' + s.dims[0].high + '), target:: p__') - else: - self.fw(' ' + fvars.ftof(s.type) + ', target:: p__') - if s.dynamic: - self.fw(' if (nullit__ == 0) then') - self.fw(' ' + s.name + ' => p__') - self.fw(' else') - self.fw(' nullify(' + s.name + ')') - self.fw(' endif') - else: - self.fw(' ' + s.name + ' = p__') - self.fw(' return') - self.fw('end') - if s.dynamic: - # --- In all cases, it is not desirable to create a new instance, - # --- for example when the object is being deleted. - self.fw('subroutine ' + self.fsub('getscalarpointer', s.name) + - '(cobj__, fobj__, createnew__)') - self.fw(' use ' + s.group) - self.fw(' integer(' + self.isz + '):: cobj__, fobj__') - self.fw(' integer(4):: createnew__') - self.fw(' if (associated(' + s.name + ')) then') - self.fw(' if (' + s.name + '%cobj__ == 0 .and. createnew__ == 1) then') - self.fw(' call init' + s.type + 'py(int(-1, ' + self.isz + '), ' + s.name + ', ' + - s.name + '%cobj__, int(0, ' + self.isz + '), int(0, ' + self.isz + '))') - self.fw(' endif') - self.fw(' cobj__ = ' + s.name + '%cobj__') - self.fw(' else') - self.fw(' cobj__ = 0') - self.fw(' endif') - self.fw(' return') - self.fw('end') - - for a in self.alist: - if a.dynamic: - self.fw('subroutine ' + self.fsub('setarraypointer', a.name) + '(p__, fobj__, dims__)') - groups = self.dimsgroups(a.dimstring) - groupsprinted = [a.group] - for g in groups: - if g not in groupsprinted: - self.fw(' use ' + g) - groupsprinted.append(g) - self.fw(' use ' + a.group) - self.fw(' integer(' + self.isz + '):: fobj__') - self.fw(' integer(' + self.isz + '):: dims__(' + repr(len(a.dims)) + ')') - - if a.type == 'character': - self.fw(' character(len=' + a.dims[0].high + '), target:: p__' + - self.prefixdimsf(re.sub('[ \t\n]', '', a.dimstring))) - else: - self.fw(' ' + fvars.ftof(a.type) + ', target:: p__' + - self.prefixdimsf(re.sub('[ \t\n]', '', a.dimstring))) - if self.ompactive: - self.ThreadedAssociation(a) - else: - self.fw(' ' + a.name + ' => p__') - self.fw(' return') - self.fw('end') - if re.search('fassign', a.attr): - self.fw('subroutine ' + self.fsub('getarraypointer', a.name) + '(farray__, fobj__)') - self.fw(' use ' + a.group) - self.fw(' integer(' + self.isz + '):: farray__, fobj__') - self.fw(' integer(' + self.isz + '):: ss(%d)' % (len(a.dims))) - self.fw(' if (.not. associated(' + a.name + ')) return') - self.fw(' call ' + self.fsub('grabarraypointersobj') + '(farray__, ' + a.name + ')') - self.fw(' ss = shape(' + a.name + ')') - self.fw(' call ' + self.fsub('setarraydims') + '(farray__, ss)') - self.fw(' return') - self.fw('end') - - ########################################################################### - - # --- Close fortran file - self.ffile.close() - - scalar_pickle_file = open(self.pkgname + '.scalars', 'wb') - self.sdict['_module_name_'] = self.pkgname - pickle.dump(self.sdict, scalar_pickle_file) - pickle.dump(self.slist, scalar_pickle_file) - scalar_pickle_file.close() - - def writef90modules(self): - """Write the fortran90 modules.""" - self.setffile() - if self.fcompname == 'xlf': - save = ', save' - else: - save = '' - for g in self.groups + self.hidden_groups: - self.fw('module ' + g) - # --- Check if any variables are derived types. If so, the module - # --- containing the type must be used. - printedtypes = [] - for v in self.slist + self.alist: - if v.group == g and v.derivedtype: - if v.type not in printedtypes: - self.fw(' use ' + v.type + 'module') - printedtypes.append(v.type) - self.fw(' save') - # --- Declerations for scalars and arrays - for s in self.slist: - if s.group == g: - self.fw(' ' + fvars.ftof(s.type), noreturn=1) - if s.dynamic: - self.fw(', pointer', noreturn=1) - self.fw(save + ':: ' + s.name, noreturn=1) - if s.data: - self.fw('=' + s.data[1:-1], noreturn=1) - self.fw('') - for a in self.alist: - if a.group == g: - if a.dynamic: - if a.type == 'character': - self.fw(' character(len=' + a.dims[0].high + '), pointer' + save + ':: ' + a.name, noreturn=1) - ndims = len(a.dims) - 1 - else: - self.fw(' ' + fvars.ftof(a.type) + ', pointer' + save + ':: ' + a.name, noreturn=1) - ndims = len(a.dims) - if ndims > 0: - self.fw('(' + (ndims * ':,')[:-1] + ')', noreturn=1) - self.fw('') - else: - if a.type == 'character': - self.fw(' character(len=' + a.dims[0].high + ')' + save + ':: ' + a.name + - re.sub('[ \t\n]', '', a.dimstring)) - else: - self.fw(' ' + fvars.ftof(a.type) + save + ':: ' + - a.name + re.sub('[ \t\n]', '', a.dimstring)) - if a.data: - # --- Add line continuation marks if the data line extends over - # --- multiple lines. - dd = re.sub(r'\n', '&\n', a.data) - self.fw(' data ' + a.name + dd) - if self.ompactive: - self.DeclareThreadPrivate(g) - self.fw('end module ' + g) - if self.ompactive: - self.writef90OMPCopyHelper() - self.writef90OMPInitHelper() - self.PrintListThreadPrivateVars() - -############################################################################### -############################################################################### -############################################################################### - - -module_prefix_pat = re.compile('([a-zA-Z_][a-zA-Z0-9_]*)\.scalars') - - -def get_another_scalar_dict(file_name, other_scalar_vars): - m = module_prefix_pat.search(file_name) - if m.start() == -1: - raise SyntaxError('expect a .scalars file') - f = open(file_name, 'rb') - vars = [] - vars.append(pickle.load(f)) - vars.append(pickle.load(f)) - other_scalar_vars.append(vars) - f.close() - - -def wrappergenerator_main(argv=None, writef90modulesonly=0): - # --- Get package name from argument list - try: - pkgname = args.pkgname - varfile = args.remainder[0] - otherfortranfiles = args.remainder[1:] - except IndexError: - print(PyWrap.__doc__) - sys.exit(1) - - # --- get other command line args and default actions - pkgsuffix = args.pkgsuffix - pkgbase = args.pkgbase - initialgallot = args.initialgallot - fcompname = args.fcomp - writemodules = args.writemodules - timeroutines = args.timeroutines - ompactive = args.omp - otherinterfacefiles = args.othermacros - ompdebug = args.ompdebug - - # --- a list of scalar dictionaries from other modules. - other_scalar_vars = [] - for d in args.dependencies: - get_another_scalar_dict(d, other_scalar_vars) - - cc = PyWrap(varfile, pkgname, pkgsuffix, pkgbase, initialgallot, writemodules, - otherinterfacefiles, other_scalar_vars, timeroutines, - otherfortranfiles, fcompname, ompactive, ompdebug) - if writef90modulesonly: - cc.writef90modules() - else: - cc.createmodulefile() - - # --- forthonf2c.h is imported by Forthon.h, and defines macros needed for strings. - writeforthonf2c() - - -# --- This might make some of the write statements cleaner. -# --- From http://aspn.activestate.com/ASPN/Python/Cookbook/ -class PrintEval: - - def __init__(self, globals=None, locals=None): - self.globals = globals or {} - self.locals = locals or None - - def __getitem__(self, key): - if self.locals is None: - self.locals = sys._getframe(1).f_locals - key = key % self - return eval(key, self.globals, self.locals) - -if __name__ == '__main__': - wrappergenerator_main(sys.argv[1:])