14 #ifndef ETEQ_VARIABLE_HPP 15 #define ETEQ_VARIABLE_HPP 47 std::string label =
"")
51 logs::fatalf(
"cannot create variable with data size %d " 76 size_t ninput = input.size();
79 logs::fatalf(
"cannot assign vector of %d elements to " 80 "internal data of shape %s", ninput,
83 std::memcpy(this->
data_.data(), input.data(), ninput *
sizeof(T));
99 logs::fatalf(
"assigning data shaped %s to tensor %s",
133 template <
typename T>
147 return (T*)
var_->data();
162 var_->assign(input, egen::get_type<T>(),
shape);
168 var_->assign(tensmap->data(), egen::get_type<T>(),
get_shape(*tensmap));
180 return var_->to_string();
191 std::shared_ptr<Variable<T>>
var_;
194 template <
typename T>
197 static bool registered = register_builder<Variable<T>,T>(
200 return std::make_shared<VariableNode<T>>(
209 template <
typename T>
210 using VarptrT = std::shared_ptr<VariableNode<T>>;
213 template <
typename T>
216 return std::static_pointer_cast<
iNode<T>>(var);
220 template <
typename T>
223 return std::make_shared<VariableNode<T>>(
229 template <
typename T>
232 return std::make_shared<VariableNode<T>>(
238 template <
typename T>
241 return std::make_shared<VariableNode<T>>(
248 #endif // ETEQ_VARIABLE_HPP teq::TensptrT get_tensor(void) const override
Implementation of iNode<T>
Definition: variable.hpp:154
Shaped array wraps around a vector and shape.
Definition: shaped_arr.hpp:21
std::shared_ptr< VariableNode< T > > VarptrT
Smart pointer of variable nodes to preserve assign functions.
Definition: variable.hpp:210
std::string to_string(void) const
Return string representation of shape.
Definition: shape.hpp:148
teq::Shape get_shape(const TensorT< T > &tens)
Return the teq Shape representation of Eigen Tensor.
Definition: eigen.hpp:214
const teq::Shape & shape(void) const override
Implementation of iTensor.
Definition: ileaf.hpp:26
void assign(const TensMapT< T > *tensmap)
Assign Eigen tensor map to variable's internal data.
Definition: variable.hpp:166
std::vector< T > data_
Vector of size equal to shape_.n_elems()
Definition: shaped_arr.hpp:29
T * data(void) override
Implementation of iNode<T>
Definition: variable.hpp:145
Eigen::TensorMap< TensorT< T > > TensMapT
Eigen Tensor Map (reference)
Definition: eigen.hpp:39
Definition: constant.hpp:17
TensorT< T > data_
Data Source.
Definition: ileaf.hpp:67
Interface node for wrapping typed tensor.
Definition: inode.hpp:23
bool compatible_after(const Shape &other, RankT idx) const
Definition: shape.hpp:136
Variable< T > & operator=(const Variable< T > &other)=default
teq::Shape shape_
Shape utility to avoid excessive conversion between data_.dimensions()
Definition: ileaf.hpp:70
void assign(const ShapedArr< T > &arr)
Assign ShapedArr representation to variable's internal data.
Definition: variable.hpp:172
void assign(const T *input, teq::Shape shape)
Wrapper around variable assign of the same signature.
Definition: variable.hpp:160
teq::Shape shape(void)
Return shape of internal tensor.
Definition: inode.hpp:37
VariableNode(std::shared_ptr< Variable< T >> var)
Definition: variable.hpp:136
Variable(T *data, teq::Shape shape, std::string label)
Definition: variable.hpp:123
void update(void) override
Implementation of iNode<T>
Definition: variable.hpp:151
std::string to_string(void) const override
Implementation of iTensor.
Definition: variable.hpp:108
VariableNode< T > * clone(void) const
Return deep copy of this instance (with a copied variable)
Definition: variable.hpp:139
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:51
std::string to_string(teq::CoordptrT c)
Return brief hashable string representation of coordinate mapper.
std::string label_
Label for distinguishing variable nodes.
Definition: variable.hpp:120
Eigen::Tensor< T, 8 > TensorT
Eigen Tensor.
Definition: eigen.hpp:35
iNode< T > * clone_impl(void) const override
Definition: variable.hpp:184
void assign(const void *input, egen::_GENERATED_DTYPE dtype, teq::Shape shape)
Assign void pointer of specified data type enum and shape.
Definition: variable.hpp:95
NodeptrT< T > convert_to_node(VarptrT< T > var)
Return Node smart pointer of Variable smart pointer.
Definition: variable.hpp:214
bool is_const(void) const override
Implementation of iLeaf.
Definition: variable.hpp:114
std::shared_ptr< iNode< T > > NodeptrT
Smart pointer of node.
Definition: inode.hpp:63
teq::Shape shape_
Tensor shape of data_.
Definition: shaped_arr.hpp:32
Variable's node wrapper.
Definition: variable.hpp:134
iLeaf extension of TEQ iLeaf containing Eigen data objects
Definition: ileaf.hpp:21
std::string get_label(void) const
Return string representation of internal variable.
Definition: variable.hpp:178
static Variable< T > * get(T *ptr, teq::Shape shape, std::string label="")
Return Variable given raw pointer array whose size is denoted by shape.
Definition: variable.hpp:195
VarptrT< T > make_variable(teq::Shape shape, std::string label="")
Return zero-initialized variable node of specified shape.
Definition: variable.hpp:230
NElemT n_elems(void) const
Return the total number of elements represented by the shape.
Definition: shape.hpp:118
void * data(void) override
Implementation of iData.
Definition: ileaf.hpp:32
std::shared_ptr< Variable< T > > var_
Definition: variable.hpp:191
VarptrT< T > make_variable_scalar(T scalar, teq::Shape shape, std::string label="")
Return variable node given scalar and shape.
Definition: variable.hpp:221
Leaf node implementation containing mutable Eigen data.
Definition: variable.hpp:22