From: Goutham <gou...@gm...> - 2010-04-17 20:26:36
|
Hey All, I am trying to implement a python wrapper for my code written in C++. I am having trouble with the std::vector data types, as they get converted to tuple. I was wondering if you can help me out a bit. I have two c++ functions: std::vector<int> selectResidues(std::vector<int> selection) void fixAtoms(std::vector<int> selection) To access std::vector<int> in the python interface, I use in the *.i swig wrapper file: %include "std_vector.i" // for handling type conversions %include "typemaps.i" // map IndexList namespace std { %template(IndexList) vector< int> ; } typedef std::vector<int> IndexList; Here is a sample python code checking this function : res1 = simkit.IndexList() res1.push_back(2); res1.push_back(3); res1.push_back(4); res1.push_back(5); sel1 = sel.selectResidues(res1) sel2 = simkit.IndexList(sel.selectResidues(res1)) md.fixAtoms(sel2) # works fine; md is the object from SimSystem class in simkit md.fixAtoms(sel1) # gives error The error i get from this is: def fixAtoms(*args): return _SimKit.SimSystem_fixAtoms(*args) TypeError: in method 'SimSystem_fixAtoms', argument 2 of type 'IndexList &' Basically when I do type(sel1) and type(sel2), I get, sel2 = <class 'SimKit.IndexList'> sel1 = <type 'tuple'> I am trying to figure out how to make selectResidues() function return of data type SimKit.IndexList instead of casting to the type tuple. Alternately, even if I can figure out fixAtoms() to accept tuple/list apart from IndexList as arguement, that will work. Any suggestions on how I can do this? Thanks Goutham |