I have run into a problem with using STL containers (in this case std::vector<double> ) as member of a c++ class.  If I provide (manually) a setter function, all is well, and in python I can pass a list (as I would like to do) as something like Comp.set_P([1,2,3]).  But If I try to set the member using Comp.P = [1,2,3] (where Comp is an instance of CompressorClass in Python), no luck and I get an error it not being a std::vector<double> (but of course it isn't).  Here's the error::

  File "setup.py", line 46, in <module>
    Comp.P = [1.0,2.0,3.0]
  File "src\Compressor.py", line 175, in <lambda>
    __setattr__ = lambda self, name, value: _swig_setattr(self, CompressorClass, name, value)
  File "src\Compressor.py", line 49, in _swig_setattr
    return _swig_setattr_nondynamic(self,class_type,name,value,0)
  File "src\Compressor.py", line 42, in _swig_setattr_nondynamic
    if method: return method(self,value)
TypeError: in method 'CompressorClass_P_set', argument 2 of type 'std::vector< double,std::allocator< double > > *'

Shouldn't the setter function handle this properly?  I think this is a bug.

Here is my header::


#ifndef COMPRESSOR_H
#define COMPRESSOR_H

#include "CPState.h"
#include "ACHPcore.h"

class CompressorClass// : public ACHPComponentClass
{
public:
    CompressorClass(){};
    ~CompressorClass(){};
    double Tsat_s_K, Tsat_d_K, DT_sh_K, Tsat_s, Tsat_d, power_map, Vdot_ratio, P1, P2, F, T1_actual, v_map, v_actual, mdot, fp, eta_oi, Wdot, CycleEnergyIn, Vdot_pumped;
    std::vector<double> P, M;

    CoolPropStateClass inlet_state, outlet_state;

    void set_P(std::vector<double> P){this->P = P;};
    void speed_test(unsigned long long N);
    void calculate();
    void test();
    std::vector<OutputEntryClass> OutputList();
};

#endif

and my interface file::

%module Compressor

// This stuff will get included verbatim in CoolProp_wrap.cpp
%{
#include "ACHPcore.h"
#include "Compressor.h"
%}

// This allows for the use of STL vectors
%include "std_vector.i"

namespace std {
   %template(vectord) vector<double>;
};

// This is where the parsing actually happens
%include "ACHPcore.h"
%include "Compressor.h"