def pycode(self): global _in_pro, _in_function pars = [] keys = [] plist = self.subroutine_body.parameter_list if plist: for p in plist.get_items(): if p.EXTRA: # FIXME: implement this! error.conversion_error("can't handle _EXTRA yet", self.lineno) return '' if p.EQUALS: keys.append( (pycode(p.IDENTIFIER[0]), pycode(p.IDENTIFIER[1]))) else: pars.append(pycode(p.IDENTIFIER)) name = str(self.subroutine_body.IDENTIFIER) fmap = map.get_subroutine_map(name) if not fmap: inpars = range(1, len(pars) + 1) outpars = inpars inkeys = [k[0] for k in keys] outkeys = inkeys if self.PRO: _in_pro = True if not fmap: fmap = map.map_pro(name, inpars=inpars, outpars=outpars, inkeys=inkeys, outkeys=outkeys) else: _in_function = True if not fmap: fmap = map.map_func(name, inpars=inpars, inkeys=inkeys) try: header, body = fmap.pydef(pars, keys) except map.Error, e: error.mapping_error(str(e), self.lineno) header, body = '', ''
#-------------------------------------------------------------- #-------------------------------- # Erode2 routines in erode.pro #-------------------------------- ## map_func('Flow_Codes_Old', inpars=[1], noptional=0, ## inkeys=['ARC'], outkeys=['MAP','INCS','OPPS']) map_func('Flow_Codes', inpars=[], inkeys=['ARC']) map_func('Flow_Code_Opps', inpars=[], inkeys=['ARC']) map_func('Flow_Neighbor_Incs', inpars=[1]) map_func('Flow_Code_Map', inpars=[1], inkeys=['ARC']) ## map_func('Parent_IDs', inpars=[1], noptional=0, ## outkeys=['NON_PARENTS']) map_func('Parent_IDs', inpars=[1], noptional=0) map_func('Non_Parent_IDs', inpars=[1], noptional=0) map_pro('Get_Flux_Indices', inpars=[1], outpars=range(2, 20), noptional=2) map_pro('Update_Flow_Widths', inpars=range(1, 23), outpars=[1], noptional=0, inkeys=['REPORT']) map_pro('Update_Flow_Lengths', inpars=range(1, 23), outpars=[1], noptional=0, inkeys=['REPORT']) map_func('Filled_DEM', inpars=range(1, 4), noptional=0, inkeys=['SILENT']) map_func('Flow_Grid', inpars=range(1, 8), noptional=0, inkeys=[
################################################################################ # # IDL function and procedure maps, grouped by type # ################################################################################ #--------------------------------------- # Time-related routines (import time) #--------------------------------------- map_func('SYSTIME', inpars=[1], callfunc=(lambda i, o: 'time.time()'), extracode='import time') map_pro('WAIT', inpars=[1], callfunc=(lambda i, o: 'time.sleep(%s)' % i[0]), extracode='import time') #---------------------------- # Pointer-related routines #---------------------------- # map_pro('PTRARR', ### Included with Array Init routines below. map_pro('PTR_FREE', inpars=range(1, 33), noptional=31, callfunc=(lambda i, o: idl_ptr_free_callfunc(i, o))) map_func('PTR_NEW', inpars=[1], noptional=1, inkeys=['ALLOCATE_HEAP', 'NO_COPY'], callfunc=(lambda i, o: idl_ptr_new_callfunc(i, o)))
# Variable maps # ################################################################################ # pi is in Numeric/numarray map_var('!DPI', 'pi') map_var('!RADEG', '_radeg', '_radeg = 180.0 / pi') ################################################################################ # # Procedure maps # ################################################################################ map_pro('ON_ERROR', inpars=[1], callfunc=(lambda i, o: '# ON_ERROR, %s' % i[0])) map_pro('PRINT', inpars=range(1, 101), noptional=99, inkeys=['FORMAT'], callfunc=(lambda i, o: 'print ' + ', '.join(i))) ################################################################################ # # Function maps # ################################################################################ def arrgen(typename):
################################################################################ ################################################################################ # # User-defined IDL function and procedure maps # ################################################################################ from map import map_var, map_pro, map_func import idl_maps ############ #------------------------------------- # TopoFlow routines in utils_TF.pro #------------------------------------- map_func('TF_String', inpars=[1], noptional=0, inkeys=['FORMAT']) map_pro('TF_Print', inpars=[1], noptional=0, outpars=[]) map_pro('Clear_Log_Window', inpars=[], outpars=[]) map_pro('Count_Lines', inpars=[2], outpars=[1], inkeys=['SILENT']) map_func('Current_Directory', inpars=[]) map_func('Resize', inpars=range(1, 6), noptional=2, inkeys=['SAMP_TYPE']) map_pro('Make_Savefile', inpars=[], outpars=[]) map_pro('Trace_Error', inpars=[1, 2], outpars=[3], inkeys=['ABORT']) map_pro('Check_Error_Status', inpars=[1], outpars=[2], inkeys=['EVENT_ID', 'TRACEBACK', 'SILENT']) map_pro('No_Catch', inpars=[], outpars=[1]) map_pro('Read_RTI_Value', inpars=[2, 3], outpars=[1], inkeys=['UPCASE'],
##map_var('vars', '???') ##map_var('repr', '???') # These don't work, probably due to parentheses. See below. # map_var('path_sep()', 'os.sep', 'import os') # map_var('systime(1)', 'time()', 'import time') ################################################################################ # # Procedure maps # ################################################################################ map_pro('CD', inpars=[1], callfunc=(lambda i, o: 'os.chdir(%s)' % i[0]), extracode='import os') map_pro('ON_ERROR', inpars=[1], callfunc=(lambda i, o: '# ON_ERROR, %s' % i[0])) map_pro('PRINT', inpars=range(1, 101), noptional=99, inkeys=['FORMAT'], callfunc=(lambda i, o: 'print ' + ', '.join(i))) map_pro('WAIT', inpars=[1], callfunc=(lambda i, o: 'time.sleep(%s)' % i[0]), extracode='import time') #--------------------------------------------------