Tenncor
load.hpp
Go to the documentation of this file.
1 
9 #include "pbm/data.hpp"
10 
11 #ifndef PBM_LOAD_HPP
12 #define PBM_LOAD_HPP
13 
14 namespace pbm
15 {
16 
18 template <typename LOAD, typename std::enable_if<
19  std::is_base_of<iLoader,LOAD>::value>::type* = nullptr>
20 void load_graph (teq::TensptrSetT& out, const cortenn::Graph& in)
21 {
22  LOAD loader;
23  auto nodes = in.nodes();
24  TensptrsT invec;
25  for (const cortenn::Node& node : nodes)
26  {
27  teq::TensptrT tens;
28  if (node.has_source())
29  {
30  const cortenn::Source& source = node.source();
31  auto& slist = source.shape();
32  teq::Shape shape(std::vector<teq::DimT>(slist.begin(), slist.end()));
33  std::string data = source.data();
34  teq::TensptrT leaf = loader.generate_leaf(data.c_str(),
35  shape, source.typelabel(), node.label(), source.is_const());
36  invec.push_back(leaf);
37  tens = leaf;
38  }
39  else
40  {
41  cortenn::Functor func = node.functor();
42  auto nodeargs = func.args();
43  std::string opname = func.opname();
45  for (auto nodearg : nodeargs)
46  {
47  teq::TensptrT arg = invec[nodearg.idx()];
48  auto shaper_pb = nodearg.shaper();
49  auto coorder_pb = nodearg.coord();
50  std::vector<double> shaper_vec(shaper_pb.begin(), shaper_pb.end());
51  std::vector<double> coord_vec(coorder_pb.begin(), coorder_pb.end());
52  teq::CoordptrT shaper = loader.generate_shaper(shaper_vec);
53  teq::CoordptrT coord = loader.generate_coorder(opname, coord_vec);
54  args.push_back(
55  teq::FuncArg(arg, shaper, nodearg.fwd(), coord));
56  out.erase(invec[nodearg.idx()]);
57  }
58  teq::TensptrT f = loader.generate_func(opname, args);
59  invec.push_back(f);
60  tens = f;
61  }
62  auto& pb_tags = node.tags();
63  for (auto& tagpair : pb_tags)
64  {
65  const std::string& tagkey = tagpair.first;
66  auto& taglabels = tagpair.second.labels();
67  auto tagr = tag::get_reg().tagr_by_key(tagkey);
68  for (std::string taglabel : taglabels)
69  {
70  tagr(tens, taglabel);
71  }
72  }
73  out.emplace(tens);
74  }
75 }
76 
77 }
78 
79 #endif // PBM_GRAPH_HPP
args
Definition: csv_to_png.py:105
std::unordered_set< teq::TensptrT > TensptrSetT
Hash set of tensor smart pointers.
Definition: itensor.hpp:66
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
Definition: shape.hpp:62
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
void load_graph(teq::TensptrSetT &out, const cortenn::Graph &in)
Return graph info through out available from in graph.
Definition: load.hpp:20
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:51
TagrF tagr_by_key(std::string tag_key)
Return tagger associated to TagRepsT key.
Definition: tag.hpp:224
TagRegistry & get_reg(void)
Return reference to global tag registry.
std::vector< teq::TensptrT > TensptrsT
Tensptr vector type.
Definition: data.hpp:24
Definition: data.hpp:20