File: py_tableau.cc

package info (click to toggle)
cadabra2 2.4.3.2-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 78,732 kB
  • sloc: ansic: 133,450; cpp: 92,064; python: 1,530; javascript: 203; sh: 184; xml: 182; objc: 53; makefile: 51
file content (49 lines) | stat: -rw-r--r-- 1,522 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <sstream>
#include "py_tableau.hh"
#include "../YoungTab.hh"
#include "../properties/TableauBase.hh"
namespace cadabra {

	namespace py = pybind11;
	using tab_t = TableauBase::tab_t;

	std::string tab_str(const tab_t& tab)
	{
		std::stringstream ss;
		ss << "( ";
		for (size_t row = 0; row < tab.number_of_rows(); ++row) {
			ss << "(";
			auto beg = tab.begin_row(row), next = std::next(tab.begin_row(row)), end = tab.end_row(row);
			while (next != end) {
				ss << *beg << " ";
				++beg, ++next;
			}
			ss << *beg << ") ";
		}
		ss << ")";
		return ss.str();
	}

	void init_tableau(pybind11::module& m)
	{
		auto py_tab = py::class_<tab_t>(m, "TableauObserver")
		              .def("number_of_rows", &tab_t::number_of_rows)
		              .def("row_size", &tab_t::row_size)
		              .def("find", &tab_t::find)
		              .def("__getitem__", &tab_t::operator[])
		              .def("compare_without_multiplicity", &tab_t::compare_without_multiplicity)
		              .def("has_nullifying_trace", &tab_t::has_nullifying_trace)
		              .def("nonstandard_loc", &tab_t::nonstandard_loc)
		.def("__iter__", [](const tab_t & tab) {
			return py::make_iterator(tab.begin(), tab.end());
		})
		.def("row", [](const tab_t & tab, unsigned int row) {
			return py::make_iterator(tab.begin_row(row), tab.end_row(row));
		})
		.def("column", [](const tab_t & tab, unsigned int col) {
			return py::make_iterator(tab.begin_column(col), tab.end_column(col));
		})
		.def("__str__", &tab_str);
	}

}