Vcsn  2.3
Be Rational
vcsn::detail::polynomialset_impl< Context, Kind > Class Template Reference

Linear combination of labels: map labels to weights. More...

#include <fwd.hh>

Collaboration diagram for vcsn::detail::polynomialset_impl< Context, Kind >:

Classes

struct  norm_
 In the general case, normalize by the first (non null) weight. More...
 
struct  norm_< polynomialset< Ctx, Knd >, Dummy >
 Compute the left GCD of weights which are polynomials. More...
 
struct  norm_< z, Dummy >
 For Z, take the GCD, with the sign of the first value. More...
 

Public Types

using self_t = polynomialset< Context, Kind >
 
using context_t = Context
 
using labelset_t = labelset_t_of< context_t >
 
using weightset_t = weightset_t_of< context_t >
 
using labelset_ptr = typename context_t::labelset_ptr
 
using weightset_ptr = typename context_t::weightset_ptr
 
using label_t = typename labelset_t::value_t
 Polynomials over labels. More...
 
using weight_t = weight_t_of< context_t >
 
using value_t = wet_of< context_t, Kind >
 
using monomial_t = typename value_t::value_type
 A pair <label, weight>. More...
 
template<typename Ctx >
using rweight_t = decltype(std::declval< labelset_t_of< Ctx >>().rweight(std::declval< label_t_of< Ctx >>(), std::declval< weight_t_of< Ctx >>()))
 Detect whether the labelset features rweight. More...
 
template<typename Ctx >
using has_rweight_fn = detect< Ctx, rweight_t >
 Whether LabelSet features rweight. More...
 
template<typename Ctx >
using compose_t = decltype(std::declval< labelset_t_of< Ctx >>().compose(std::declval< label_t_of< Ctx >>(), std::declval< label_t_of< Ctx >>()))
 Detect whether the labelset features compose. More...
 
template<typename Ctx >
using has_compose_fn = detect< Ctx, compose_t >
 Whether LabelSet features compose. More...
 

Public Member Functions

 polynomialset_impl ()=delete
 
 polynomialset_impl (const polynomialset_impl &)=default
 
 polynomialset_impl (polynomialset_impl &&)=default
 
 polynomialset_impl (const context_t &ctx)
 
const self_tself () const
 Ourself, but after the application of weightset_mixin. More...
 
const context_tcontext () const
 
const labelset_ptrlabelset () const
 
const weightset_ptrweightset () const
 
value_tdel_weight (value_t &v, const label_t &l) const
 Remove the monomial of l in v. More...
 
value_tnew_weight (value_t &v, const label_t &l, const weight_t w) const
 Set the monomial of l in v to weight k. More...
 
value_tset_weight (value_t &v, const label_t &l, const weight_t w) const
 Set the monomial of l in v to weight w. More...
 
const weight_t get_weight (const value_t &v, const label_t &l) const ATTRIBUTE_PURE
 
void clear (value_t &v)
 Set to zero. More...
 
value_tadd_here (value_t &v, const label_t &l, const weight_t k) const
 v += <k>l. More...
 
value_tadd_here (value_t &v, const monomial_t &m) const
 v += m. More...
 
template<wet_kind_t WetType, typename WS >
auto add_here_impl (value_t &l, const value_t &r) const -> std::enable_if_t< WetType!=wet_kind_t::bitset, value_t & >
 v += p, default case. More...
 
template<wet_kind_t WetType, typename WS >
auto add_here_impl (value_t &l, const value_t &r) const -> std::enable_if_t<(WetType==wet_kind_t::bitset &&std::is_same< WS, b >::value), value_t & >
 v += p, B and bitsets. More...
 
template<wet_kind_t WetType, typename WS >
auto add_here_impl (value_t &l, const value_t &r) const -> std::enable_if_t<(WetType==wet_kind_t::bitset &&std::is_same< WS, f2 >::value), value_t & >
 v += p, F2 and bitsets. More...
 
value_tadd_here (value_t &l, const value_t &r) const
 
value_t add (const value_t &l, const value_t &r) const
 The sum of polynomials l and r. More...
 
value_tsub_here (value_t &v, const monomial_t &m) const
 v -= m. More...
 
value_t sub (const value_t &l, const value_t &r) const
 The subtraction of polynomials l and r. More...
 
monomial_t mul (const monomial_t &l, const monomial_t &r) const
 The product of monomials l and r. More...
 
template<wet_kind_t WetType>
auto mul_impl (const value_t &l, const value_t &r) const -> std::enable_if_t< WetType!=wet_kind_t::bitset, value_t >
 The product of polynomials l and r. More...
 
template<wet_kind_t WetType>
auto mul_impl (const value_t &l, const value_t &r) const -> std::enable_if_t< WetType==wet_kind_t::bitset, value_t >
 The product of polynomials l and r. More...
 
auto mul (const value_t &l, const value_t &r) const -> value_t
 The product of polynomials l and r. More...
 
auto mul (const value_t &p, const label_t &l, const weight_t w) const -> value_t
 The product of polynomials l and r. More...
 
template<typename Ctx >
std::enable_if_t< Ctx::is_lar, value_tconjunction_impl (const value_t &l, const value_t &r) const
 The conjunction of polynomials l and r. More...
 
template<typename Ctx >
std::enable_if_t<!Ctx::is_lar, value_tconjunction_impl (const value_t &l, const value_t &r) const
 The conjunction of polynomials l and r. More...
 
value_t conjunction (const value_t &l, const value_t &r) const
 
value_t infiltrate (const value_t &l, const value_t &r) const
 The infiltration of polynomials l and r. More...
 
template<wet_kind_t WetType = value_t::kind>
auto scalar_product (const value_t &l, const value_t &r) const -> std::enable_if_t< WetType!=wet_kind_t::bitset, weight_t >
 The sum of the weights of the common labels. More...
 
template<wet_kind_t WetType = value_t::kind, typename WS = weightset_t>
auto scalar_product (const value_t &l, const value_t &r) const -> std::enable_if_t<(WetType==wet_kind_t::bitset &&std::is_same< WS, b >::value), weight_t >
 The sum of the weights of the common labels. More...
 
template<wet_kind_t WetType = value_t::kind, typename WS = weightset_t>
auto scalar_product (const value_t &l, const value_t &r) const -> std::enable_if_t<(WetType==wet_kind_t::bitset &&std::is_same< WS, f2 >::value), weight_t >
 The sum of the weights of the common labels. More...
 
value_t abs (const value_t &v) const
 Map all weights to their absolute value. More...
 
value_t star (const value_t &v) const
 The star of polynomial v. More...
 
value_t lweight (const weight_t w, const value_t &v) const
 Left exterior product. More...
 
value_t lmul_label (const label_t &lhs, const value_t &v) const
 Left product by a label. More...
 
value_t mul (const monomial_t &lhs, const value_t &v) const
 Left product by a monomial. More...
 
auto rweight (const value_t &v, const weight_t w) const -> value_t
 Right exterior product. More...
 
value_t rmul_label (const value_t &v, const label_t &rhs) const
 Right product. More...
 
value_t mul (const value_t &l, const monomial_t &rhs) const
 Right product by a monomial. More...
 
value_t rdivide (const value_t &l, const value_t &r) const
 
monomial_t ldivide (const monomial_t &l, const monomial_t &r) const
 
value_t ldivide (const monomial_t &l, const value_t &r) const
 Left division by a monomial. More...
 
value_t ldivide (const value_t &l, const value_t &r) const
 
value_tldivide_here (const weight_t w, value_t &v) const
 Left exterior division. More...
 
value_trdivide_here (value_t &v, const weight_t w) const
 Right exterior division. More...
 
value_t lgcd (const value_t &lhs, const value_t &rhs) const
 LGCD between two polynomials. More...
 
auto norm (const value_t &v) const -> weight_t
 The norm: the weight with which we should divide a polynomial to normalize it. More...
 
weight_t normalize_here (value_t &v) const
 Normalize v in place: compute the LGCD of the weights, ldivide the monomials with that factor, and return the factor. More...
 
value_t normalize (value_t res) const
 Normalized v. More...
 
template<typename... Polys>
auto tuple (Polys &&...vs) const -> value_t
 Build a tuple of polynomials: (e.E+f.F)|(g.G+h.H) => eg. More...
 
template<size_t Tape>
auto project () const
 The polynomialset for tape Tape. More...
 
template<size_t Tape>
auto project (const value_t &v) const
 Extract a single tape. More...
 
template<typename Ctx = context_t>
auto compose (const value_t &l, const value_t &r) const -> std::enable_if_t< are_composable< Ctx, Ctx >
 The composition of polynomials l and r when the context is a composable tupleset. More...
 
template<typename Ctx = context_t>
auto compose (const value_t &l, const value_t &r) const -> std::enable_if_t< has_compose_fn< Ctx >
 The composition of polynomials l and r when the context features compose. More...
 
label_t to_label (const value_t &v) const
 Convert into a label. More...
 
monomial_t determinize (value_t v) const
 "Determinize" this polynomial: turn into a monomial. More...
 
value_t complement (const value_t &v) const
 Complement this polynomial. More...
 
const value_tzero () const
 
bool is_zero (const value_t &v) const
 
template<typename WS >
value_t conv (const WS &ws, const typename WS::value_t &v) const
 FIXME: use enable_if to prevent this from being instantiated when WS is a polynomialset. More...
 
template<typename C , wet_kind_t K>
value_t conv (const polynomialset< C, K > &sps, const typename polynomialset< C, K >::value_t &v) const
 Convert from another polynomialset to type_t. More...
 
value_t transpose (const value_t &v) const
 
std::ostream & print_set (std::ostream &o, format fmt={}) const
 
boost::optional< label_tconv_label (std::istream &i, bool weighted, const char sep= '+') const
 Read a label, if there is one. More...
 
weight_t conv_weight (std::istream &i) const
 Read a weight, if there is one, bracketed. More...
 
boost::optional< monomial_tconv_monomial (std::istream &i, const char sep= '+') const
 Read a monomial from a stream. More...
 
value_t conv (std::istream &i, const char sep= '+') const
 Read a polynomial from a stream. More...
 
std::ostream & print (const monomial_t &m, std::ostream &out, format fmt={}) const
 Print a monomial. More...
 
std::ostream & print (const value_t &v, std::ostream &out, format fmt={}, const std::string &sep=" + ") const
 Print a value (a polynomial). More...
 

Static Public Member Functions

static symbol sname ()
 The static name. More...
 
static constexpr bool is_commutative ()
 
static constexpr bool has_lightening_weights ()
 
static ATTRIBUTE_PURE bool monomial_equal (const monomial_t &lhs, const monomial_t &rhs)
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto equal_impl (const value_t &l, const value_t &r) -> std::enable_if_t< WetType!=wet_kind_t::bitset, bool >
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto equal_impl (const value_t &l, const value_t &r) -> std::enable_if_t< WetType==wet_kind_t::bitset, bool >
 
static ATTRIBUTE_PURE bool equal (const value_t &l, const value_t &r)
 
static const value_tone ()
 The unit polynomial. More...
 
static const monomial_tmonomial_one ()
 The unit monomial. More...
 
static bool is_one (const value_t &v) ATTRIBUTE_PURE
 Whether is the unit polynomial. More...
 
static constexpr bool show_one ()
 
static constexpr star_status_t star_status ()
 
static value_t conv (self_t, const value_t &v)
 Conversion from (this and) other weightsets. More...
 
static ATTRIBUTE_PURE bool monomial_less (const monomial_t &lhs, const monomial_t &rhs)
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto less_impl (const value_t &l, const value_t &r) -> std::enable_if_t< WetType!=wet_kind_t::bitset, bool >
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto less_impl (const value_t &l, const value_t &r) -> std::enable_if_t< WetType==wet_kind_t::bitset, bool >
 
static ATTRIBUTE_PURE bool less (const value_t &l, const value_t &r)
 
static ATTRIBUTE_PURE size_t hash (const monomial_t &m, size_t res=0)
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto hash_impl (const value_t &p) -> std::enable_if_t< WetType!=wet_kind_t::bitset, size_t >
 
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto hash_impl (const value_t &p) -> std::enable_if_t< WetType==wet_kind_t::bitset, size_t >
 
static ATTRIBUTE_PURE size_t hash (const value_t &v)
 
static self_t make (std::istream &is)
 Build from the description in is. More...
 

Public Attributes

 value_t
 
for(const auto &lm:l) for(const auto &rm return res
 

Private Member Functions

std::ostream & print_weight_ (const weight_t w, std::ostream &out, format fmt) const
 Print a weight. More...
 
std::ostream & print_without_classes_ (const value_t &v, std::ostream &out, format fmt, const std::string &sep) const
 Print a polynomial value without classes. More...
 
std::ostream & print_with_classes_ (const value_t &v, std::ostream &out, format fmt, const std::string &sep) const
 Print a polynomial value with classes. More...
 
template<typename Ctx = context_t>
std::enable_if_t<!labelset_t_of< Ctx >::is_letterized(), std::ostream & > print_ (const value_t &v, std::ostream &out, format fmt={}, const std::string &sep=" + ") const
 Print a non-null value for a non letterized labelset. More...
 
template<typename Ctx = context_t>
std::enable_if_t< labelset_t_of< Ctx >::is_letterized(), std::ostream & > print_ (const value_t &v, std::ostream &out, format fmt={}, const std::string &sep=" + ") const
 Print a non-null value for a letterized labelset (e.g., letterset or nullableset. More...
 

Private Attributes

context_t ctx_
 

Static Private Attributes

static constexpr char langle = '<'
 Left marker for weight in concrete syntax. More...
 
static constexpr char rangle = '>'
 Right marker for weight in concrete syntax. More...
 

Detailed Description

template<typename Context, wet_kind_t Kind>
class vcsn::detail::polynomialset_impl< Context, Kind >

Linear combination of labels: map labels to weights.

Template Parameters
Contextthe LabelSet and WeightSet types.

Definition at line 41 of file fwd.hh.

Member Typedef Documentation

template<typename Context , wet_kind_t Kind>
template<typename Ctx >
using vcsn::detail::polynomialset_impl< Context, Kind >::compose_t = decltype(std::declval<labelset_t_of<Ctx>>() .compose(std::declval<label_t_of<Ctx>>(), std::declval<label_t_of<Ctx>>()))

Detect whether the labelset features compose.

Definition at line 844 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::context_t = Context

Definition at line 83 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx >
using vcsn::detail::polynomialset_impl< Context, Kind >::has_compose_fn = detect<Ctx, compose_t>

Whether LabelSet features compose.

Definition at line 848 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx >
using vcsn::detail::polynomialset_impl< Context, Kind >::has_rweight_fn = detect<Ctx, rweight_t>

Whether LabelSet features rweight.

Definition at line 540 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::label_t = typename labelset_t::value_t

Polynomials over labels.

Definition at line 90 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::labelset_ptr = typename context_t::labelset_ptr

Definition at line 87 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::labelset_t = labelset_t_of<context_t>

Definition at line 84 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::monomial_t = typename value_t::value_type

A pair <label, weight>.

Definition at line 95 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx >
using vcsn::detail::polynomialset_impl< Context, Kind >::rweight_t = decltype(std::declval<labelset_t_of<Ctx>>() .rweight(std::declval<label_t_of<Ctx>>(), std::declval<weight_t_of<Ctx>>()))

Detect whether the labelset features rweight.

Definition at line 536 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::self_t = polynomialset<Context, Kind>

Definition at line 82 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::value_t = wet_of<context_t, Kind>

Definition at line 93 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::weight_t = weight_t_of<context_t>

Definition at line 91 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::weightset_ptr = typename context_t::weightset_ptr

Definition at line 88 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
using vcsn::detail::polynomialset_impl< Context, Kind >::weightset_t = weightset_t_of<context_t>

Definition at line 85 of file polynomialset.hh.

Constructor & Destructor Documentation

template<typename Context , wet_kind_t Kind>
vcsn::detail::polynomialset_impl< Context, Kind >::polynomialset_impl ( )
delete
template<typename Context , wet_kind_t Kind>
vcsn::detail::polynomialset_impl< Context, Kind >::polynomialset_impl ( const polynomialset_impl< Context, Kind > &  )
default
template<typename Context , wet_kind_t Kind>
vcsn::detail::polynomialset_impl< Context, Kind >::polynomialset_impl ( polynomialset_impl< Context, Kind > &&  )
default
template<typename Context , wet_kind_t Kind>
vcsn::detail::polynomialset_impl< Context, Kind >::polynomialset_impl ( const context_t ctx)
inline

Definition at line 100 of file polynomialset.hh.

Member Function Documentation

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::abs ( const value_t v) const
inline

Map all weights to their absolute value.

Definition at line 468 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::add ( const value_t l,
const value_t r 
) const
inline

The sum of polynomials l and r.

Definition at line 262 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::add_here ( value_t v,
const label_t l,
const weight_t  k 
) const
inline
template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::add_here ( value_t v,
const monomial_t m 
) const
inline

v += m.

Definition at line 214 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), and vcsn::weight_of().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::add_here ( value_t l,
const value_t r 
) const
inline

Definition at line 256 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType, typename WS >
auto vcsn::detail::polynomialset_impl< Context, Kind >::add_here_impl ( value_t l,
const value_t r 
) const -> std::enable_if_t<WetType != wet_kind_t::bitset, value_t&>
inline

v += p, default case.

Definition at line 222 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType, typename WS >
auto vcsn::detail::polynomialset_impl< Context, Kind >::add_here_impl ( value_t l,
const value_t r 
) const -> std::enable_if_t<(WetType == wet_kind_t::bitset && std::is_same<WS, b>::value), value_t&>
inline

v += p, B and bitsets.

Definition at line 234 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType, typename WS >
auto vcsn::detail::polynomialset_impl< Context, Kind >::add_here_impl ( value_t l,
const value_t r 
) const -> std::enable_if_t<(WetType == wet_kind_t::bitset && std::is_same<WS, f2>::value), value_t&>
inline

v += p, F2 and bitsets.

Definition at line 246 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
void vcsn::detail::polynomialset_impl< Context, Kind >::clear ( value_t v)
inline

Set to zero.

Definition at line 177 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::complement ( const value_t v) const
inline

Complement this polynomial.

Requires a rather powerful labelset, typically expressionset.

Definition at line 914 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::normalize(), vcsn::detail::polynomialset_impl< Context, Kind >::to_label(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<typename Ctx = context_t>
auto vcsn::detail::polynomialset_impl< Context, Kind >::compose ( const value_t l,
const value_t r 
) const -> std::enable_if_t<are_composable<Ctx, Ctx>
inline

The composition of polynomials l and r when the context is a composable tupleset.

Definition at line 855 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx = context_t>
auto vcsn::detail::polynomialset_impl< Context, Kind >::compose ( const value_t l,
const value_t r 
) const -> std::enable_if_t<has_compose_fn<Ctx>
inline

The composition of polynomials l and r when the context features compose.

Definition at line 873 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::conjunction ( const value_t l,
const value_t r 
) const
inline
template<typename Context , wet_kind_t Kind>
template<typename Ctx >
std::enable_if_t<Ctx::is_lar, value_t> vcsn::detail::polynomialset_impl< Context, Kind >::conjunction_impl ( const value_t l,
const value_t r 
) const
inline

The conjunction of polynomials l and r.

Valid only for expressionsets.

Definition at line 381 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::detail::polynomialset_impl< Context, Kind >::conjunction(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<typename Ctx >
std::enable_if_t<!Ctx::is_lar, value_t> vcsn::detail::polynomialset_impl< Context, Kind >::conjunction_impl ( const value_t l,
const value_t r 
) const
inline

The conjunction of polynomials l and r.

Valid only for every other labelsets.

Definition at line 396 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
const context_t& vcsn::detail::polynomialset_impl< Context, Kind >::context ( ) const
inline
template<typename Context , wet_kind_t Kind>
static value_t vcsn::detail::polynomialset_impl< Context, Kind >::conv ( self_t  ,
const value_t v 
)
inlinestatic

Conversion from (this and) other weightsets.

Definition at line 1005 of file polynomialset.hh.

References vcsn::detail::v.

template<typename Context , wet_kind_t Kind>
template<typename WS >
value_t vcsn::detail::polynomialset_impl< Context, Kind >::conv ( const WS &  ws,
const typename WS::value_t &  v 
) const
inline

FIXME: use enable_if to prevent this from being instantiated when WS is a polynomialset.

Then use this same technique for expressions.

Definition at line 1015 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<typename C , wet_kind_t K>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::conv ( const polynomialset< C, K > &  sps,
const typename polynomialset< C, K >::value_t v 
) const
inline

Convert from another polynomialset to type_t.

Definition at line 1023 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::conv ( std::istream &  i,
const char  sep = '+' 
) const
inline

Read a polynomial from a stream.

Somewhat more general than a mere reversal of "format", in particular "a+a" is properly understood as "<2>a" in char_z.

Parameters
ithe stream to parse.
septhe separator between monomials.

Definition at line 1292 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::detail::polynomialset_impl< Context, Kind >::conv_label(), vcsn::detail::polynomialset_impl< Context, Kind >::conv_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::langle, vcsn::require(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and SKIP_SPACES.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
boost::optional<label_t> vcsn::detail::polynomialset_impl< Context, Kind >::conv_label ( std::istream &  i,
bool  weighted,
const char  sep = '+' 
) const
inline

Read a label, if there is one.

Does not handle \z, nor letter classes.

Returns
none if there is no label.

Definition at line 1176 of file polynomialset.hh.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::conv(), and vcsn::detail::polynomialset_impl< Context, Kind >::conv_monomial().

template<typename Context , wet_kind_t Kind>
boost::optional<monomial_t> vcsn::detail::polynomialset_impl< Context, Kind >::conv_monomial ( std::istream &  i,
const char  sep = '+' 
) const
inline

Read a monomial from a stream.

Parameters
ithe stream to parse
septhe separator between monomials.
Returns
boost::none on EOF

Definition at line 1260 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::conv_label(), vcsn::detail::polynomialset_impl< Context, Kind >::conv_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::langle, vcsn::require(), and SKIP_SPACES.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
weight_t vcsn::detail::polynomialset_impl< Context, Kind >::conv_weight ( std::istream &  i) const
inline

Read a weight, if there is one, bracketed.

Definition at line 1237 of file polynomialset.hh.

References vcsn::bracketed(), vcsn::conv(), vcsn::detail::polynomialset_impl< Context, Kind >::langle, vcsn::detail::polynomialset_impl< Context, Kind >::rangle, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::conv(), and vcsn::detail::polynomialset_impl< Context, Kind >::conv_monomial().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::del_weight ( value_t v,
const label_t l 
) const
inline

Remove the monomial of l in v.

Definition at line 135 of file polynomialset.hh.

References vcsn::detail::v.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::set_weight().

template<typename Context , wet_kind_t Kind>
monomial_t vcsn::detail::polynomialset_impl< Context, Kind >::determinize ( value_t  v) const
inline

"Determinize" this polynomial: turn into a monomial.

Requires a rather powerful labelset, typically expressionset.

Definition at line 905 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here(), and vcsn::detail::polynomialset_impl< Context, Kind >::to_label().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE bool vcsn::detail::polynomialset_impl< Context, Kind >::equal ( const value_t l,
const value_t r 
)
inlinestatic

Definition at line 954 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::equal_impl ( const value_t l,
const value_t r 
) -> std::enable_if_t<WetType != wet_kind_t::bitset, bool>
inlinestatic

Definition at line 935 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::monomial_equal().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::equal_impl ( const value_t l,
const value_t r 
) -> std::enable_if_t<WetType == wet_kind_t::bitset, bool>
inlinestatic

Definition at line 945 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
const weight_t vcsn::detail::polynomialset_impl< Context, Kind >::get_weight ( const value_t v,
const label_t l 
) const
inline

Definition at line 162 of file polynomialset.hh.

References vcsn::detail::v, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static constexpr bool vcsn::detail::polynomialset_impl< Context, Kind >::has_lightening_weights ( )
inlinestatic

Definition at line 128 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE size_t vcsn::detail::polynomialset_impl< Context, Kind >::hash ( const monomial_t m,
size_t  res = 0 
)
inlinestatic

Definition at line 1095 of file polynomialset.hh.

References vcsn::hash_combine(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::weight_of().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::hash_impl().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE size_t vcsn::detail::polynomialset_impl< Context, Kind >::hash ( const value_t v)
inlinestatic

Definition at line 1126 of file polynomialset.hh.

References vcsn::detail::v.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::hash_impl ( const value_t p) -> std::enable_if_t<WetType != wet_kind_t::bitset, size_t>
inlinestatic

Definition at line 1105 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::hash(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::hash_impl ( const value_t p) -> std::enable_if_t<WetType == wet_kind_t::bitset, size_t>
inlinestatic

Definition at line 1118 of file polynomialset.hh.

References vcsn::detail::hash_value().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::infiltrate ( const value_t l,
const value_t r 
) const
inline

The infiltration of polynomials l and r.

Not valid for all the labelsets.

Definition at line 416 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static constexpr bool vcsn::detail::polynomialset_impl< Context, Kind >::is_commutative ( )
inlinestatic

Definition at line 127 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
monomial_t vcsn::detail::polynomialset_impl< Context, Kind >::ldivide ( const monomial_t l,
const monomial_t r 
) const
inline

Definition at line 604 of file polynomialset.hh.

References vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::ldivide(), and vcsn::detail::polynomialset_impl< Context, Kind >::ldivide_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::ldivide ( const monomial_t l,
const value_t r 
) const
inline

Left division by a monomial.

Definition at line 612 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::ldivide_here ( const weight_t  w,
value_t v 
) const
inline

Left exterior division.

Definition at line 666 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_one(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide(), vcsn::detail::v, vcsn::weight_of(), vcsn::weight_set(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE bool vcsn::detail::polynomialset_impl< Context, Kind >::less ( const value_t l,
const value_t r 
)
inlinestatic

Definition at line 1074 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::less_impl ( const value_t l,
const value_t r 
) -> std::enable_if_t<WetType != wet_kind_t::bitset, bool>
inlinestatic

Definition at line 1055 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::monomial_less().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
static ATTRIBUTE_PURE auto vcsn::detail::polynomialset_impl< Context, Kind >::less_impl ( const value_t l,
const value_t r 
) -> std::enable_if_t<WetType == wet_kind_t::bitset, bool>
inlinestatic

Definition at line 1065 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::lgcd ( const value_t lhs,
const value_t rhs 
) const
inline

LGCD between two polynomials.

Based only on weights. For instance <2>a+<4>b, <3>a+<6>b => <1>a+<2>b. And ab, a => 1. We could try to have ab, a => a in the future.

Definition at line 690 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::one(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::lmul_label ( const label_t lhs,
const value_t v 
) const
inline

Left product by a label.

Definition at line 509 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::weight_of().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::lweight ( const weight_t  w,
const value_t v 
) const
inline
template<typename Context , wet_kind_t Kind>
static self_t vcsn::detail::polynomialset_impl< Context, Kind >::make ( std::istream &  is)
inlinestatic

Build from the description in is.

Definition at line 1133 of file polynomialset.hh.

References vcsn::detail::ctx, and vcsn::eat().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE bool vcsn::detail::polynomialset_impl< Context, Kind >::monomial_equal ( const monomial_t lhs,
const monomial_t rhs 
)
inlinestatic

Definition at line 925 of file polynomialset.hh.

References vcsn::label_of(), and vcsn::weight_of().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::equal_impl().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static ATTRIBUTE_PURE bool vcsn::detail::polynomialset_impl< Context, Kind >::monomial_less ( const monomial_t lhs,
const monomial_t rhs 
)
inlinestatic

Definition at line 1042 of file polynomialset.hh.

References vcsn::label_of(), and vcsn::weight_of().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::less_impl().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static const monomial_t& vcsn::detail::polynomialset_impl< Context, Kind >::monomial_one ( )
inlinestatic
template<typename Context , wet_kind_t Kind>
auto vcsn::detail::polynomialset_impl< Context, Kind >::mul ( const value_t l,
const value_t r 
) const -> value_t
inline

The product of polynomials l and r.

Definition at line 353 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
auto vcsn::detail::polynomialset_impl< Context, Kind >::mul ( const value_t p,
const label_t l,
const weight_t  w 
) const -> value_t
inline

The product of polynomials l and r.

Definition at line 361 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::mul ( const monomial_t lhs,
const value_t v 
) const
inline
template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::mul ( const value_t l,
const monomial_t rhs 
) const
inline
template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
auto vcsn::detail::polynomialset_impl< Context, Kind >::mul_impl ( const value_t l,
const value_t r 
) const -> std::enable_if_t<WetType != wet_kind_t::bitset, value_t>
inline

The product of polynomials l and r.

General case.

Definition at line 327 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType>
auto vcsn::detail::polynomialset_impl< Context, Kind >::mul_impl ( const value_t l,
const value_t r 
) const -> std::enable_if_t<WetType == wet_kind_t::bitset, value_t>
inline

The product of polynomials l and r.

Case of bitsets.

Definition at line 344 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::new_weight ( value_t v,
const label_t l,
const weight_t  w 
) const
inline

Set the monomial of l in v to weight k.

Precondition
w is not null

Definition at line 144 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_zero(), vcsn::detail::v, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::set_weight().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
auto vcsn::detail::polynomialset_impl< Context, Kind >::norm ( const value_t v) const -> weight_t
inline

The norm: the weight with which we should divide a polynomial to normalize it.

Definition at line 759 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_zero(), vcsn::detail::v, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::normalize ( value_t  res) const
inline

Normalized v.

Definition at line 785 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::complement().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
weight_t vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here ( value_t v) const
inline

Normalize v in place: compute the LGCD of the weights, ldivide the monomials with that factor, and return the factor.

Definition at line 775 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_zero(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide_here(), vcsn::detail::polynomialset_impl< Context, Kind >::norm(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::determinize(), and vcsn::detail::polynomialset_impl< Context, Kind >::normalize().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static const value_t& vcsn::detail::polynomialset_impl< Context, Kind >::one ( )
inlinestatic

The unit polynomial.

Definition at line 960 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::monomial_one(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::lgcd(), and vcsn::detail::polynomialset_impl< Context, Kind >::star().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print ( const monomial_t m,
std::ostream &  out,
format  fmt = {} 
) const
inline
template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print ( const value_t v,
std::ostream &  out,
format  fmt = {},
const std::string &  sep = " + " 
) const
inline

Print a value (a polynomial).

Parameters
vthe polynomial
outthe output stream
fmtthe format: "text" or "latex"
septhe separator between monomials

Definition at line 1355 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx = context_t>
std::enable_if_t<!labelset_t_of<Ctx>::is_letterized(), std::ostream&> vcsn::detail::polynomialset_impl< Context, Kind >::print_ ( const value_t v,
std::ostream &  out,
format  fmt = {},
const std::string &  sep = " + " 
) const
inlineprivate

Print a non-null value for a non letterized labelset.

Definition at line 1481 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<typename Ctx = context_t>
std::enable_if_t<labelset_t_of<Ctx>::is_letterized(), std::ostream&> vcsn::detail::polynomialset_impl< Context, Kind >::print_ ( const value_t v,
std::ostream &  out,
format  fmt = {},
const std::string &  sep = " + " 
) const
inlineprivate

Print a non-null value for a letterized labelset (e.g., letterset or nullableset.

Definition at line 1493 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print_set ( std::ostream &  o,
format  fmt = {} 
) const
inline

Definition at line 1143 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print_weight_ ( const weight_t  w,
std::ostream &  out,
format  fmt 
) const
inlineprivate

Print a weight.

Definition at line 1379 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_one(), vcsn::format::latex, vcsn::detail::out(), vcsn::detail::polynomialset_impl< Context, Kind >::show_one(), vcsn::format::utf8, and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::print_with_classes_().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print_with_classes_ ( const value_t v,
std::ostream &  out,
format  fmt,
const std::string &  sep 
) const
inlineprivate
template<typename Context , wet_kind_t Kind>
std::ostream& vcsn::detail::polynomialset_impl< Context, Kind >::print_without_classes_ ( const value_t v,
std::ostream &  out,
format  fmt,
const std::string &  sep 
) const
inlineprivate

Print a polynomial value without classes.

Definition at line 1398 of file polynomialset.hh.

References vcsn::detail::out(), and vcsn::detail::polynomialset_impl< Context, Kind >::print().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<size_t Tape>
auto vcsn::detail::polynomialset_impl< Context, Kind >::project ( ) const
inline

The polynomialset for tape Tape.

Definition at line 817 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::context(), and vcsn::detail::make_polynomialset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<size_t Tape>
auto vcsn::detail::polynomialset_impl< Context, Kind >::project ( const value_t v) const
inline

Extract a single tape.

Definition at line 824 of file polynomialset.hh.

References vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::weight_of().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::rdivide ( const value_t l,
const value_t r 
) const
inline

Definition at line 597 of file polynomialset.hh.

References vcsn::to_string().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::rdivide_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::rdivide_here ( value_t v,
const weight_t  w 
) const
inline

Right exterior division.

Definition at line 676 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::is_one(), vcsn::detail::polynomialset_impl< Context, Kind >::rdivide(), vcsn::detail::v, vcsn::weight_of(), vcsn::weight_set(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::rmul_label ( const value_t v,
const label_t rhs 
) const
inline

Right product.

Definition at line 574 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::weight_of().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
auto vcsn::detail::polynomialset_impl< Context, Kind >::rweight ( const value_t v,
const weight_t  w 
) const -> value_t
inline
template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType = value_t::kind>
auto vcsn::detail::polynomialset_impl< Context, Kind >::scalar_product ( const value_t l,
const value_t r 
) const -> std::enable_if_t<WetType != wet_kind_t::bitset, weight_t>
inline

The sum of the weights of the common labels.

Default case.

Definition at line 431 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType = value_t::kind, typename WS = weightset_t>
auto vcsn::detail::polynomialset_impl< Context, Kind >::scalar_product ( const value_t l,
const value_t r 
) const -> std::enable_if_t<(WetType == wet_kind_t::bitset && std::is_same<WS, b>::value), weight_t>
inline

The sum of the weights of the common labels.

B and bitsets.

Definition at line 447 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
template<wet_kind_t WetType = value_t::kind, typename WS = weightset_t>
auto vcsn::detail::polynomialset_impl< Context, Kind >::scalar_product ( const value_t l,
const value_t r 
) const -> std::enable_if_t<(WetType == wet_kind_t::bitset && std::is_same<WS, f2>::value), weight_t>
inline

The sum of the weights of the common labels.

F2 and bitsets.

Definition at line 459 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
const self_t& vcsn::detail::polynomialset_impl< Context, Kind >::self ( ) const
inline

Ourself, but after the application of weightset_mixin.

FIXME: this is ugly. It is due to the fact that instead of the CRTP, we used a mixin approach to add features to expressionset as opposed to expressionset_impl. Except that here, we have an expression_impl, and we need the expression. So after all, maybe the CRTP is a better approach.

Cannot be a reference member, as we do support assignments, in which case the copied self would point to the original this.

Definition at line 114 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::set_weight ( value_t v,
const label_t l,
const weight_t  w 
) const
inline

Set the monomial of l in v to weight w.

Definition at line 153 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::del_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::is_zero(), vcsn::detail::polynomialset_impl< Context, Kind >::new_weight(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::add_here().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static constexpr bool vcsn::detail::polynomialset_impl< Context, Kind >::show_one ( )
inlinestatic
template<typename Context , wet_kind_t Kind>
static symbol vcsn::detail::polynomialset_impl< Context, Kind >::sname ( )
inlinestatic

The static name.

Definition at line 117 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::sname().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::star ( const value_t v) const
inline

The star of polynomial v.

Definition at line 478 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::one(), vcsn::raise_not_starrable(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
static constexpr star_status_t vcsn::detail::polynomialset_impl< Context, Kind >::star_status ( )
inlinestatic

Definition at line 998 of file polynomialset.hh.

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::sub ( const value_t l,
const value_t r 
) const
inline

The subtraction of polynomials l and r.

Definition at line 302 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::detail::polynomialset_impl< Context, Kind >::sub_here().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::ldivide().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t& vcsn::detail::polynomialset_impl< Context, Kind >::sub_here ( value_t v,
const monomial_t m 
) const
inline
template<typename Context , wet_kind_t Kind>
label_t vcsn::detail::polynomialset_impl< Context, Kind >::to_label ( const value_t v) const
inline

Convert into a label.

Requires a rather powerful labelset, typically expressionset. Typical usage is therefore to "project" a polynomial of expressions into an expression (say for complement for instance).

Definition at line 893 of file polynomialset.hh.

References vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::lweight(), vcsn::detail::polynomialset_impl< Context, Kind >::res, and vcsn::weight_of().

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::complement(), and vcsn::detail::polynomialset_impl< Context, Kind >::determinize().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
value_t vcsn::detail::polynomialset_impl< Context, Kind >::transpose ( const value_t v) const
inline

Definition at line 1081 of file polynomialset.hh.

References vcsn::label_of(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), vcsn::detail::polynomialset_impl< Context, Kind >::res, vcsn::weight_of(), and vcsn::detail::polynomialset_impl< Context, Kind >::weightset().

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
template<typename... Polys>
auto vcsn::detail::polynomialset_impl< Context, Kind >::tuple ( Polys &&...  vs) const -> value_t
inline

Build a tuple of polynomials: (e.E+f.F)|(g.G+h.H) => eg.

(E|G) + eh.(E|H) + fg.(F|G) + fh.(F|H).

Definition at line 801 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::detail::cross(), vcsn::detail::polynomialset_impl< Context, Kind >::labelset(), and vcsn::detail::polynomialset_impl< Context, Kind >::res.

Here is the call graph for this function:

template<typename Context , wet_kind_t Kind>
const weightset_ptr& vcsn::detail::polynomialset_impl< Context, Kind >::weightset ( ) const
inline

Definition at line 125 of file polynomialset.hh.

References vcsn::detail::polynomialset_impl< Context, Kind >::ctx_.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::abs(), vcsn::detail::polynomialset_impl< Context, Kind >::add_here(), vcsn::detail::polynomialset_impl< Context, Kind >::complement(), vcsn::detail::polynomialset_impl< Context, Kind >::conjunction_impl(), vcsn::detail::polynomialset_impl< Context, Kind >::conv(), vcsn::detail::polynomialset_impl< Context, Kind >::conv_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::get_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::infiltrate(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide_here(), vcsn::detail::polynomialset_impl< Context, Kind >::lgcd(), vcsn::detail::polynomialset_impl< Context, Kind >::lweight(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::mul_impl(), vcsn::detail::polynomialset_impl< Context, Kind >::new_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::norm(), vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here(), vcsn::detail::polynomialset_impl< Context, Kind >::print_weight_(), vcsn::detail::polynomialset_impl< Context, Kind >::rdivide_here(), vcsn::detail::polynomialset_impl< Context, Kind >::rweight(), vcsn::detail::polynomialset_impl< Context, Kind >::scalar_product(), vcsn::detail::polynomialset_impl< Context, Kind >::set_weight(), vcsn::detail::polynomialset_impl< Context, Kind >::star(), vcsn::detail::polynomialset_impl< Context, Kind >::sub_here(), and vcsn::detail::polynomialset_impl< Context, Kind >::transpose().

template<typename Context , wet_kind_t Kind>
const value_t& vcsn::detail::polynomialset_impl< Context, Kind >::zero ( ) const
inline

Member Data Documentation

template<typename Context , wet_kind_t Kind>
constexpr char vcsn::detail::polynomialset_impl< Context, Kind >::langle = '<'
staticprivate
template<typename Context , wet_kind_t Kind>
constexpr char vcsn::detail::polynomialset_impl< Context, Kind >::rangle = '>'
staticprivate

Right marker for weight in concrete syntax.

Definition at line 1511 of file polynomialset.hh.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::conv_weight().

template<typename Context , wet_kind_t Kind>
for (const auto& lm: l) for ( const auto& rm return vcsn::detail::polynomialset_impl< Context, Kind >::res

Definition at line 859 of file polynomialset.hh.

Referenced by vcsn::detail::polynomialset_impl< Context, Kind >::abs(), vcsn::detail::polynomialset_impl< Context, Kind >::add(), vcsn::detail::polynomialset_impl< Context, Kind >::conjunction_impl(), vcsn::detail::polynomialset_impl< Context, Kind >::conv(), vcsn::detail::polynomialset_impl< Context, Kind >::hash(), vcsn::detail::polynomialset_impl< Context, Kind >::hash_impl(), vcsn::detail::polynomialset_impl< Context, Kind >::infiltrate(), vcsn::detail::polynomialset_impl< Context, Kind >::ldivide(), vcsn::detail::polynomialset_impl< Context, Kind >::lgcd(), vcsn::detail::polynomialset_impl< Context, Kind >::lmul_label(), vcsn::detail::polynomialset_impl< Context, Kind >::lweight(), vcsn::detail::polynomialset_impl< Context, Kind >::monomial_one(), vcsn::detail::polynomialset_impl< Context, Kind >::mul(), vcsn::detail::polynomialset_impl< Context, Kind >::mul_impl(), vcsn::detail::polynomialset_impl< Context, Kind >::normalize(), vcsn::detail::polynomialset_impl< Context, Kind >::normalize_here(), vcsn::detail::polynomialset_impl< Context, Kind >::one(), vcsn::detail::polynomialset_impl< Context, Kind >::norm_< z, Dummy >::operator()(), vcsn::detail::polynomialset_impl< Context, Kind >::norm_< polynomialset< Ctx, Knd >, Dummy >::operator()(), vcsn::detail::polynomialset_impl< Context, Kind >::project(), vcsn::detail::polynomialset_impl< Context, Kind >::rmul_label(), vcsn::detail::polynomialset_impl< Context, Kind >::rweight(), vcsn::detail::polynomialset_impl< Context, Kind >::scalar_product(), vcsn::detail::polynomialset_impl< Context, Kind >::sname(), vcsn::detail::polynomialset_impl< Context, Kind >::sub(), vcsn::detail::polynomialset_impl< Context, Kind >::to_label(), vcsn::detail::polynomialset_impl< Context, Kind >::transpose(), vcsn::detail::polynomialset_impl< Context, Kind >::tuple(), and vcsn::detail::polynomialset_impl< Context, Kind >::zero().

template<typename Context , wet_kind_t Kind>
vcsn::detail::polynomialset_impl< Context, Kind >::value_t
Initial value:

Definition at line 857 of file polynomialset.hh.


The documentation for this class was generated from the following files: