Changeset 0a9686d in sasview for sansmodels


Ignore:
Timestamp:
Jun 25, 2012 9:07:41 AM (13 years ago)
Author:
Kieran Campbell <kieranrcampbell@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
33c671e
Parents:
f8be87d
Message:

Updated python wrapping to automatically generate c_models.cpp

Location:
sansmodels/src
Files:
2 edited
1 moved

Legend:

Unmodified
Added
Removed
  • sansmodels/src/c_models/c_models.cpp.template

    r3764dbd7 r0a9686d  
    1010#include "arrayobject.h" 
    1111 
     12// [TAG_1] 
    1213 
    13 void addCCylinderModel(PyObject *module); 
    14 void addCBarBellModel(PyObject *module); 
    15 void addCCappedCylinderModel(PyObject *module); 
    16 void addCTriaxialEllipsoidModel(PyObject *module); 
    17 void addCParallelepipedModel(PyObject *module); 
    18 void addCCSParallelepipedModel(PyObject *module); 
    19 void addCSphereModel(PyObject *module); 
    20 void addCSphereSLDModel(PyObject *module); 
    21 void addCOnionModel(PyObject *module); 
    22 void addCLinearPearlsModel(PyObject *module); 
    23 void addCPearlNecklaceModel(PyObject *module); 
    24 void addCReflModel(PyObject *module); 
    25 void addCReflAdvModel(PyObject *module); 
    26 void addCFuzzySphereModel(PyObject *module); 
    27 void addCRaspBerryModel(PyObject *module); 
    28 void addCHardsphereStructure(PyObject *module); 
    29 void addCStickyHSStructure(PyObject *module); 
    30 void addCSCCrystalModel(PyObject *module); 
    31 void addCFCCrystalModel(PyObject *module); 
    32 void addCBCCrystalModel(PyObject *module); 
    33 void addCSquareWellStructure(PyObject *module); 
    34 void addCHayterMSAStructure(PyObject *module); 
    35 void addCCoreShellModel(PyObject *module); 
    36 void addCCore2ndMomentModel(PyObject *module); 
    37 void addCCoreFourShellModel(PyObject *module); 
    38 void addCCoreShellCylinderModel(PyObject *module); 
    39 void addCCoreShellBicelleModel(PyObject *module); 
    40 void addCEllipsoidModel(PyObject *module); 
    41 void addCEllipticalCylinderModel(PyObject *module); 
    42 void addCTriaxialEllipsoidModel(PyObject *module); 
    43 void addCFlexibleCylinderModel(PyObject *module); 
    44 void addCFlexCylEllipXModel(PyObject *module); 
    45 void addCStackedDisksModel(PyObject *module); 
    46 void addCLamellarPSModel(PyObject *module); 
    47 void addCLamellarPSHGModel(PyObject *module); 
    48 void addCLamellarPCrystalModel(PyObject *module); 
    49 void addCCoreShellEllipsoidModel(PyObject *module); 
    50 void addCDiamEllipFunc(PyObject *module); 
    51 void addCDiamCylFunc(PyObject *module); 
    52 void addCSLDCalFunc(PyObject *module); 
    53  
    54 void addCLamellarModel(PyObject *module); 
    55 void addCLamellarFFHGModel(PyObject *module); 
    56 void addCHollowCylinderModel(PyObject *module); 
    57 void addCMultiShellModel(PyObject *module); 
    58 void addCVesicleModel(PyObject *module); 
    59 void addCBinaryHSModel(PyObject *module); 
    60 void addCRPAModel(PyObject *module); 
    61 void addCFractalModel(PyObject *module); 
    62 void addCMassSurfaceFractal(PyObject *module); 
    63 void addCSurfaceFractalModel(PyObject *module); 
    64 void addCMassFractalModel(PyObject *module); 
    65 void addCPoly_GaussCoil(PyObject *module); 
    6614 
    6715 
     
    6917  void addDisperser(PyObject *module); 
    7018} 
    71 void addCLorentzian(PyObject *module); 
    72 void addCSchulz(PyObject *module); 
    73 void addCGaussian(PyObject *module); 
    74 void addCLogNormal(PyObject *module); 
    7519 
    7620/** 
     
    250194  import_array(); 
    251195 
    252   addCCylinderModel(m); 
    253   addCBarBellModel(m); 
    254   addCCappedCylinderModel(m); 
    255   addCParallelepipedModel(m); 
    256   addCCSParallelepipedModel(m); 
    257   addCCoreShellCylinderModel(m); 
    258   addCCoreShellBicelleModel(m); 
    259   addCCoreShellModel(m); 
    260   addCCoreFourShellModel(m); 
    261   addCCore2ndMomentModel(m); 
    262   addCEllipsoidModel(m); 
    263   addCSphereModel(m); 
    264   addCSphereSLDModel(m); 
    265   addCOnionModel(m); 
    266   addCReflModel(m); 
    267   addCReflAdvModel(m); 
    268   addCFuzzySphereModel(m); 
    269   addCRaspBerryModel(m); 
    270   addCHardsphereStructure(m); 
    271   addCStickyHSStructure(m); 
    272   addCSCCrystalModel(m); 
    273   addCFCCrystalModel(m); 
    274   addCBCCrystalModel(m); 
    275   addCSquareWellStructure(m); 
    276   addCHayterMSAStructure(m); 
    277   addCEllipticalCylinderModel(m); 
    278   addCTriaxialEllipsoidModel(m); 
    279   addCFlexibleCylinderModel(m); 
    280   addCFlexCylEllipXModel(m); 
    281   addCStackedDisksModel(m); 
    282   addCLamellarPSModel(m); 
    283   addCLamellarPSHGModel(m); 
    284   addCLamellarPCrystalModel(m); 
    285   addCCoreShellEllipsoidModel(m); 
    286   addCDiamEllipFunc(m); 
    287   addCDiamCylFunc(m); 
    288   addCSLDCalFunc(m); 
    289   addCLinearPearlsModel(m); 
    290   addCPearlNecklaceModel(m); 
    291   addCLamellarModel(m); 
    292   addCLamellarFFHGModel(m); 
    293   addCHollowCylinderModel(m); 
    294   addCMultiShellModel(m); 
    295   addCBinaryHSModel(m); 
    296   addDisperser(m); 
    297   addCGaussian(m); 
    298   addCSchulz(m); 
    299   addCLogNormal(m); 
    300   addCLorentzian(m); 
    301   addCVesicleModel(m); 
    302   addCPoly_GaussCoil(m); 
    303   addCRPAModel(m); 
    304   addCFractalModel(m); 
    305   addCMassSurfaceFractal(m); 
    306   addCMassFractalModel(m); 
    307   addCSurfaceFractalModel(m); 
     196  // [TAG_2] 
     197 
    308198} 
  • sansmodels/src/python_wrapper/WrapperGenerator.py

    r0ea247e r0a9686d  
    9393        self.output_dir = output_dir 
    9494        self.c_wrapper_dir = c_wrapper_dir 
     95 
    9596         
    9697         
     
    201202                     
    202203                 
    203                  
     204      
    204205        for line in lines: 
    205206             
     
    209210                try: 
    210211                    index = line.index(key) 
    211                     #toks = string.split( line[index:], "=" ) 
    212212                    toks = line[index:].split("=" ) 
    213213                    self.pythonClass = toks[1].lstrip().rstrip() 
     214 
    214215                except: 
    215216                    raise ValueError, "Could not parse file %s" % self.file 
     
    287288                except: 
    288289                    raise ValueError, "Could not parse file %s" % self.file 
    289                 
    290          
    291                  
     290 
    292291    def write_c_wrapper(self): 
    293292        """ Writes the C file to create the python extension class  
     
    495494        return newline 
    496495         
    497          
     496    def getModelName(self): 
     497        return self.pythonClass 
     498         
     499 
     500 
    498501# main 
    499502if __name__ == '__main__': 
  • sansmodels/src/python_wrapper/wrapping.py

    r101065a r0a9686d  
    66def generate_wrappers(header_dir, output_dir='.', c_wrapper_dir='.'): 
    77    nModels=0 
     8    model_list = list() 
     9 
    810    for item in os.listdir(header_dir): 
    911        toks = os.path.splitext(os.path.basename(item)) 
     
    1719            app.write_c_wrapper() 
    1820            app.write_python_wrapper() 
    19             #print app 
     21            model_list.append(app.getModelName()) 
     22    write_c_models(model_list) 
    2023    print "Total number of model  wrappers created is %s" % nModels 
     24 
     25def write_c_models(model_list): 
     26    # simultaneously generates 'sansmodels/installed_models.txt' 
     27    # and 'sansmodels/src/c_models/c_models.cpp' 
     28    model_list_file = open(os.path.join("sansmodels","installed_models.txt"),"w") 
     29    for model in model_list: 
     30        model_list_file.write(model + "\n") 
     31 
     32    model_list_file.close() 
     33     
     34 
     35    template_file = open(os.path.join("sansmodels","src","c_models","c_models.cpp.template"),"r") 
     36    write_file = open(os.path.join("sansmodels","src","c_models","c_models.cpp"),"w") 
     37    buf = template_file.read() 
     38    lines = buf.split('\n') 
     39     
     40    tag1 = "[TAG_1]" 
     41    tag2 = "[TAG_2]" 
     42     
     43    for line in lines: 
     44         
     45        if line.count(tag1) > 0: 
     46            write_file.write("\n // adding generated code \n") 
     47            for pyclass in model_list: 
     48                write_file.write("void addC" + pyclass 
     49                                 + "(PyObject *module); \n") 
     50            write_file.write(" // end generated code \n") 
     51                 
     52 
     53        elif line.count(tag2) > 0: 
     54            write_file.write("\n // adding generated code \n") 
     55 
     56            for pyclass in model_list: 
     57                write_file.write("addC" + pyclass + "(m); \n") 
     58 
     59            write_file.write("addDisperser(m); \n") 
     60            write_file.write("\n // end generated code \n") 
     61                 
     62                 
     63        else: 
     64            write_file.write(line + "\n") 
     65 
     66 
    2167 
    2268if __name__ == '__main__': 
     
    2571 
    2672 
     73 
     74 
Note: See TracChangeset for help on using the changeset viewer.