14 #define CREATE_SHARED_WRAPPER(C) template <class... Args> static std::shared_ptr<C> create(Args... args) { return std::shared_ptr<C>(new C(std::forward<Args>(args)...)); }    19 class Variable : 
public std::enable_shared_from_this<Variable> {
    25         virtual std::string 
name() 
const = 0;
    34         virtual std::string 
nameBracketed(
const std::string &bracketL = 
"(", 
const std::string &bracketR = 
")") 
const;
    51         virtual void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) 
const = 0;
    60         Eigen::VectorXd 
values(
unsigned int rows = 0, 
unsigned int offset = 0, 
unsigned int trim = 0) 
const;
    66         virtual unsigned int size() 
const = 0;
    96         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   101         virtual 
std::
string name() const override;
   107         const 
double& value() const;
   110         unsigned int size() const override;
   132         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   134         virtual 
std::
string name() const override;
   138         unsigned int size() const override;
   144         Eigen::VectorXd col_;
   153         virtual unsigned int size() 
const override;
   160         BinaryExpr(
const std::shared_ptr<const Variable> &left, 
const std::shared_ptr<const Variable> &right);
   163         std::shared_ptr<const Variable> 
left_;
   175         virtual unsigned int size() 
const override;
   182         UnaryExpr(
const std::shared_ptr<const Variable> &var);
   185         std::shared_ptr<const Variable> 
var_;
   202         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   211         virtual 
std::
string name() const override;
   227         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   233         virtual 
std::
string name() const override;
   251         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   257         virtual 
std::
string name() const override;
   272         Power(
const std::shared_ptr<const Variable> &var, 
double power);
   279         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   285         virtual 
std::
string name() const override;
   302         Exponential(
double base, 
const std::shared_ptr<const Variable> &var);
   307         Exponential(
const std::shared_ptr<const Variable> &var);
   314         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   320         virtual 
std::
string name() const override;
   323         virtual 
std::
string nameBracketed(const 
std::
string &bracketL = "(", const 
std::
string &bracketR = ")") const override;
   342         virtual 
void populate(Eigen::Ref<Eigen::VectorXd> column, 
unsigned int offset = 0, 
unsigned int trim = 0) const override;
   347         virtual 
std::
string name() const override;
   352 #undef CREATE_SHARED_WRAPPER   355 std::shared_ptr<Multiplication> 
operator* (
const std::shared_ptr<const Variable> &left, 
const std::shared_ptr<const Variable> &right);
   357 std::shared_ptr<Multiplication> 
operator* (
const std::shared_ptr<const Variable> &v, 
double c);
   359 std::shared_ptr<Multiplication> 
operator* (
double c, 
const std::shared_ptr<const Variable> &v);
   361 std::shared_ptr<Multiplication> 
operator- (
const std::shared_ptr<const Variable> &v);
   363 std::shared_ptr<Addition> 
operator+ (
const std::shared_ptr<const Variable> &left, 
const std::shared_ptr<const Variable> &right);
   365 std::shared_ptr<Addition> 
operator+ (
const std::shared_ptr<const Variable> &v, 
double c);
   367 std::shared_ptr<Addition> 
operator+ (
double c, 
const std::shared_ptr<const Variable> &v);
   369 std::shared_ptr<Addition> 
operator- (
const std::shared_ptr<const Variable> &left, 
const std::shared_ptr<const Variable> &right);
   371 std::shared_ptr<Addition> 
operator- (
const std::shared_ptr<const Variable> &v, 
double c);
   375 std::shared_ptr<Addition> 
operator- (
double c, 
const std::shared_ptr<const Variable> &v);
   377 std::shared_ptr<Division> 
operator/ (
const std::shared_ptr<const Variable> &numerator, 
const std::shared_ptr<const Variable> &denominator);
   379 std::shared_ptr<Division> 
operator/ (
const std::shared_ptr<const Variable> &v, 
double c);
   381 std::shared_ptr<Division> 
operator/ (
double c, 
const std::shared_ptr<const Variable> &v);
   383 std::shared_ptr<Power> 
operator^ (
const std::shared_ptr<const Variable> &val, 
double pow);
   385 std::shared_ptr<Exponential> 
operator^ (
double base, 
const std::shared_ptr<const Variable> &val);
   391 shared_ptr<creativity::data::Exponential>
   392 exp(
const shared_ptr<const creativity::data::Variable> &var);
   394 shared_ptr<creativity::data::Exponential>
   395 exp2(
const shared_ptr<const creativity::data::Variable> &var);
   397 shared_ptr<creativity::data::Logarithm>
   398 log(
const shared_ptr<const creativity::data::Variable> &var);
   400 shared_ptr<creativity::data::Power>
   401 sqrt(
const shared_ptr<const creativity::data::Variable> &var);
   403 shared_ptr<creativity::data::Power>
   404 pow(
const shared_ptr<const creativity::data::Variable> &var, 
double power);
   406 shared_ptr<creativity::data::Exponential>
   407 pow(
double base, 
const shared_ptr<const creativity::data::Variable> &var);
 Takes a natural logarithm of a Variable's values. 
Definition: Variable.hpp:332
 
std::string to_string(double d)
Helper wrapper around std::to_string that removes insignificant 0s and a . 
 
SizeError()
Constructs with default message about populate() size mismatch. 
 
std::shared_ptr< Multiplication > operator*(const std::shared_ptr< const Variable > &left, const std::shared_ptr< const Variable > &right)
Multiplies two Variable objects together, returning a new Multiplication object. 
 
UnaryExpr()=delete
Not default-constructible. 
 
Primary namespace for all Creativity library code. 
Definition: config.hpp:4
 
std::shared_ptr< const Variable > var_
The underlying unary variable. 
Definition: Variable.hpp:185
 
Wrapper class around a simple column, where values are exactly the value in the column. 
Definition: Variable.hpp:118
 
Abstract base class for model variables. 
Definition: Variable.hpp:19
 
Exception class thrown when attempting to populate a column from a source of an incompatible or unkno...
Definition: Variable.hpp:71
 
virtual std::string nameBracketed(const std::string &bracketL="(", const std::string &bracketR=")") const
Returns a name for this variable, but with surrounding brackets if this variable needs it–for exampl...
 
Definition: Variable.hpp:389
 
Class that returns the coefficient-wise division of elements in one Variable by corresponding element...
Definition: Variable.hpp:241
 
Special Variable subclass for representing a constant value. 
Definition: Variable.hpp:83
 
virtual unsigned int size() const =0
Returns the intrinsic size of this data. 
 
Raises a Variable's values to a power. 
Definition: Variable.hpp:266
 
std::shared_ptr< Power > operator^(const std::shared_ptr< const Variable > &val, double pow)
Variable ^ power returns a Power object. 
 
virtual void populate(Eigen::Ref< Eigen::VectorXd > column, unsigned int offset=0, unsigned int trim=0) const =0
Populates the given column reference with this variable's values. 
 
std::shared_ptr< const Variable > left_
The left-hand Variable. 
Definition: Variable.hpp:163
 
Wrapper class around a multiplication of the elements of two Variables. 
Definition: Variable.hpp:192
 
std::shared_ptr< Division > operator/(const std::shared_ptr< const Variable > &numerator, const std::shared_ptr< const Variable > &denominator)
Divides one Variable by another, returning a new Division object. 
 
Eigen::VectorXd values(unsigned int rows=0, unsigned int offset=0, unsigned int trim=0) const
Shortcut wrapper around populate that creates a new column of the given size, calls populate() with i...
 
Raises a base value to a Variable's value. 
Definition: Variable.hpp:299
 
BinaryExpr()=delete
Not default-constructible. 
 
Wrapper class around a addition of the elements of two Variables. 
Definition: Variable.hpp:217
 
std::shared_ptr< Multiplication > operator-(const std::shared_ptr< const Variable > &v)
Unary negation of a Variable is converted to a multiplication by -1. 
 
virtual ~Variable()=default
Virtual destructor. 
 
std::shared_ptr< Addition > operator+(const std::shared_ptr< const Variable > &left, const std::shared_ptr< const Variable > &right)
Adds two Variable objects together, returning a new Addition object. 
 
Base class for composite variables with two Variable components. 
Definition: Variable.hpp:148
 
Base class for composite variables with a single variable. 
Definition: Variable.hpp:170
 
virtual std::string name() const =0
Returns a name for this variable. 
 
std::shared_ptr< const Variable > right_
The right-hand Variable. 
Definition: Variable.hpp:165