writing a generic method

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • fj

    #1

    writing a generic method

    I am new in Python programming. I try to connect to Python various
    libraries written either in C of in Fortran. The job is not really hard
    but I meet a trouble when trying to build up a generic routine like in
    C++ or F90, i.e. a single routine name for various uses.

    Here is an example with a Fortran 77 library:

    static PyObject* mdb_get(PyObjec t *self, PyObject *args){
    const char *cname,*cprop;
    int lname,lprop;
    double x,z;
    int ix;
    if(PyArg_ParseT uple(args,"s#s# d",&cname,&lnam e,&cprop,&lprop ,&x))
    mdbgetd_(cname, cprop,&x,&z,lna me,lprop);
    else
    if(PyArg_ParseT uple(args,"s#s# i",&cname,&lnam e,&cprop,&lprop ,&ix))
    mdbgeti_(cname, cprop,&ix,&z,ln ame,lprop);
    else
    return NULL;
    return Py_BuildValue(" d",z);
    }

    This method should be used as a single Python function mdb::get. It
    should have two possible forms:
    mdb.get("H2O"," h_l(T)",300.)
    mdb.get("H2O"," atom",2)

    As you see, the third argument should be either a real or an integer.
    Unfortunately, the result depends on the order of instructions because
    Python automatically converts
    integer into real and vice versa. For instance, the intructions above
    are interpreted as follows :
    mdb.get("H2O"," h_t(T)",300.) (correct)
    mdb.get("H2O"," atom",2.) (wrong because 2 and 2. are not
    equivalent in my case)

    So my question is : Is it possible to deactivate this automatic
    conversion ?
    Presently, the only solution I found was to write two functions
    (mdb.getr and mdb.geti)

Working...