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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
/**************************************************************************
* *
* Regina - A Normal Surface Theory Calculator *
* Python Interface *
* *
* Copyright (c) 1999-2006, Ben Burton *
* For further details contact Ben Burton (bab@debian.org). *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* You should have received a copy of the GNU General Public *
* License along with this program; if not, write to the Free *
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
**************************************************************************/
/* end stub */
#include "triangulation/nperm.h"
#include "../globalarray.h"
#include <boost/python.hpp>
using namespace boost::python;
using regina::NPerm;
using regina::python::GlobalArray;
namespace {
GlobalArray<NPerm> allPermsS4_arr(regina::allPermsS4, 24);
GlobalArray<unsigned> allPermsS4Inv_arr(regina::allPermsS4Inv, 24);
GlobalArray<NPerm> orderedPermsS4_arr(regina::orderedPermsS4, 24);
GlobalArray<NPerm> allPermsS3_arr(regina::allPermsS3, 6);
GlobalArray<unsigned> allPermsS3Inv_arr(regina::allPermsS3Inv, 6);
GlobalArray<NPerm> orderedPermsS3_arr(regina::orderedPermsS3, 6);
GlobalArray<NPerm> allPermsS2_arr(regina::allPermsS2, 2);
GlobalArray<unsigned> allPermsS2Inv_arr(regina::allPermsS2Inv, 2);
void (NPerm::*setPerm_pair)(int, int) = &NPerm::setPerm;
void (NPerm::*setPerm_quartet)(int, int, int, int) = &NPerm::setPerm;
std::string (*faceDescription_int)(int) = ®ina::faceDescription;
std::string (*faceDescription_perm)(const NPerm&) =
®ina::faceDescription;
std::string (*edgeDescription_int)(int) = ®ina::edgeDescription;
std::string (*edgeDescription_perm)(const NPerm&) =
®ina::edgeDescription;
int perm_getItem(const NPerm& p, int index) {
return p[index];
}
}
void addNPerm() {
class_<NPerm>("NPerm")
.def(init<unsigned char>())
.def(init<int, int>())
.def(init<int, int, int, int>())
.def(init<int, int, int, int, int, int, int, int>())
.def(init<const NPerm&>())
.def("getPermCode", &NPerm::getPermCode)
.def("setPermCode", &NPerm::setPermCode)
.def("isPermCode", &NPerm::isPermCode)
.def("setPerm", setPerm_pair)
.def("setPerm", setPerm_quartet)
.def(self * self)
.def("inverse", &NPerm::inverse)
.def("sign", &NPerm::sign)
.def("__getitem__", perm_getItem)
.def("preImageOf", &NPerm::preImageOf)
.def(self == self)
.def(self != self)
.def("compareWith", &NPerm::compareWith)
.def("isIdentity", &NPerm::isIdentity)
.def("toString", &NPerm::toString)
.def("__str__", &NPerm::toString)
;
// Global arrays:
scope().attr("allPermsS4") = &allPermsS4_arr;
scope().attr("allPermsS4Inv") = &allPermsS4Inv_arr;
scope().attr("orderedPermsS4") = &orderedPermsS4_arr;
scope().attr("allPermsS3") = &allPermsS3_arr;
scope().attr("allPermsS3Inv") = &allPermsS3Inv_arr;
scope().attr("orderedPermsS3") = &orderedPermsS3_arr;
scope().attr("allPermsS2") = &allPermsS2_arr;
scope().attr("allPermsS2Inv") = &allPermsS2Inv_arr;
// Global functions:
def("faceOrdering", regina::faceOrdering);
def("edgeOrdering", regina::edgeOrdering);
def("faceDescription", faceDescription_int);
def("faceDescription", faceDescription_perm);
def("edgeDescription", edgeDescription_int);
def("edgeDescription", edgeDescription_perm);
}
|