allow adding and viewing sequences to an analysis from python
[mussa.git] / py / mussa.cpp
index f38063e2c3ed7a9f5e49f38e109b25ae60b19cb1..a203c7a709706c2421797f76db4f3988109f440e 100644 (file)
@@ -2,11 +2,29 @@
 namespace py = boost::python;
 
 #include "alg/mussa.hpp"
+#include "alg/sequence.hpp"
+#include "stl_container_adapter.hpp"
 
 void export_mussa()
 {
   void (Mussa::*load_mupa_string)(std::string) = &Mussa::load_mupa_file;
+  void (Mussa::*append_sequence_ref)(const Sequence&) = &Mussa::append_sequence;
+  void (Mussa::*append_sequence_ptr)(const boost::shared_ptr<Sequence>) = &Mussa::append_sequence;
 
+  py::class_<Mussa::vector_sequence_type>("Sequences")
+    .def("__len__", &Mussa::vector_sequence_type::size, "return length of sequences")
+    .def("__contains__", &std_item<Mussa::vector_sequence_type>::in)
+    .def("__iter__", py::iterator<Mussa::vector_sequence_type>())
+    .def("clear", &Mussa::vector_sequence_type::clear, "remove all the sequences")
+    .def("append", &std_item<Mussa::vector_sequence_type>::add,
+        py::with_custodian_and_ward<1,2>()) // to let container keep value
+    .def("__getitem__", &std_item<Mussa::vector_sequence_type>::get,
+        py::return_value_policy<py::copy_non_const_reference>())
+    .def("__setitem__", &std_item<Mussa::vector_sequence_type>::set,
+        py::with_custodian_and_ward<1,2>()) // to let container keep value
+    .def("__delitem__", &std_item<Mussa::vector_sequence_type>::del)
+  ;
   py::class_<Mussa>("Mussa")
     .def("save", &Mussa::save)
     .def("load", &Mussa::load, "Load previous run analysis")
@@ -25,8 +43,8 @@ void export_mussa()
     .add_property("analysisModeName", &Mussa::get_analysis_mode_name)
     .def("analyze", &Mussa::analyze, "Run the analysis")
     .def("paths", &Mussa::paths, py::return_internal_reference<>())
-    //.def("sequences", &Mussa::sequences)
-    //.def("addSequence", &Mussa::append_sequence)  
+    .def("sequences", &Mussa::sequences, py::return_internal_reference<>())
+    .def("add_sequence", append_sequence_ref)  
   ;
 
   py::enum_<Mussa::analysis_modes>("analysis_modes")