9 #include "teq/funcarg.hpp" 14 #ifndef ETEQ_FUNCARG_HPP 15 #define ETEQ_FUNCARG_HPP 30 logs::fatal(
"cannot map a null node");
43 return node_->get_tensor();
84 using ArgsT = std::vector<FuncArg<T>>;
102 logs::fatalf(
"cannot reduce dimensions [%d:]. Must be less than %d",
108 std::vector<teq::RankT> dims;
109 std::vector<teq::DimT> slist;
119 slist.push_back(shape.at(i));
129 template <
typename T>
139 template <
typename T>
149 template <
typename T>
155 logs::fatalf(
"cannot slice dimension %d beyond rank_cap %d",
160 slicings[0] = offset;
161 slicings[1] = extent;
162 slicings[2] = dimension;
164 std::make_shared<teq::CoordMap>(
172 extent - node->
shape().
at(dimension);
174 std::make_shared<CoordMap>(slicings,
false));
181 template <
typename T>
183 const std::pair<teq::DimT,teq::DimT>& padding,
188 logs::fatalf(
"cannot pad dimension %d beyond rank_cap %d",
193 paddings[0] = padding.first;
194 paddings[1] = padding.second;
195 paddings[2] = dimension;
197 std::make_shared<teq::CoordMap>(
205 padding.first + padding.second;
207 std::make_shared<CoordMap>(paddings,
false));
218 template <
typename T>
220 const std::vector<teq::DimT>& incrs)
223 std::fill(strides.begin(), strides.end(), 1);
224 std::copy(incrs.begin(), incrs.end(), strides.begin());
226 std::make_shared<teq::CoordMap>(
233 fwd[i][i] = 1. / strides[i];
238 std::make_shared<CoordMap>(strides,
false));
243 #endif // ETEQ_FUNCARG_HPP std::array< CDimT, rank_cap > CoordT
Definition: shape.hpp:56
FuncArg(NodeptrT< T > node, teq::CoordptrT shaper, CoordptrT coorder)
Construct FuncArg with specific node, shaper, and coorder.
Definition: funcarg.hpp:25
const RankT rank_cap
Number of dimsensions in a shape/coordinate.
Definition: shape.hpp:47
FuncArg< T > slice_map(NodeptrT< T > node, teq::RankT offset, teq::RankT extent, teq::RankT dimension)
Definition: funcarg.hpp:150
CoordptrT extend(teq::RankT rank, std::vector< teq::DimT > ext)
Return CoordMap wrapper of extension parameters.
teq::CoordptrT get_shaper(void) const
Return shaper coord map.
Definition: funcarg.hpp:52
Definition: constant.hpp:17
CoordptrT reduce(std::vector< teq::RankT > red_dims)
Return CoordMap wrapper of reduction dimensions.
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
CoordptrT extend(RankT rank, std::vector< DimT > ext)
bool map_io(void) const
Definition: funcarg.hpp:59
FuncArg< T > reduce_map(NodeptrT< T > node, teq::RankT offset, teq::RankT ndims)
Definition: funcarg.hpp:98
Eigen node version of teq::FuncArg.
Definition: funcarg.hpp:22
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
CoordptrT reduce(RankT rank, std::vector< DimT > red)
EigenptrT< T > max(teq::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:970
NodeptrT< T > node_
Tensor reference.
Definition: funcarg.hpp:73
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:64
FuncArg< T > extend_map(NodeptrT< T > node, teq::RankT rank, std::vector< teq::DimT > ext)
Definition: funcarg.hpp:130
CoordptrT identity
Identity matrix instance.
teq::CoordptrT shaper_
Shape mapper.
Definition: funcarg.hpp:76
teq::TensptrT get_tensor(void) const
Return tensor being mapped.
Definition: funcarg.hpp:41
NodeptrT< T > get_node(void) const
Definition: funcarg.hpp:46
FuncArg< T > pad_map(NodeptrT< T > node, const std::pair< teq::DimT, teq::DimT > &padding, teq::RankT dimension)
Definition: funcarg.hpp:182
FuncArg< T > permute_map(NodeptrT< T > node, std::vector< teq::RankT > order)
Definition: funcarg.hpp:140
FuncArg< T > stride_map(NodeptrT< T > node, const std::vector< teq::DimT > &incrs)
Definition: funcarg.hpp:219
CoordptrT permute(std::vector< teq::RankT > dims)
Return CoordMap wrapper of permute indices.
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:51
CoordptrT get_coorder(void) const
Return coord map for coordinates.
Definition: funcarg.hpp:66
std::vector< FuncArg< T > > ArgsT
Type of typed functor arguments.
Definition: funcarg.hpp:84
CoordptrT coorder_
Coordinate mapper.
Definition: funcarg.hpp:79
CoordptrT permute(std::vector< RankT > order)
std::shared_ptr< iNode< T > > NodeptrT
Smart pointer of node.
Definition: inode.hpp:63
FuncArg< T > identity_map(NodeptrT< T > node)
Return FuncArg<T> that identity maps input tensor.
Definition: funcarg.hpp:88
Shape apply_shaper(const CoordptrT &shaper, Shape inshape)
DimT at(RankT idx) const
Return DimT element at idx for any index in range [0:rank_cap)
Definition: shape.hpp:108
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28
teq::Shape shape(void) const
Return shape of tensor filtered through coordinate mapper.
Definition: funcarg.hpp:35