EvolvingObjects
|
00001 /* 00002 PyEO 00003 00004 Copyright (C) 2003 Maarten Keijzer 00005 00006 This program is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 2 of the License, or 00009 (at your option) any later version. 00010 00011 This program is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 */ 00020 00021 #include <eoReduce.h> 00022 00023 #include "PyEO.h" 00024 00025 using namespace boost::python; 00026 00027 // unfortunately have to define it specially 00028 class eoReduceWrapper : public eoReduce<PyEO> 00029 { 00030 public: 00031 PyObject* self; 00032 eoReduceWrapper(PyObject* s) : self(s) {} 00033 void operator()(eoPop<PyEO>& pop, unsigned i) 00034 { 00035 boost::python::call_method<void>(self, "__call__", pop, i ); 00036 } 00037 }; 00038 00039 void reduce() 00040 { 00041 // ref trick in def_abstract_functor does not work for unsigned int :-( 00042 class_<eoReduce<PyEO>, eoReduceWrapper, boost::noncopyable>("eoReduce", init<>()) 00043 .def("__call__", &eoReduceWrapper::operator()); 00044 00045 class_<eoTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoTruncate", init<>() ) 00046 .def("__call__", &eoReduce<PyEO>::operator()) 00047 ; 00048 class_<eoRandomReduce<PyEO>, bases<eoReduce<PyEO> > >("eoRandomReduce") 00049 .def("__call__", &eoReduce<PyEO>::operator()) 00050 ; 00051 class_<eoEPReduce<PyEO>, bases<eoReduce<PyEO> > >("eoEPReduce", init<unsigned>()) 00052 .def("__call__", &eoReduce<PyEO>::operator()) 00053 ; 00054 class_<eoLinearTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoLinearTruncate") 00055 .def("__call__", &eoReduce<PyEO>::operator()) 00056 ; 00057 class_<eoDetTournamentTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoDetTournamentTruncate", init<unsigned>()) 00058 .def("__call__", &eoReduce<PyEO>::operator()) 00059 ; 00060 class_<eoStochTournamentTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoStochTournamentTruncate", init<double>()) 00061 .def("__call__", &eoReduce<PyEO>::operator()) 00062 ; 00063 }