piranha
0.10
|
Divisor series. More...
#include <piranha/divisor_series.hpp>
Public Types | |
template<typename Cf2 > | |
using | rebind = divisor_series< Cf2, Key > |
Series rebind alias. | |
using | term_type = term< Cf, Key > |
Alias for term type. | |
using | size_type = typename container_type::size_type |
Size type. More... | |
using | const_iterator = const_iterator_impl |
Const iterator. More... | |
Public Member Functions | |
divisor_series ()=default | |
Defaulted default constructor. | |
divisor_series (const divisor_series &)=default | |
Defaulted copy constructor. | |
divisor_series (divisor_series &&)=default | |
Defaulted move constructor. | |
~divisor_series () | |
Trivial destructor. | |
divisor_series & | operator= (const divisor_series &other)=default |
Copy assignment operator. More... | |
divisor_series & | operator= (divisor_series &&other)=default |
Move assignment operator. More... | |
template<typename T = divisor_series> | |
inverse_type< T > | invert () const |
Inversion. More... | |
template<typename T = divisor_series> | |
partial_type< T > | partial (const std::string &name) const |
Partial derivative. More... | |
template<typename T = divisor_series> | |
integrate_type< T > | integrate (const std::string &name) const |
Integration. More... | |
degree_type< T > | degree () const |
Total degree. More... | |
pdegree_type< T > | degree (const symbol_fset &names) const |
Partial degree. More... | |
ldegree_type< T > | ldegree () const |
Total low degree. More... | |
pldegree_type< T > | ldegree (const symbol_fset &names) const |
Partial low degree. More... | |
divisor_series< Cf, Key > | truncate_degree (const T &max_degree) const |
Total degree truncation. More... | |
divisor_series< Cf, Key > | truncate_degree (const T &max_degree, const symbol_fset &names) const |
Partial degree truncation. More... | |
ipow_subs_type< T > | ipow_subs (const std::string &name, const integer &n, const T &x) const |
Substitution. More... | |
ipow_subs_type< T > | ipow_subs (const std::string &name, const Int &n, const T &x) const |
Substitution. More... | |
subs_type< T > | subs (const symbol_fmap< T > &dict) const |
Substitution. More... | |
size_type | size () const |
Series size. More... | |
bool | empty () const |
Empty test. More... | |
bool | is_single_coefficient () const |
Test for single-coefficient series. More... | |
void | insert (T &&term) |
Insert term. More... | |
void | insert (T &&term) |
Insert generic term with Sign = true . More... | |
divisor_series< Cf, Key > | operator+ () const |
Identity operator. More... | |
divisor_series< Cf, Key > | operator- () const |
Negation operator. More... | |
void | negate () |
Negate series in-place. More... | |
pow_ret_type< T, U > | pow (const T &x) const |
Exponentiation. More... | |
const_iterator | begin () const |
Begin iterator. More... | |
const_iterator | end () const |
End iterator. More... | |
divisor_series< Cf, Key > | filter (std::function< bool(const std::pair< typename term_type::cf_type, divisor_series< Cf, Key > > &)> func) const |
Term filtering. More... | |
divisor_series< Cf, Key > | transform (std::function< std::pair< typename term_type::cf_type, divisor_series< Cf, Key > >(const std::pair< typename term_type::cf_type, divisor_series< Cf, Key > > &)> func) const |
Term transformation. More... | |
divisor_series< Cf, Key > | trim () const |
Trim. More... | |
void | print_tex (std::ostream &os) const |
Print in TeX mode. More... | |
std::size_t | hash () const |
Hash value. More... | |
bool | is_identical (const divisor_series< Cf, Key > &other) const |
Check for identical series. More... | |
const symbol_fset & | get_symbol_set () const |
Symbol set getter. More... | |
void | set_symbol_set (const symbol_fset &args) |
Symbol set setter. More... | |
Table-querying methods | |
Methods to query the properties of the internal container used to store the terms. | |
sparsity_info_type | table_sparsity () const |
Table sparsity. More... | |
double | table_load_factor () const |
Table load factor. More... | |
size_type | table_bucket_count () const |
Table bucket count. More... | |
Low-level interface | |
Low-level methods. | |
container_type & | _container () |
Get a mutable reference to the container of terms. More... | |
const container_type & | _container () const |
Get a const reference to the container of terms. More... | |
Static Public Member Functions | |
static void | clear_pow_cache () |
Clear the internal cache of natural powers. More... | |
static void | register_custom_derivative (const std::string &name, F func) |
Register custom partial derivative. More... | |
static void | unregister_custom_derivative (const std::string &name) |
Unregister custom partial derivative. More... | |
static void | unregister_all_custom_derivatives () |
Unregister all custom partial derivatives. More... | |
Protected Types | |
using | container_type = hash_set< term_type > |
Container type for terms. | |
Protected Attributes | |
symbol_fset | m_symbol_set |
Symbol set. | |
container_type | m_container |
Terms container. | |
Divisor series.
This class represents series in which the keys are divisor (see piranha::divisor) and the coefficient type is generic. This class satisfies the piranha::is_series and piranha::is_cf type traits.
Cf
must be suitable for use in piranha::series as first template argument, Key
must be an instance of piranha::divisor.
This class provides the same guarantee as the base series type it derives from.
Move semantics is equivalent to the move semantics of the base series type it derives from.
Definition at line 44 of file divisor_series_fwd.hpp.
|
inherited |
Const iterator.
Iterator type that can be used to iterate over the terms of the series. The object returned upon dereferentiation is an std::pair
in which the first element is a copy of the coefficient of the term, the second element a single-term instance of Derived
constructed from the term's key and a unitary coefficient.
This iterator is an input iterator which additionally offers the multi-pass guarantee.
Definition at line 1994 of file series.hpp.
|
inherited |
Size type.
Used to represent the number of terms in the series. Equivalent to piranha::hash_set::size_type.
Definition at line 1981 of file series.hpp.
|
inlineinherited |
Get a mutable reference to the container of terms.
Definition at line 2788 of file series.hpp.
|
inlineinherited |
Get a const reference to the container of terms.
Definition at line 2796 of file series.hpp.
|
inlineinherited |
Begin iterator.
Return an iterator to the first term of the series. The returned iterator will provide, when dereferenced, an std::pair
in which the first element is a copy of the coefficient of the term, whereas the second element is a single-term instance of Derived
built from the term's key and a unitary coefficient.
Note that terms are stored unordered in the series, hence it is not defined which particular term will be returned by calling this method. The only guarantee is that the iterator can be used to transverse all the series' terms until piranha::series::end() is eventually reached.
Calling any non-const method on the series will invalidate the iterators obtained via piranha::series::begin() and piranha::series::end().
unspecified | any exception thrown by:
|
Definition at line 2504 of file series.hpp.
|
inlinestaticinherited |
Clear the internal cache of natural powers.
This method can be used to clear the cache of natural powers of series maintained by piranha::series::pow().
unspecified | any exception thrown by threading primitives. |
Definition at line 2371 of file series.hpp.
|
inlineinherited |
Total degree.
The degree of the series is the maximum degree of its terms. If the series is empty, zero will be returned.
std::overflow_error | if the computation results in an overflow. |
unspecified | any exception thrown by:
|
Definition at line 390 of file power_series.hpp.
|
inlineinherited |
Partial degree.
The partial degree of the series is the maximum partial degree of its terms. If the series is empty, zero will be returned.
names | names of the variables to be considered in the computation of the degree. |
std::overflow_error | if the computation results in an overflow. |
unspecified | any exception thrown by:
|
Definition at line 444 of file power_series.hpp.
|
inlineinherited |
Empty test.
true
if size() is nonzero, false
otherwise. Definition at line 2103 of file series.hpp.
|
inlineinherited |
End iterator.
Return an iterator one past the last term of the series. See the documentation of piranha::series::begin() on how the returned iterator can be used.
unspecified | any exception thrown by:
|
Definition at line 2523 of file series.hpp.
|
inlineinherited |
Term filtering.
This method will apply the functor func
to each term in the series, and produce a return series containing all terms in this
for which func
returns true
. Terms are passed to func
in the format resulting from dereferencing the iterators obtained via piranha::series::begin().
func | filtering functor. |
unspecified | any exception thrown by:
|
Definition at line 2547 of file series.hpp.
|
inlineinherited |
Symbol set getter.
Definition at line 2762 of file series.hpp.
|
inlineinherited |
Hash value.
The hash value for a series is zero if the series is empty, otherwise it is computed by adding the hash values of all terms. This ensures that two identical series in which the terms are stored in different order still produce the same hash value.
Note, however, that the arguments of the series are not considered in the hash value and that, in general, two series that compare equal according to operator==() will not have the same hash value (as the equality operator merges the arguments of two series before actually performing the comparison). Instead of operator==(), is_identical() should be used for storing series as keys in associative containers.
unspecified | any exception thrown by computing the hash of a term. |
Definition at line 2730 of file series.hpp.
|
inlineinherited |
Insert term.
T
is piranha::series::term_type.This method will insert term
into the series using internally piranha::hash_set::insert.
The insertion algorithm proceeds as follows:
std::invalid_argument
exception is thrown;Sign
is true
) or subtracted (if Sign
is false
) to the existing term's coefficient;Sign
is false
, its coefficient is negated.After any modification to an existing term in the series (e.g., via insertion with negative Sign
or via in-place addition or subtraction of existing coefficients), the term will be checked again for compatibility and ignorability, and, in case the term has become incompatible or ignorable, it will be erased from the series.
The exception safety guarantee upon insertion is that the series will be left in an undefined but valid state. Such a guarantee relies on the fact that the addition/subtraction and negation methods of the coefficient type will leave the coefficient in a valid (possibly undefined) state in face of exceptions.
term | term to be inserted. |
unspecified | any exception thrown by:
|
std::invalid_argument | if term is incompatible. |
Definition at line 2161 of file series.hpp.
|
inlineinherited |
Insert generic term with Sign = true
.
T
is piranha::series::term_type.Convenience wrapper for the generic insert() method, with Sign
set to true
.
term | term to be inserted. |
unspecified | any exception thrown by generic insert(). |
Definition at line 2177 of file series.hpp.
|
inline |
Integration.
int
.Integration for divisor series is supported only if the coefficient is integrable and no divisor in the calling series depends on the integration variable.
name | name of the variable with respect to which the integration will be performed. |
this
with respect to name
.std::invalid_argument | if at least one divisor depends on the integration variable. |
unspecified | any exception thrown by:
|
Definition at line 528 of file divisor_series.hpp.
|
inline |
Inversion.
This method works exactly like the default implementation of piranha::math::invert() for series types, unless:
Under these circumstances, this method will attempt to construct a divisor from the first polynomial coefficient encountered in the hierarchy, and, if successful, it will return a piranha::divisor_series consisting of a single term with unitary coefficient and with the key containing the divisor built from the polynomial.
For example, inverting the following divisor series with polynomial coefficient
\[ 2x+4y \]
will result in the construction of the divisor series
\[ \frac{1}{2}\frac{1}{\left(x+2y\right)}. \]
In order for the procedure described above to be successful, the polynomial coefficient must be equivalent to an integral linear combination of symbols with no constant term. If this special inversion fails, a call to the default implementation of piranha::math::invert() will be attempted.
this
.unspecified | any exception thrown by:
|
Definition at line 461 of file divisor_series.hpp.
|
inlineinherited |
Substitution.
This method will return an object resulting from the substitution of the integral power of the symbol called name
in this
with the generic object x
.
name | name of the symbol to be substituted. |
n | integral power of the symbol to be substituted. |
x | object used for the substitution. |
unspecified | any exception resulting from:
|
Definition at line 224 of file ipow_substitutable_series.hpp.
|
inlineinherited |
Substitution.
Int
is a C++ integral type.This is a convenience method that will call the other ipow_subs() overload after converting n
to piranha::integer.
name | name of the symbol to be substituted. |
n | integral power of the symbol to be substituted. |
x | object used for the substitution. |
unspecified | any exception resulting from calling the other ipow_subs() overload, or by constructing a piranha::integer from a C++ integral type. |
Definition at line 252 of file ipow_substitutable_series.hpp.
|
inlineinherited |
Check for identical series.
Derived
is equality-comparable.This method will return true
if the symbol sets of this
and other
are the same, and other == *this
.
other | argument for the comparison. |
true
if this
and other
are identical, false
otherwise.unspecified | any exception thrown by the comparison operator of Derived . |
Definition at line 2754 of file series.hpp.
|
inlineinherited |
Test for single-coefficient series.
A series is considered to be single-coefficient when it is symbolically equivalent to a coefficient. That is, the series is either empty (in which case it is considered to be equivalent to a coefficient constructed from zero) or consisting of a single term with unitary key (in which case the series is considered equivalent to its only coefficient).
true
in case of single-coefficient series, false
otherwise.unspecified | any exception thrown by the is_unitary() method of the key type. |
Definition at line 2118 of file series.hpp.
|
inlineinherited |
Total low degree.
The low degree of the series is the minimum low degree of its terms. If the series is empty, zero will be returned.
std::overflow_error | if the computation results in an overflow. |
unspecified | any exception thrown by:
|
Definition at line 416 of file power_series.hpp.
|
inlineinherited |
Partial low degree.
The partial low degree of the series is the minimum partial low degree of its terms. If the series is empty, zero will be returned.
names | names of the variables to be considered in the computation of the low degree. |
std::overflow_error | if the computation results in an overflow. |
unspecified | any exception thrown by:
|
Definition at line 475 of file power_series.hpp.
|
inlineinherited |
Negate series in-place.
This method will call math::negate() on the coefficients of all terms. In case of exceptions, the basic exception safety guarantee is provided.
If any term becomes ignorable or incompatible after negation, it will be erased from the series.
unspecified | any exception thrown by math::negate() on the coefficient type. |
Definition at line 2214 of file series.hpp.
|
inlineinherited |
Identity operator.
this
, cast to Derived
.unspecified | any exception thrown by the copy constructor. |
Definition at line 2187 of file series.hpp.
|
inlineinherited |
Negation operator.
this
on which negate() has been called.unspecified | any exception thrown by:
|
Definition at line 2199 of file series.hpp.
|
default |
Copy assignment operator.
other | the assignment argument. |
this
.unspecified | any exception thrown by the assignment operator of the base class. |
|
default |
Move assignment operator.
other | the assignment argument. |
this
.
|
inline |
Partial derivative.
This method will compute the partial derivative of this
with respect to the symbol called name
. The derivative is computed via differentiation of the coefficients and the application of the product rule.
name | name of the variable with respect to which the differentiation will be computed. |
this
with respect to name
.std::overflow_error | if the manipulation of integral exponents and multipliers in the divisors results in an overflow. |
unspecified | any exception thrown by:
|
Definition at line 492 of file divisor_series.hpp.
|
inlineinherited |
Exponentiation.
Return this
raised to the x
-th power. The type of the result is either the calling series type, or the calling series type rebound to the type resulting from the exponentiation of the coefficient of the calling type to the power of x
. The exponentiation algorithm proceeds as follows:
x
;x
is zero (as established by piranha::math::is_zero()), a series with a single term with unitary key and coefficient constructed from the integer numeral "1" is returned (i.e., any series raised to the power of zero is 1 - including empty series);x
represents a non-negative integral value, the return value is constructed via repeated multiplications;An internal thread-safe cache of natural powers of series is maintained in order to improve performance during, e.g., substitution operations. This cache can be cleared with clear_pow_cache().
x | exponent. |
this
raised to the power of x
.std::invalid_argument | if exponentiation is computed via repeated series multiplications and x does not represent a non-negative integer. |
unspecified | any exception thrown by:
|
Definition at line 2304 of file series.hpp.
|
inlineinherited |
Print in TeX mode.
Print series to stream os
in TeX mode. The representation is constructed in the same way as explained in piranha::series::operator<<(), but using piranha::print_tex_coefficient() and the key's TeX printing method instead of the plain printing functions.
os | target stream. |
unspecified | any exception thrown by:
|
Definition at line 2654 of file series.hpp.
|
inlinestaticinherited |
Register custom partial derivative.
Derived
, and if F
is a type that can be used to construct std::function<partial_type(const Derived &)
, where partial_type
is the type resulting from the partial derivative of Derived
.Register a copy of a callable func
associated to the symbol name
for use by piranha::math::partial(). func
will be used to compute the partial derivative of instances of type Derived
with respect to name
in place of the default partial differentiation algorithm.
It is safe to call this method from multiple threads.
name | symbol for which the custom partial derivative function will be registered. |
func | custom partial derivative function. |
unspecified | any exception thrown by:
|
Definition at line 2432 of file series.hpp.
|
inlineinherited |
Symbol set setter.
args | piranha::symbol_fset that will be associated to the series. |
std::invalid_argument | if the series is not empty. |
unspecified | any exception thrown by the copy assignment operator of piranha::symbol_fset. |
Definition at line 2773 of file series.hpp.
|
inlineinherited |
|
inlineinherited |
Substitution.
T
must be suitable for use in sm_intersect_idx().This method will return an object resulting from the substitution in this
of the symbols in dict
with the mapped values.
dict | a dictionary mapping a set of symbols to the values that will be substituted for them. |
unspecified | any exception resulting from:
|
Definition at line 218 of file substitutable_series.hpp.
|
inlineinherited |
Table bucket count.
Definition at line 2263 of file series.hpp.
|
inlineinherited |
Table load factor.
Will call piranha::hash_set::load_factor() on the internal terms container and return the result.
Definition at line 2255 of file series.hpp.
|
inlineinherited |
Table sparsity.
Will call piranha::hash_set::evaluate_sparsity() on the internal terms container and return the result.
unspecified | any exception thrown by piranha::hash_set::evaluate_sparsity(). |
Definition at line 2244 of file series.hpp.
|
inlineinherited |
Term transformation.
This method will apply the functor func
to each term in the series, and will use the return value of the functor to construct a new series. Terms are passed to func
in the same format resulting from dereferencing the iterators obtained via piranha::series::begin(), and func
is expected to produce a return value of the same type.
The return series is first initialised as an empty series. For each input term t
, the return value of func
is used to construct a new temporary series from the multiplication of t.first
and t.second
. Each temporary series is then added to the return value series.
This method requires the coefficient type to be multipliable by Derived
.
func | transforming functor. |
unspecified | any exception thrown by:
|
Definition at line 2585 of file series.hpp.
|
inlineinherited |
Trim.
This method will return a series mathematically equivalent to this
in which discardable arguments have been removed from the internal set of symbols. Which symbols are removed depends on the trimming method trim_identify()
of the key type (e.g., in a polynomial a symbol can be discarded if its exponent is zero in all monomials).
If the coefficient type is an instance of piranha::series, trim() will be called recursively on the coefficients while building the return value.
this
.unspecified | any exception thrown by:
|
Definition at line 2619 of file series.hpp.
|
inlineinherited |
Total degree truncation.
This method can be used to eliminate the parts of a series whose degree is greater than max_degree
. This includes the elimination of whole terms, but also the recursive truncation of coefficients via the piranha::math::truncate_degree() function, if supported by the coefficient. It must be noted that, in general, this method is not guaranteed to eliminate all the parts whose degree is greater than max_degree
(in particular, in the current implementation there is no truncation implemented for keys - a key is kept as-is or completely eliminated).
max_degree | maximum allowed total degree. |
this
.unspecified | any exception thrown by:
|
Definition at line 510 of file power_series.hpp.
|
inlineinherited |
Partial degree truncation.
This method is equivalent to the other overload, the only difference being that the partial degree is considered in the computation.
max_degree | maximum allowed partial degree. |
names | names of the variables to be considered in the computation of the partial degree. |
this
.unspecified | any exception thrown by:
|
Definition at line 543 of file power_series.hpp.
|
inlinestaticinherited |
Unregister all custom partial derivatives.
Derived
.Will unregister all custom derivatives currently registered via register_custom_derivative(). It is safe to call this method from multiple threads.
unspecified | any exception thrown by failure(s) in threading primitives. |
Definition at line 2478 of file series.hpp.
|
inlinestaticinherited |
Unregister custom partial derivative.
Derived
.Unregister the custom partial derivative function associated to the symbol name
. If no custom partial derivative was previously registered using register_custom_derivative(), calling this function will be a no-op.
It is safe to call this method from multiple threads.
name | symbol for which the custom partial derivative function will be unregistered. |
unspecified | any exception thrown by:
|
Definition at line 2459 of file series.hpp.