See https://github.com/tscrim/coxeter/pull/14 commit 7b46d5ea88cfdcaa4af549f61c58c330fb513948 Author: Jeroen Demeyer Date: Mon Feb 26 14:43:08 2018 +0100 Add Sage interface diff --git a/sage.cpp b/sage.cpp new file mode 100644 index 0000000..74f86be --- /dev/null +++ b/sage.cpp @@ -0,0 +1,56 @@ +/* + Coxeter version 3.0 Copyright (C) 2009 Mike Hansen + See file main.cpp for full copyright notice +*/ + +#include "sage.h" + +namespace sage { + + void interval(List& list, CoxGroup& W, const CoxWord& g, const CoxWord& h) + + /* + Returns a list of the elements in the Bruhat interval between g and h. + Note that this assumes that g and h are in order. + */ + { + if (not W.inOrder(g,h)) { + return; + } + + W.extendContext(h); + + CoxNbr x = W.contextNumber(g); + CoxNbr y = W.contextNumber(h); + + BitMap b(W.contextSize()); + W.extractClosure(b,y); + + BitMap::ReverseIterator b_rend = b.rend(); + List res(0); + + for (BitMap::ReverseIterator i = b.rbegin(); i != b_rend; ++i) + if (not W.inOrder(x,*i)) { + BitMap bi(W.contextSize()); + W.extractClosure(bi,*i); + CoxNbr z = *i; // andnot will invalidate iterator + b.andnot(bi); + b.setBit(z); // otherwise the decrement will not be correct + } else + res.append(*i); + + schubert::NFCompare nfc(W.schubert(),W.ordering()); + Permutation a(res.size()); + sortI(res,nfc,a); + + list.setSize(0); + for (size_t j = 0; j < res.size(); ++j) { + CoxWord w(0); + W.schubert().append(w, res[a[j]]); + list.append(w); + } + + return; + } + +} diff --git a/sage.h b/sage.h new file mode 100644 index 0000000..5b3df8a --- /dev/null +++ b/sage.h @@ -0,0 +1,23 @@ +/* + Coxeter version 3.0 Copyright (C) 2009 Mike Hansen + See file main.cpp for full copyright notice +*/ + +#ifndef SAGE_H /* guard against multiple inclusions */ +#define SAGE_H + +#include "globals.h" +#include "coxgroup.h" +#include "coxtypes.h" +#include "schubert.h" +#include "list.h" + +namespace sage { + using namespace coxeter; + using namespace coxtypes; + using namespace list; + + void interval(List& result, CoxGroup& W, const CoxWord& g, const CoxWord& h); +} + +#endif