29#ifndef LIBSEMIGROUPS_TRANSF_HPP_
30#define LIBSEMIGROUPS_TRANSF_HPP_
36#include <initializer_list>
42#include <unordered_map>
43#include <unordered_set>
49#include "adapters.hpp"
51#include "constants.hpp"
53#include "exception.hpp"
55#include "is_specialization_of.hpp"
58#include "detail/stl.hpp"
101 template <
typename T>
103 = std::is_base_of_v<detail::PTransfPolymorphicBase, T>;
107 template <
typename T>
110 template <
typename T>
128 template <
typename Scalar,
typename Container>
130 static_assert(std::is_integral_v<Scalar>,
131 "template parameter Scalar must be an integral type");
132 static_assert(std::is_unsigned_v<Scalar>,
133 "template parameter Scalar must be unsigned");
220 template <
typename Iterator>
227 std::is_same_v<OtherScalar, Undefined>
228 || std::is_convertible_v<OtherScalar, point_type>,
229 "the template parameter Iterator must have "
230 "value_type \"Undefined\" or convertible to \"point_type\"!");
231 static_assert(std::is_same_v<std::decay_t<
decltype(*_container.begin())>,
234#pragma GCC diagnostic push
235#if defined(__GNUC__) && !defined(__clang__)
236#pragma GCC diagnostic ignored "-Wstringop-overflow"
238 std::copy(first, last, _container.begin());
239#pragma GCC diagnostic pop
267 template <
typename Sub
class,
typename OtherContainer = Container>
268 [[nodiscard]]
static Subclass
make(OtherContainer&& cont);
290 template <
typename Sub
class,
typename OtherScalar>
329 return _container < that._container;
367 return _container == that._container;
386 return _container < that._container || _container == that._container;
405 return that <= *
this;
424 return !(*
this == that);
442 return _container[i];
460 return _container[i];
478 return _container.at(i);
496 return _container.at(i);
521 template <
typename Sub
class>
522 [[nodiscard]] Subclass
operator*(Subclass
const& that)
const {
524 "the template parameter Subclass must be derived from "
525 "PTransfPolymorphicBase");
526 Subclass xy(that.degree());
527 xy.product_inplace(*
static_cast<Subclass const*
>(
this), that);
553 return _container.cbegin();
568 return _container.cend();
573 return _container.begin();
578 return _container.end();
593 return _container.begin();
608 return _container.end();
624 [[nodiscard]]
size_t rank()
const {
626 return (vals.find(
UNDEFINED) == vals.end() ? vals.size()
666 [[nodiscard]]
size_t degree() const noexcept {
667 return _container.size();
683 template <
typename Sub
class>
684 [[nodiscard]]
static Subclass
one(
size_t N) {
686 "the template parameter Subclass must be derived from "
687 "PTransfPolymorphicBase");
689 std::iota(result.begin(), result.end(), 0);
696 resize(_container, N, val);
700 template <
typename T>
701 static void throw_if_bad_args(T
const& cont);
703 Container _container;
717 template <
typename T>
718 static constexpr bool IsStatic = detail::IsStaticHelper<T>::value;
727 template <
typename T>
728 static constexpr bool IsDynamic = detail::IsDynamicHelper<T>::value;
746 template <
typename Scalar>
812 using base_type::resize;
831 template <
size_t N,
typename Scalar>
910 = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
915 template <
typename T>
918 template <
typename Scalar>
921 template <
size_t N,
typename Scalar>
924 template <
size_t N,
typename Scalar>
927 template <
typename Scalar>
942 template <
typename T>
943 static constexpr bool IsPTransf = detail::IsPTransfHelper<T>::value;
961 template <
typename Scalar,
typename Container>
964 size_t const M = f.
degree();
965 for (
auto const& val : f) {
970 "[{}, {}), found {}",
1011 = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
1027 using base_type::degree;
1069 template <
typename T>
1072 template <
size_t N,
typename Scalar>
1073 struct IsTransfHelper<Transf<N, Scalar>> : std::true_type {};
1075 template <
size_t N,
typename Scalar>
1076 struct IsStaticHelper<Transf<N, Scalar>>
1077 : IsStaticHelper<PTransf<N, Scalar>> {};
1079 template <
size_t N,
typename Scalar>
1080 struct IsDynamicHelper<Transf<N, Scalar>>
1081 : IsDynamicHelper<PTransf<N, Scalar>> {};
1095 template <
typename T>
1096 static constexpr bool IsTransf = detail::IsTransfHelper<T>::value;
1115 template <
size_t N,
typename Scalar>
1155 template <
typename Return,
typename OtherContainer>
1156 [[nodiscard]] std::enable_if_t<IsTransf<Return>, Return>
1184 template <
typename Return,
typename OtherScalar>
1185 [[nodiscard]] std::enable_if_t<IsTransf<Return>, Return>
1224 = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
1240 using base_type::degree;
1241 using base_type::undef;
1267 template <
typename OtherScalar>
1307 typename Scalar = std::
1308 conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
1317 template <
typename T>
1320 template <
size_t N,
typename Scalar>
1321 struct IsPPermHelper<PPerm<N, Scalar>> : std::true_type {};
1323 template <
size_t N,
typename Scalar>
1324 struct IsStaticHelper<PPerm<N, Scalar>>
1325 : IsStaticHelper<PTransf<N, Scalar>> {};
1327 template <
size_t N,
typename Scalar>
1328 struct IsDynamicHelper<PPerm<N, Scalar>>
1329 : IsDynamicHelper<PTransf<N, Scalar>> {};
1339 template <
typename T>
1340 static constexpr bool IsPPerm = detail::IsPPermHelper<T>::value;
1360 template <
size_t N,
typename Scalar>
1363 detail::throw_if_duplicates(f.begin(), f.end());
1404 template <
typename Return,
typename OtherContainer>
1405 [[nodiscard]] std::enable_if_t<IsPPerm<Return>, Return>
1431 template <
typename Return>
1432 [[nodiscard]] std::enable_if_t<IsPPerm<Return>, Return>
1461 template <
typename Return>
1462 [[nodiscard]] std::enable_if_t<IsPPerm<Return>, Return>
1490 template <
typename Return>
1491 [[nodiscard]] std::enable_if_t<IsPPerm<Return>, Return>
1533 = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
1549 using base_type::degree;
1553 return base_type::template
one<Perm>(M);
1562 template <
typename T>
1565 template <
size_t N,
typename Scalar>
1566 struct IsPermHelper<Perm<N, Scalar>> : std::true_type {};
1576 template <
typename T>
1577 static constexpr bool IsPerm = detail::IsPermHelper<T>::value;
1597 template <
size_t N,
typename Scalar>
1600 detail::throw_if_duplicates(f.begin(), f.end());
1641 template <
typename Return,
typename OtherContainer>
1642 [[nodiscard]] std::enable_if_t<IsPerm<Return>, Return>
1669 template <
typename Return>
1670 [[nodiscard]] std::enable_if_t<IsPerm<Return>, Return>
1706 template <
typename T,
typename Scalar>
1730 template <
typename T>
1759 template <
typename T,
typename Scalar>
1783 template <
typename T>
1804 template <
typename T>
1805 [[nodiscard]]
auto one(T
const& f)
1806 -> std::enable_if_t<IsDerivedFromPTransf<T>, T> {
1807 return T::one(f.degree());
1827 template <
size_t N,
typename Scalar>
1848 template <
size_t N,
typename Scalar>
1868 template <
size_t N,
typename Scalar>
1893 template <
size_t N,
typename Scalar>
1918 template <
size_t N,
typename Scalar>
1941 template <
size_t N,
typename Scalar>
1948 template <
typename T>
1949 struct Degree<T,
std::enable_if_t<IsDerivedFromPTransf<T>>> {
1950 [[nodiscard]]
constexpr size_t operator()(T
const& x)
const noexcept {
1955 template <
typename T>
1956 struct One<T, std::enable_if_t<IsDerivedFromPTransf<T>>> {
1957 [[nodiscard]] T operator()(T
const& x)
const {
1958 return (*
this)(x.degree());
1961 [[nodiscard]] T operator()(
size_t N)
const {
1966 template <
size_t N,
typename Scalar>
1968 [[nodiscard]] Perm<N, Scalar> operator()(Perm<N, Scalar>
const& x) {
1973 template <
typename Sub
class>
1974 struct Product<Subclass, std::enable_if_t<IsDerivedFromPTransf<Subclass>>> {
1976 operator()(Subclass& xy, Subclass
const& x, Subclass
const& y,
size_t = 0) {
1977 xy.product_inplace(x, y);
1981 template <
typename T>
1982 struct Hash<T, std::enable_if_t<IsDerivedFromPTransf<T>>> {
1983 [[nodiscard]]
constexpr size_t operator()(T
const& x)
const {
1984 return x.hash_value();
1988 template <
typename T>
1989 struct Complexity<T, std::enable_if_t<IsDerivedFromPTransf<T>>> {
1990 [[nodiscard]]
constexpr size_t operator()(T
const& x)
const noexcept {
1999 template <
typename T>
2003 x.increase_degree_by(n);
2018 template <
size_t N,
typename Scalar,
typename T>
2029 template <
size_t N,
typename Scalar,
size_t M>
2033 BitSet<M>
const& pt,
2037 pt.apply([&x, &res](
size_t i) { res.set(x[i]); });
2047 template <
size_t N,
typename Scalar,
typename T>
2066 template <
size_t N,
typename Scalar>
2070 using type = BitSet<BitSet<1>::max_size()>;
2078 template <
size_t N,
typename Scalar>
2090 template <
size_t N,
typename Scalar,
typename T>
2103 template <
size_t N,
typename Scalar,
size_t M>
2116 template <
size_t N,
typename Scalar,
typename T>
2137 template <
size_t N,
typename Scalar>
2165 template <
size_t N,
typename Scalar>
2171 LIBSEMIGROUPS_ASSERT(res.degree() == pt.degree());
2172 LIBSEMIGROUPS_ASSERT(res.degree() == x.degree());
2173 res.product_inplace(pt, x);
2184 template <
size_t N,
typename Scalar,
typename T>
2195 template <
size_t N,
typename Scalar,
size_t M>
2199 BitSet<M>
const& pt,
2208 template <
size_t N,
typename Scalar>
2214 res.product_inplace(x, pt);
2233 template <
size_t N,
typename Scalar,
typename T>
2255 template <
size_t N,
typename Scalar>
2259 using type = BitSet<BitSet<1>::max_size()>;
2267 template <
size_t N,
typename Scalar>
2278 template <
size_t N,
typename Scalar,
size_t M>
2289 template <
size_t N,
typename Scalar,
size_t M>
2299 template <
size_t N,
typename Scalar>
2318 template <
size_t N,
typename Scalar,
typename T>
2321 std::enable_if_t<std::is_integral_v<T>>> {
2326 LIBSEMIGROUPS_ASSERT(pt < p.degree());
2342 struct LeastTransfHelper {
2343#ifdef LIBSEMIGROUPS_HPCOMBI_ENABLED
2344 using type = std::conditional_t<N >= 17, Transf<N>, HPCombi::Transf16>;
2346 using type = Transf<N>;
2351 struct LeastPPermHelper {
2352#ifdef LIBSEMIGROUPS_HPCOMBI_ENABLED
2353 using type = std::conditional_t<N >= 17, PPerm<N>, HPCombi::PPerm16>;
2355 using type = PPerm<N>;
2360 struct LeastPermHelper {
2361#ifdef LIBSEMIGROUPS_HPCOMBI_ENABLED
2362 using type = std::conditional_t<N >= 17, Perm<N>, HPCombi::Perm16>;
2364 using type = Perm<N>;
2412 using LeastPerm =
typename detail::LeastPermHelper<N>::type;
2438 template <
size_t N,
typename Scalar>
2440 std::string_view prefix =
"",
2441 std::string_view braces =
"{}");
2467 template <
size_t N,
typename Scalar>
2469 std::string_view prefix =
"",
2470 std::string_view braces =
"{}");
2497 template <
size_t N,
typename Scalar>
2499 std::string_view prefix =
"",
2500 std::string_view braces =
"{}");
2531 template <
size_t N,
typename Scalar>
2533 std::string_view prefix =
"",
2534 std::string_view braces
2536 size_t max_width = 72);
2566 template <
size_t N,
typename Scalar>
2568 std::string_view prefix =
"",
2569 std::string_view braces
2571 size_t max_width = 72);
2603 template <
size_t N,
typename Scalar>
2605 std::string_view prefix =
"",
2606 std::string_view braces
2608 size_t max_width = 72);
2611#include "transf.tpp"
Partial transformations with dynamic degree.
Definition transf.hpp:747
DynamicPTransf(size_t n)
Construct with given degree.
Definition transf.hpp:787
size_t degree() const noexcept
Returns the degree of a partial transformation.
Definition transf.hpp:666
const_iterator end() const noexcept
Returns a const_iterator (random access iterator) pointing one past the last image value.
Definition transf.hpp:577
DynamicPTransf & increase_degree_by(size_t m)
Increase the degree in-place.
Definition transf.hpp:805
Scalar point_type
Type of the image values.
Definition transf.hpp:756
std::vector< point_type > container_type
Type of the underlying container.
Definition transf.hpp:763
Partial permutations with static or dynamic degree.
Definition transf.hpp:1225
PPerm(std::initializer_list< point_type > dom, std::initializer_list< point_type > img, size_t M)
Construct from domain, range, and degree.
Definition transf.hpp:1274
PPerm(std::vector< OtherScalar > const &dom, std::vector< OtherScalar > const &img, size_t M)
Construct from domain, range, and degree.
Scalar point_type
Type of the image values.
Definition transf.hpp:1232
void product_inplace(PPerm const &f, PPerm const &g)
Multiply two partial perms and store the product in this.
static PPerm one(size_t M)
Returns the identity transformation on the given number of points.
Definition transf.hpp:1299
typename base_type::container_type container_type
Type of the underlying container.
Definition transf.hpp:1237
Base class for partial transformations.
Definition transf.hpp:129
typename Container::iterator iterator
Type of iterators pointing to image values.
Definition transf.hpp:534
bool operator==(PTransfBase const &that) const
Compare for equality.
Definition transf.hpp:366
Subclass operator*(Subclass const &that) const
Multiply by another partial transformation.
Definition transf.hpp:522
size_t rank() const
Returns the number of distinct image values.
Definition transf.hpp:624
typename Container::const_iterator const_iterator
Type of const iterators pointing to image values.
Definition transf.hpp:539
PTransfBase(PTransfBase const &)=default
Default copy constructor.
const_iterator begin() const noexcept
Definition transf.hpp:572
PTransfBase()=default
Default constructor.
bool operator>=(PTransfBase const &that) const
Compare for greater than or equal.
Definition transf.hpp:404
PTransfBase & operator=(PTransfBase const &)=default
Default copy assignment operator.
PTransfBase(std::initializer_list< Scalar > cont)
Construct from a container of images.
Definition transf.hpp:243
point_type const & at(size_t i) const
Get a const reference to the image of a point.
Definition transf.hpp:495
size_t degree() const noexcept
Returns the degree of a partial transformation.
Definition transf.hpp:666
const_iterator end() const noexcept
Definition transf.hpp:577
bool operator>(PTransfBase const &that) const
Compare for greater.
Definition transf.hpp:347
static Subclass make(OtherContainer &&cont)
Construct from universal reference container and check.
PTransfBase & operator=(PTransfBase &&)=default
Default move assignment operator.
PTransfBase(PTransfBase &&)=default
Default move constructor.
Scalar point_type
Type of the image values.
Definition transf.hpp:139
static Subclass make(std::initializer_list< OtherScalar > cont)
Construct from std::initializer_list and check.
iterator begin() noexcept
Returns an iterator (random access iterator) pointing at the first image value.
Definition transf.hpp:592
const_iterator cend() const noexcept
Returns a const_iterator (random access iterator) pointing one past the last image value.
Definition transf.hpp:567
Container container_type
Type of the underlying container.
Definition transf.hpp:144
const_iterator cbegin() const noexcept
Returns a const_iterator (random access iterator) pointing at the first image value.
Definition transf.hpp:552
point_type & at(size_t i)
Get a reference to the image of a point.
Definition transf.hpp:477
static Subclass one(size_t N)
Returns the identity transformation on the given number of points.
Definition transf.hpp:684
PTransfBase(Iterator first, Iterator last)
Construct from a range of images.
Definition transf.hpp:221
point_type & operator[](size_t i)
Get a reference to the image of a point.
Definition transf.hpp:441
static point_type undef() noexcept
Returns the value used to represent "undefined".
Definition transf.hpp:157
size_t hash_value() const
Returns a hash value.
Definition transf.hpp:641
bool operator<=(PTransfBase const &that) const
Compare for less than or equal.
Definition transf.hpp:385
bool operator<(PTransfBase const &that) const
Compare for less.
Definition transf.hpp:328
PTransfBase(Container const &cont)
Construct from a container of images.
Definition transf.hpp:195
point_type const & operator[](size_t i) const
Get a const reference to the image of a point.
Definition transf.hpp:459
void swap(PTransfBase &that) noexcept
Swap with another partial transformation.
Definition transf.hpp:651
PTransfBase(Container &&cont)
Construct from a container of images.
Definition transf.hpp:198
bool operator!=(PTransfBase const &that) const
Compare for inequality.
Definition transf.hpp:423
iterator end() noexcept
Returns an iterator (random access iterator) pointing one past the last image value.
Definition transf.hpp:607
Permutations with static or dynamic degree.
Definition transf.hpp:1534
static Perm one(size_t M)
Returns the identity transformation on the given number of points.
Definition transf.hpp:1552
Scalar point_type
Type of the image values.
Definition transf.hpp:1541
typename PTransf< N, point_type >::container_type container_type
Type of the underlying container.
Definition transf.hpp:1546
Partial transformations with static degree.
Definition transf.hpp:832
StaticPTransf & increase_degree_by(size_t)
Increase the degree in-place.
Definition transf.hpp:879
const_iterator begin() const noexcept
Returns a const_iterator (random access iterator) pointing at the first image value.
Definition transf.hpp:572
std::array< Scalar, N > container_type
Type of the underlying container.
Definition transf.hpp:842
const_iterator end() const noexcept
Returns a const_iterator (random access iterator) pointing one past the last image value.
Definition transf.hpp:577
StaticPTransf(size_t n)
Construct with given degree.
StaticPTransf()
Default constructor.
Definition transf.hpp:858
Scalar point_type
Type of the image values.
Definition transf.hpp:837
Transformations with static or dynamic degree.
Definition transf.hpp:1012
static Transf one(size_t M)
Returns the identity transformation on the given number of points.
Definition transf.hpp:1063
Scalar point_type
Type of the image values.
Definition transf.hpp:1019
void product_inplace(Transf const &f, Transf const &g)
Multiply two transformations and store the product in this.
typename base_type::container_type container_type
Type of the underlying container.
Definition transf.hpp:1024
std::string to_human_readable_repr(Action< Element, Point, Func, Traits, LeftOrRight > const &action)
Return a human readable representation of an Action object.
Undefined const UNDEFINED
Value for something undefined.
#define LIBSEMIGROUPS_EXCEPTION(...)
Throw a LibsemigroupsException.
Definition exception.hpp:99
enable_if_is_same< Return, Blocks > make(Container const &cont)
Check the arguments, construct a Blocks object, and check it.
Definition bipart.hpp:790
typename detail::LeastPermHelper< N >::type LeastPerm
Type of perms using the least memory for a given degree.
Definition transf.hpp:2412
static constexpr bool IsPPerm
Helper variable template.
Definition transf.hpp:1340
auto one(T const &f) -> std::enable_if_t< IsDerivedFromPTransf< T >, T >
Returns the identity transformation of same degree as a sample.
Definition transf.hpp:1805
static constexpr bool IsTransf
Helper variable template.
Definition transf.hpp:1096
typename detail::LeastTransfHelper< N >::type LeastTransf
Type of transformations using the least memory for a given degree.
Definition transf.hpp:2382
PPerm< N, Scalar > left_one(PPerm< N, Scalar > const &f)
Returns the left one of a partial perm.
typename detail::LeastPPermHelper< N >::type LeastPPerm
Type of partial perms using the least memory for a given degree.
Definition transf.hpp:2397
void domain(T const &f, std::vector< Scalar > &dom)
Replace the contents of a vector by the set of points where a partial transformation is defined.
static constexpr bool IsPTransf
Helper variable template.
Definition transf.hpp:943
PPerm< N, Scalar > right_one(PPerm< N, Scalar > const &f)
Returns the right one of a partial perm.
static constexpr bool IsDynamic
Helper variable template.
Definition transf.hpp:728
static constexpr bool IsStatic
Helper variable template.
Definition transf.hpp:718
void throw_if_not_pperm(PPerm< N, Scalar > const &f)
Check a partial perm.
Definition transf.hpp:1361
void image(T const &f, std::vector< Scalar > &im)
Replace the contents of a vector by the set of images of a partial transformation.
void throw_if_image_value_out_of_range(PTransfBase< Scalar, Container > const &f)
Check a partial transformation.
Definition transf.hpp:963
std::string to_input_string(Transf< N, Scalar > const &x, std::string_view prefix="", std::string_view braces="{}")
Return a string that can be used to recreate a transformation.
static constexpr bool IsPerm
Helper variable template.
Definition transf.hpp:1577
auto throw_if_not_perm(Perm< N, Scalar > const &f)
Check a permutation.
Definition transf.hpp:1598
static constexpr bool IsDerivedFromPTransf
Helper variable template.
Definition transf.hpp:103
std:: conditional_t< N==0, DynamicPTransf< Scalar >, StaticPTransf< N, Scalar > > PTransf
Partial transformations with static or dynamic degree.
Definition transf.hpp:911
void inverse(PPerm< N, Scalar > const &from, PPerm< N, Scalar > &to)
Replace contents of a partial perm with the inverse of another.
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
auto to(detail::KnuthBendixImpl< Rewriter, ReductionOrder > &kb) -> std::enable_if_t< std::is_same_v< Presentation< typename Result::word_type >, Result >, Result >
No doc.
Adapter for the complexity of multiplication.
Definition adapters.hpp:121
Adapter for the degree of an element.
Definition adapters.hpp:159
Adapter for hashing.
Definition adapters.hpp:446
size_t operator()(Value const &x) const
Hash x using std::hash.
Definition adapters.hpp:455
void operator()(PPerm< N, Scalar > &res, PPerm< N, Scalar > const &pt, PPerm< N, Scalar > const &x) const noexcept
Stores the idempotent in res.
Definition transf.hpp:2211
void operator()(T &res, T const &pt, PPerm< N, Scalar > const &x) const
Definition transf.hpp:2235
void operator()(T &res, T const &pt, Transf< N, Scalar > const &x) const
Stores the image of pt under the left action of x in res.
Adapter for the value of a left action.
Definition adapters.hpp:350
void operator()(BitSet< M > &res, BitSet< M > const &pt, PPerm< N, Scalar > const &x) const
Stores the image set of pt under x in res.
void operator()(PPerm< N, Scalar > &res, PPerm< N, Scalar > const &pt, PPerm< N, Scalar > const &x) const noexcept
Stores the idempotent in res.
Definition transf.hpp:2168
void operator()(T &res, T const &pt, PPerm< N, Scalar > const &x) const
Stores the image set of pt under x in res.
void operator()(T &res, T const &pt, Perm< N, Scalar > const &p) const noexcept
Stores the image of pt under the action of p in res.
Definition transf.hpp:2323
T operator()(T pt, Perm< N, Scalar > const &x)
Returns the image of pt under the action of p.
Definition transf.hpp:2331
void operator()(BitSet< M > &res, BitSet< M > const &pt, Transf< N, Scalar > const &x) const
Stores the image set of pt under x in res.
Definition transf.hpp:2032
void operator()(T &res, T const &pt, Transf< N, Scalar > const &x) const
Stores the image set of pt under x in res.
Adapter for the value of a right action.
Definition adapters.hpp:392
void operator()(T &x, size_t n) const
Returns x->increase_degree_by(n).
Definition transf.hpp:2002
Adapter for increasing the degree of an element.
Definition adapters.hpp:199
Adapter for the inverse of an element.
Definition adapters.hpp:319
void operator()(BitSet< M > &res, PPerm< N, Scalar > const &x) const
void operator()(BitSet< M > &res, Transf< N, Scalar > const &x) const
void operator()(T &res, Transf< N, Scalar > const &x) const
Adapter for the action on LambdaValue's.
Definition adapters.hpp:833
BitSet< BitSet< 1 >::max_size()> type
Definition transf.hpp:2259
BitSet< BitSet< 1 >::max_size()> type
Definition transf.hpp:2070
Adapter for lambda functions.
Definition adapters.hpp:793
Adapter for the identity element of the given type.
Definition adapters.hpp:246
Adapter for the product of two elements.
Definition adapters.hpp:284
size_t operator()(PPerm< N, Scalar > const &x) const
Definition transf.hpp:2304
size_t operator()(Transf< N, Scalar > const &x) const
Definition transf.hpp:2151
Adapter for calculating ranks.
Definition adapters.hpp:930
void operator()(BitSet< M > &res, PPerm< N, Scalar > const &x) const
void operator()(T &res, Transf< N, Scalar > const &x) const
Adapter for the action on RhoValue's.
Definition adapters.hpp:854
typename LambdaValue< PPerm< N, Scalar > >::type type
Definition transf.hpp:2271
std::vector< Scalar > type
Definition transf.hpp:2082
Adapter for rho functions.
Definition adapters.hpp:812