Changeset 11972


Ignore:
Timestamp:
04/12/12 21:14:19 (13 years ago)
Author:
Eric.Larour
Message:

Reorganized Matlab and Python io.
Also added FetchData and WriteData routines in the Python io layer, essential to implementing the Python
wrappers. These rely on the NumPY C API. We let go of the boost Python bindings, which were conflicting
with the Numpy C API. Go back to the roots!

Location:
issm/trunk-jpl/src/c
Files:
4 added
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/io/Matlab/matlabio.h

    r11934 r11972  
    5858OptionStruct*   OptionStructParse( char* name, const mxArray* prhs[]);
    5959OptionCell*     OptionCellParse( char* name, const mxArray* prhs[]);
     60
     61mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
     62int CheckNumMatlabArguments(int nlhs,int NLHS, int nrhs,int NRHS, const char* THISFUNCTION, void (*function)( void ));
     63
    6064#endif
    6165#endif  /* _IO_H_ */
  • issm/trunk-jpl/src/c/io/Python/FetchPythonData.cpp

    r11934 r11972  
    99#endif
    1010
     11#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
     12#define NO_IMPORT
     13
     14#include "../../toolkits/toolkits.h"
     15#include "../../include/include.h"
    1116#include "../../shared/shared.h"
    12 #include "../../include/include.h"
    1317
    1418#if defined(_HAVE_PYTHON_) && defined(_SERIAL_)
    15 /*FUNCTION FetchData(char** pstring,char* string){{{1*/
    16 void FetchData(char** pstring,char* string){
     19/*FUNCTION FetchData(char** pstring,PyObject* py_unicode){{{1*/
     20void FetchData(char** pstring,PyObject* py_unicode){
    1721
    18         /*Copy string into string: */
    19         char* outstring=NULL;
     22        PyObject* py_bytes;
     23        char* string=NULL;
    2024
    21         outstring=(char*)xmalloc((strlen(string)+1)*sizeof(char));
    22         strcpy(outstring,string);
     25       
     26        /*convert to bytes format: */
     27        PyUnicode_FSConverter(py_unicode,&py_bytes);
    2328
    24         *pstring=outstring;
     29        /*convert from bytes to string: */
     30        string=PyBytes_AS_STRING(py_bytes);
     31       
     32        *pstring=string;
    2533}
    26 /*FUNCTION FetchData(double* pscalar,double scale){{{1*/
    27 void FetchData(double* pscalar,double scalar){
     34/*FUNCTION FetchData(double* pscalar,PyObject* py_float){{{1*/
     35void FetchData(double* pscalar,PyObject* py_float){
    2836
    29         /*simple copy: */
     37        double scalar;
     38
     39        /*return internal value: */
     40        scalar=PyFloat_AsDouble(py_float);
     41
     42        /*output: */
    3043        *pscalar=scalar;
    3144}
    3245/*}}}*/
    33 /*FUNCTION FetchData(int* pinteger,int integer){{{1*/
    34 void FetchData(int* pinteger, int integer){
     46/*FUNCTION FetchData(int* pinteger,PyObject* py_long){{{1*/
     47void FetchData(int* pinteger, PyObject* py_long){
    3548
    36         /*simple copy: */
     49        int integer;
     50
     51        /*return internal value: */
     52        integer=(int)PyLong_AsLong(py_long);
     53
     54        /*output: */
    3755        *pinteger=integer;
    3856}
    3957/*}}}*/
    40 /*FUNCTION FetchData(bool* pboolean,bool boolean){{{1*/
    41 void FetchData(bool* pboolean,bool boolean){
     58/*FUNCTION FetchData(bool* pboolean,PyObject* py_boolean){{{1*/
     59void FetchData(bool* pboolean,PyObject* py_boolean){
     60
     61        bool boolean;
     62       
     63        /*check this is indeed a subtype of long type: */
     64        if(!PyBool_Check(py_boolean))_error_("expecting a boolean in input!");
     65
     66        /*extract boolean: */
     67        boolean=(bool)PyLong_AsLong(py_boolean);
    4268
    4369        /*simple copy: */
  • issm/trunk-jpl/src/c/io/Python/WritePythonData.cpp

    r11934 r11972  
    99#endif
    1010
     11#if defined(_HAVE_PYTHON_) && defined(_SERIAL_)
     12
     13#define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
     14#define NO_IMPORT
     15
     16#include "../../toolkits/toolkits.h"
    1117#include "../../include/include.h"
     18#include "../../modules/modules.h"
     19#include "../../Container/Container.h"
    1220#include "../../shared/shared.h"
     21#include "../../io/io.h"
     22#include "../../EnumDefinitions/EnumDefinitions.h"
    1323
    14 #if defined(_HAVE_MATLAB_) && defined(_SERIAL_)
    15 #include <mex.h>
     24
     25/*FUNCTION WriteData(PyObject* py_tuple,int index,char* string){{{1*/
     26void WriteData(PyObject* py_tuple, int index, char* string){
     27       
     28        PyTuple_SetItem(py_tuple, index, PyUnicode_FromString(string));
     29
     30}
     31/*}}}*/
     32/*FUNCTION WriteData(PyObject* tuple,int index,Matrix* matrix){{{1*/
     33void WriteData(PyObject* tuple,int index,Matrix* matrix){
     34       
     35        int M,N;
     36        double* buffer=NULL;
     37        npy_intp dims[2]={0,0};
     38        PyObject* array=NULL;
     39       
     40        buffer=matrix->ToSerial();
     41        matrix->GetSize(&M,&N);
     42        dims[0]=(npy_intp)M;
     43        dims[1]=(npy_intp)N;
     44        array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,buffer);
     45       
     46        PyTuple_SetItem(tuple, index, array);
     47
     48
     49}
     50/*FUNCTION WriteData(PyObject* py_tuple,int index,Vector* vector){{{1*/
     51void WriteData(PyObject* tuple,int index,Vector* vector){
     52       
     53        int M;
     54        double* buffer=NULL;
     55        npy_intp dim=10;
     56        PyObject* array=NULL;
     57       
     58        buffer=vector->ToMPISerial();
     59        vector->GetSize(&M);
     60        dim=(npy_intp)M;
     61        array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
     62       
     63        PyTuple_SetItem(tuple, index, array);
     64
     65
     66}
     67/*}}}*/
    1668
    1769#endif
  • issm/trunk-jpl/src/c/io/Python/pythonio.h

    r11934 r11972  
    2323
    2424//void WriteData(mxArray** pdataref,DataSet* dataset);
    25 //void WriteData(mxArray** pdataref,Matrix* matrix);
    2625//void WriteData(mxArray** pdataref,double* matrix, int M,int N);
    2726//void WriteData(mxArray** pdataref,int*    matrix, int M,int N);
    28 //void WriteData(mxArray** pdataref,Vector* vector);
    2927//void WriteData(mxArray** pdataref,double* vector, int M);
    3028//void WriteData(mxArray** pdataref,int integer);
    3129//void WriteData(mxArray** pdataref,bool boolean);
    3230//void WriteData(mxArray** pdataref,double scalar);
    33 //void WriteData(mxArray** pdataref,char* string);
    3431//void WriteData(DataHandle* pdataref,Parameters* parameters);
     32void WriteData(PyObject* py_tuple, int index, char* string);
     33void WriteData(PyObject* py_tuple, int index, Matrix* matrix);
     34void WriteData(PyObject* py_tuple, int index, Vector* vector);
     35
    3536
    3637//void FetchData(DataSet** pdataset,const mxArray* dataref);
     
    4849//void FetchData(char** pmatrix,int* pnumel,int* pndims,int** psize,const mxArray* dataref);
    4950//void FetchData(Parameters** pparameters, DataHandle dataref);
    50 void FetchData(char** pstring,char* string);
    51 void FetchData(double* pscalar,double scalar);
    52 void FetchData(int* pinteger,int integer);
    53 void FetchData(bool* pbool,bool boolean);
     51void FetchData(char** pstring,PyObject* py_unicode);
     52void FetchData(double* pscalar,PyObject* py_float);
     53void FetchData(int* pinteger,PyObject* py_long);
     54void FetchData(bool* pbool,PyObject* py_boolean);
     55
     56int CheckNumPythonArguments(PyObject* inputs,int NRHS, void (*function)( void ));
     57
    5458#endif
    5559
Note: See TracChangeset for help on using the changeset viewer.