26#include <boost/format.hpp>
27#include <boost/lexical_cast.hpp>
43template <
typename _Coefficient,
typename _FunctionType>
45 public Function<sum_t<_Coefficient, typename _FunctionType::OutputType>, typename _FunctionType::InputType>,
89 throw std::invalid_argument(
"EvaluableLinearCombination(const std::vector<Coefficient>&, const std::vector<FunctionType>&): The number of coefficients and functions do not match.");
129 throw std::invalid_argument(
"EvaluableLinearCombination(const int): Can't convert a non-zero integer to a 'zero' instance.");
152 if (std::abs(a) < 1.0e-16) {
153 this->m_coefficients = std::vector<Coefficient> {};
154 this->m_functions = std::vector<FunctionType> {};
158 std::transform(this->m_coefficients.begin(), this->m_coefficients.end(),
159 this->m_coefficients.begin(), [a](
const Coefficient& C) { return C * a; });
175 for (
size_t i = 0; i < this->
length(); i++) {
181 if (i != this->
length() - 1) {
182 description +=
" + ";
194 size_t length()
const {
return this->m_coefficients.size(); }
245 const auto n = this->
length();
246 for (
size_t i = 0; i < n; i++) {
247 out += this->m_coefficients[i] * this->m_functions[i].operator()(in);
281 this->m_functions.push_back(
function);
312 throw std::invalid_argument(
"EvaluableLinearCombination::append(const std::vector<Coefficient>&, const std::vector<FunctionType>&): The number of coefficients and functions do not match.");
316 this->m_functions.insert(this->m_functions.end(),
functions.begin(),
functions.end());
324#include <Eigen/Dense>
333template <
typename Coefficient,
typename FunctionType>
334struct NumTraits<
GQCP::EvaluableLinearCombination<Coefficient, FunctionType>>:
335 public NumTraits<double> {
345 RequireInitialization = 1,
355template <
typename Coefficient,
typename FunctionType>
356struct ScalarBinaryOpTraits<
GQCP::EvaluableLinearCombination<Coefficient, FunctionType>, Coefficient,
357 Eigen::internal::scalar_product_op<GQCP::EvaluableLinearCombination<Coefficient, FunctionType>, Coefficient>> {
362template <
typename Coefficient,
typename FunctionType>
363struct ScalarBinaryOpTraits<Coefficient,
GQCP::EvaluableLinearCombination<Coefficient, FunctionType>,
364 Eigen::internal::scalar_product_op<Coefficient, GQCP::EvaluableLinearCombination<Coefficient, FunctionType>>> {
Definition: EvaluableLinearCombination.hpp:46
EvaluableLinearCombination(const Coefficient coefficient, const FunctionType &function)
Definition: EvaluableLinearCombination.hpp:107
EvaluableLinearCombination(const std::vector< Coefficient > &coefficients, const std::vector< FunctionType > &functions)
Definition: EvaluableLinearCombination.hpp:84
_FunctionType FunctionType
Definition: EvaluableLinearCombination.hpp:53
Self & operator+=(const Self &rhs) override
Definition: EvaluableLinearCombination.hpp:141
std::vector< FunctionType > m_functions
Definition: EvaluableLinearCombination.hpp:72
const std::vector< FunctionType > & functions() const
Definition: EvaluableLinearCombination.hpp:227
EvaluableLinearCombination(const int zero)
Definition: EvaluableLinearCombination.hpp:125
const FunctionType & function(const size_t i) const
Definition: EvaluableLinearCombination.hpp:222
std::string description() const
Definition: EvaluableLinearCombination.hpp:172
Self & operator*=(const Coefficient &a) override
Definition: EvaluableLinearCombination.hpp:150
typename FunctionType::InputType InputType
Definition: EvaluableLinearCombination.hpp:59
OutputType operator()(const InputType &in) const override
Definition: EvaluableLinearCombination.hpp:241
void append(const std::vector< Coefficient > &coefficients, const std::vector< FunctionType > &functions)
Definition: EvaluableLinearCombination.hpp:309
void appendWithThreshold(const Coefficient &coefficient, const FunctionType &function, const double threshold=1.0e-16)
Definition: EvaluableLinearCombination.hpp:292
EvaluableLinearCombination()
Definition: EvaluableLinearCombination.hpp:97
sum_t< Coefficient, typename FunctionType::OutputType > OutputType
Definition: EvaluableLinearCombination.hpp:56
const std::vector< Coefficient > & coefficients() const
Definition: EvaluableLinearCombination.hpp:213
bool operator==(const Self &other) const
Definition: EvaluableLinearCombination.hpp:263
void append(const Coefficient &coefficient, const FunctionType &function)
Definition: EvaluableLinearCombination.hpp:278
EvaluableLinearCombination(const FunctionType &function)
Definition: EvaluableLinearCombination.hpp:116
_Coefficient Coefficient
Definition: EvaluableLinearCombination.hpp:50
std::vector< Coefficient > m_coefficients
Definition: EvaluableLinearCombination.hpp:69
size_t length() const
Definition: EvaluableLinearCombination.hpp:194
const Coefficient & coefficient(const size_t i) const
Definition: EvaluableLinearCombination.hpp:208
Definition: Function.hpp:153
Definition: VectorSpaceArithmetic.hpp:35
Definition: EvaluableLinearCombination.hpp:330
Definition: BaseOneElectronIntegralBuffer.hpp:25
decltype(std::declval< T >()+std::declval< U >()) sum_t
Definition: aliases.hpp:38