diff --git a/.bazelrc b/.bazelrc index a99570d29..725581524 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,10 +1,10 @@ # ------ ALL SETTINGS ------ -run --incompatible_disallow_dict_plus=false --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_no_support_tools_in_action_inputs=false -build --incompatible_disallow_dict_plus=false --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_no_support_tools_in_action_inputs=false -test --incompatible_disallow_dict_plus=false --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_no_support_tools_in_action_inputs=false -coverage --incompatible_disallow_dict_plus=false --incompatible_disable_deprecated_attr_params=false --incompatible_depset_is_not_iterable=false --incompatible_no_support_tools_in_action_inputs=false +run --incompatible_depset_is_not_iterable=false --jobs=2 +build --incompatible_depset_is_not_iterable=false --jobs=2 +test --incompatible_depset_is_not_iterable=false --jobs=2 +coverage --incompatible_depset_is_not_iterable=false --jobs=2 # ------ OPTIMIZATION ------ @@ -31,6 +31,7 @@ coverage:cc_coverage --instrument_test_targets --experimental_cc_coverage --comb run:valgrind --run_under="valgrind --leak-check=full" test:valgrind --run_under="valgrind --leak-check=full" +run:asan --linkopt -fsanitize=address test:asan --linkopt -fsanitize=address # === GTESTS === diff --git a/.gitignore b/.gitignore index 8391c7ab7..efb86f91d 100644 --- a/.gitignore +++ b/.gitignore @@ -77,5 +77,7 @@ html/ !.gitmodules !.astylerc !.bazelrc +!models/*.pbx +!models/**/*.pbx !rocnnet/pretrained/*.pbx !rocnnet/notebooks/*.pbx diff --git a/BUILD.bazel b/BUILD.bazel index d267e47a3..342c5b449 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -18,3 +18,20 @@ filegroup( "BUILD.bazel", ], ) + +filegroup( + name = "test_models", + srcs = glob([ + "models/test/*.pbx", + "models/test/*.txt", + "models/test/*.json", + ]) +) + +filegroup( + name = "models", + srcs = glob([ + "models/*.pbx", + "models/*.json", + ]) +) diff --git a/Makefile b/Makefile index 4e6f0df6d..84e7e9ecb 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ COVERAGE_INFO_FILE := bazel-out/_coverage/_coverage_report.dat COVERAGE_IGNORE := 'external/*' '**/test/*' 'testutil/*' '**/genfiles/*' 'dbg/*' -CCOVER := bazel coverage --config asan --action_env="ASAN_OPTIONS=detect_leaks=0" --config gtest --config cc_coverage +CCOVER := bazel coverage --config asan --action_env="ASAN_OPTIONS=detect_leaks=0" --config gtest --config cc_coverage --define EAD_CFG=MIN ADE_TEST := //ade:test @@ -26,8 +26,8 @@ print_vars: rocnnet_py_build: bazel build --config $(CC)_eigen_optimal //rocnnet:rocnnet_py -rocnnet_py_export: rocnnet_py_build - cp -f bazel-bin/rocnnet/*.so rocnnet/notebooks/rocnnet +rocnnet_py_export: bazel-bin/rocnnet/rocnnet.so bazel-bin/ead/tenncor.so bazel-bin/ead/ead.so + cp -f bazel-bin/rocnnet/rocnnet.so rocnnet/notebooks/rocnnet cp -f bazel-bin/ead/*.so rocnnet/notebooks/ead diff --git a/ade/functor.hpp b/ade/functor.hpp index 1bf4b5559..2e1fb9d7e 100644 --- a/ade/functor.hpp +++ b/ade/functor.hpp @@ -22,7 +22,7 @@ struct Functor final : public iFunctor { if (0 == args.size()) { - logs::fatalf("cannot perform %s with no arguments", + logs::fatalf("cannot perform `%s` with no arguments", opcode.name_.c_str()); } @@ -32,7 +32,7 @@ struct Functor final : public iFunctor Shape ishape = args[i].shape(); if (false == ishape.compatible_after(shape, 0)) { - logs::fatalf("cannot perform %s with incompatible shapes %s " + logs::fatalf("cannot perform `%s` with incompatible shapes %s " "and %s", opcode.name_.c_str(), shape.to_string().c_str(), ishape.to_string().c_str()); } diff --git a/ade/grad_def.hpp b/ade/grad_def.hpp index 6ba773d5b..70f258926 100644 --- a/ade/grad_def.hpp +++ b/ade/grad_def.hpp @@ -76,7 +76,7 @@ struct iGradientBuilder std::list parents; std::transform(pathmap.begin(), pathmap.end(), std::back_inserter(parents), - [](std::pair> parent) + [](std::pair> parent) { return static_cast(parent.first); }); diff --git a/ade/ileaf.hpp b/ade/ileaf.hpp index 34ace0618..02f47e481 100644 --- a/ade/ileaf.hpp +++ b/ade/ileaf.hpp @@ -25,6 +25,9 @@ struct iLeaf : public iTensor, public iData { visiter.visit(this); } + + /// Return true if leaf is immutable, otherwise false + virtual bool is_const (void) const = 0; }; /// Leaf smart pointer diff --git a/ade/shape.hpp b/ade/shape.hpp index 9040e957e..5817b2b18 100644 --- a/ade/shape.hpp +++ b/ade/shape.hpp @@ -22,16 +22,18 @@ namespace ade /// Type used for shape rank using RankT = uint8_t; -// /// Type used for shape dimension -// #if !defined(SDIM_BYTES) || SDIM_BYTES <= 1 -// using DimT = uint8_t; -// #elif SDIM_BYTES <= 2 +#define SDIM_BYTES 2 + +/// Type used for shape dimension +#if !defined(SDIM_BYTES) || SDIM_BYTES <= 1 +using DimT = uint8_t; +#elif SDIM_BYTES <= 2 using DimT = uint16_t; -// #elif SDIM_BYTES <= 4 -// using DimT = uint32_t; -// #else -// using DimT = uint64_t; -// #endif +#elif SDIM_BYTES <= 4 +using DimT = uint32_t; +#else +using DimT = uint64_t; +#endif /// Type used for coordinate dimensions using CDimT = double; diff --git a/ade/src/coord.cpp b/ade/src/coord.cpp index 197243a95..3f03eee5f 100644 --- a/ade/src/coord.cpp +++ b/ade/src/coord.cpp @@ -79,9 +79,10 @@ CoordptrT reduce (RankT rank, std::vector red) logs::fatalf("cannot reduce shape rank %d beyond rank_cap with n_red %d", rank, n_red); } - if (0 == n_red) + if (0 == n_red || std::all_of(red.begin(), red.end(), + [](DimT d) { return 1 == d; })) { - logs::warn("reducing with empty vector ... will do nothing"); + logs::warn("reducing scalar ... will do nothing"); return identity; } diff --git a/ade/test/common.hpp b/ade/test/common.hpp index 592e1a15e..5a8a90842 100644 --- a/ade/test/common.hpp +++ b/ade/test/common.hpp @@ -46,6 +46,11 @@ struct MockTensor : public ade::iLeaf return 0; } + bool is_const (void) const override + { + return true; + } + ade::Shape shape_; }; diff --git a/ade/test/test_coord.cpp b/ade/test/test_coord.cpp index 462bfb335..6a7dd3610 100644 --- a/ade/test/test_coord.cpp +++ b/ade/test/test_coord.cpp @@ -200,7 +200,7 @@ TEST(COORD, Reduce) rank + 1, red.size()); EXPECT_FATAL(ade::reduce(rank + 1, red), fatalmsg.c_str()); - EXPECT_WARN(ade::reduce(0, {}), "reducing with empty vector ... will do nothing"); + EXPECT_WARN(ade::reduce(0, {}), "reducing scalar ... will do nothing"); } diff --git a/ade/test/test_functor.cpp b/ade/test/test_functor.cpp index c00cba860..bfb484c42 100644 --- a/ade/test/test_functor.cpp +++ b/ade/test/test_functor.cpp @@ -31,10 +31,10 @@ TEST(FUNCTOR, Shapes) EXPECT_ARREQ(shape, gotshape); EXPECT_FATAL(ade::Functor::get(ade::Opcode{"MOCK", 0}, {}), - "cannot perform MOCK with no arguments"); + "cannot perform `MOCK` with no arguments"); std::string fatalmsg = fmts::sprintf( - "cannot perform MOCK with incompatible shapes %s and %s", + "cannot perform `MOCK` with incompatible shapes %s and %s", shape.to_string().c_str(), badshape.to_string().c_str()); EXPECT_FATAL(ade::Functor::get(ade::Opcode{"MOCK", 0}, { ade::identity_map(leaf), diff --git a/ade/test/test_grad.cpp b/ade/test/test_grad.cpp index 9843c1606..48662327f 100644 --- a/ade/test/test_grad.cpp +++ b/ade/test/test_grad.cpp @@ -42,7 +42,7 @@ struct MockGradientBuilder final : public ade::iGradientBuilder return ade::TensptrT(ade::Functor::get(ade::Opcode{"FUNC4", 3}, {op->get_children()[arg_idx]})); } - return ade::TensptrT(new LabelledMockTensor("other", op->shape()));; + return ade::TensptrT(new LabelledMockTensor("other", op->shape())); } ade::TensptrT chain_rule (ade::FuncptrT op, const ade::TensptrT& local_der, @@ -135,20 +135,20 @@ TEST(GRAD, BuilderStandardV) "(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " `--(1[94\\78\\70\\82\\62\\29\\38\\1])", + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])", gl); EXPECT_GRAPHEQ( "(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " `--(1[94\\78\\70\\82\\62\\29\\38\\1])", + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:leaf2[94\\78\\70\\82\\62\\29\\38\\1])\n" + " `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])", gl2); } @@ -180,32 +180,32 @@ TEST(GRAD, BuilderDiamond) " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC4[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(other[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(1[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:other[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(other[94\\78\\70\\82\\62\\29\\38\\1])\n" - " `--(1[94\\78\\70\\82\\62\\29\\38\\1])", + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:other[94\\78\\70\\82\\62\\29\\38\\1])\n" + " `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])", gl); } @@ -237,45 +237,45 @@ TEST(GRAD, TadPole) "(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(other[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:other[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC4[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(other[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(1[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:other[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC4[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | `--(FUNC4[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC2[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC3[94\\78\\70\\82\\62\\29\\38\\1])\n" " | | `--(FUNC[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | | `--(leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" - " | `--(other[94\\78\\70\\82\\62\\29\\38\\1])\n" - " `--(1[94\\78\\70\\82\\62\\29\\38\\1])", + " | | `--(constant:leaf[94\\78\\70\\82\\62\\29\\38\\1])\n" + " | `--(constant:other[94\\78\\70\\82\\62\\29\\38\\1])\n" + " `--(constant:1[94\\78\\70\\82\\62\\29\\38\\1])", gl); } diff --git a/ade/test/test_traveler.cpp b/ade/test/test_traveler.cpp index c25fa7024..b0faf6912 100644 --- a/ade/test/test_traveler.cpp +++ b/ade/test/test_traveler.cpp @@ -59,10 +59,10 @@ TEST(TRAVELER, PathFinder) { ASSERT_HAS(finder.parents_, g.get()); - EXPECT_HAS(finder.parents_[g.get()], 1); + EXPECT_ARRHAS(finder.parents_[g.get()], 1); ASSERT_HAS(finder.parents_, f.get()); - EXPECT_HAS(finder.parents_[f.get()], 0); + EXPECT_ARRHAS(finder.parents_[f.get()], 0); } finder.parents_.clear(); @@ -72,7 +72,7 @@ TEST(TRAVELER, PathFinder) ASSERT_HASNOT(finder.parents_, g.get()); ASSERT_HAS(finder.parents_, f.get()); - EXPECT_HAS(finder.parents_[f.get()], 0); + EXPECT_ARRHAS(finder.parents_[f.get()], 0); } ade::PathFinder finder2(c.get()); @@ -80,7 +80,7 @@ TEST(TRAVELER, PathFinder) { ASSERT_HAS(finder2.parents_, g.get()); - EXPECT_HAS(finder2.parents_[g.get()], 0); + EXPECT_ARRHAS(finder2.parents_[g.get()], 0); } finder2.parents_.clear(); diff --git a/ade/traveler.hpp b/ade/traveler.hpp index 36a77f46d..183cece2c 100644 --- a/ade/traveler.hpp +++ b/ade/traveler.hpp @@ -109,6 +109,8 @@ struct GraphStat final : public iTraveler std::unordered_map> graphsize_; }; +using ParentMapT = std::unordered_map>; + /// Traveler that paints paths to a target tensor /// All nodes in the path are added as keys to the parents_ map with the values /// being a boolean vector denoting nodes leading to target @@ -116,9 +118,6 @@ struct GraphStat final : public iTraveler /// x is true if the ith child leads to target struct PathFinder final : public iTraveler { - /// Type for mapping function nodes in path to boolean vector - using ParentMapT = std::unordered_map>; - PathFinder (const iTensor* target) : target_(target) {} /// Implementation of iTraveler @@ -150,7 +149,7 @@ struct PathFinder final : public iTraveler } if (false == path.empty()) { - parents_[func] = path; + parents_[func] = std::vector(path.begin(), path.end()); } } } @@ -165,8 +164,6 @@ struct PathFinder final : public iTraveler /// Traveler that for each child tracks the relationship to all parents struct ParentFinder final : public iTraveler { - using ParentMapT = std::unordered_map>; - /// Implementation of iTraveler void visit (iLeaf* leaf) override { diff --git a/cfg/BUILD.bazel b/cfg/BUILD.bazel index 5ca6ee25f..efc97340a 100644 --- a/cfg/BUILD.bazel +++ b/cfg/BUILD.bazel @@ -9,6 +9,11 @@ filegroup( srcs = ["ead.yml"], ) +filegroup( + name = "ead_min", + srcs = ["ead_min.yml"], +) + filegroup( name = "optimizations", srcs = ["optimizations.rules"], diff --git a/cfg/ead.yml b/cfg/ead.yml index b0feaca29..c7c410511 100644 --- a/cfg/ead.yml +++ b/cfg/ead.yml @@ -462,27 +462,8 @@ api: type: ead::NodeptrT val: | // - // (todo) report offset out of rank_cap - ade::CoordT slicings; - std::fill(slicings.begin(), slicings.end(), ade::rank_cap); - slicings[0] = offset; - slicings[1] = extent; - slicings[2] = dimension; return ead::make_functor(ade::Opcode{"SLICE",::age::SLICE}, { - ead::FuncArg(arg, - std::make_shared( - [=](ade::MatrixT fwd) - { - for (ade::RankT i = 0; i < ade::rank_cap; ++i) - { - fwd[i][i] = 1; - } - fwd[ade::rank_cap][dimension] = - extent - arg->shape().at(dimension); - }), - std::make_shared(slicings, false) - ) - }); + ead::slice_map(arg, offset, extent, dimension)}); - template: typename T name: pad args: @@ -496,27 +477,8 @@ api: type: ead::NodeptrT val: | // - // (todo) report if dimension out of rank_cap - ade::CoordT paddings; - std::fill(paddings.begin(), paddings.end(), ade::rank_cap); - paddings[0] = padding.first; - paddings[1] = padding.second; - paddings[2] = dimension; return ead::make_functor(ade::Opcode{"PAD",::age::PAD}, { - ead::FuncArg(arg, - std::make_shared( - [=](ade::MatrixT fwd) - { - for (ade::RankT i = 0; i < ade::rank_cap; ++i) - { - fwd[i][i] = 1; - } - fwd[ade::rank_cap][dimension] = - padding.first + padding.second; - }), - std::make_shared(paddings, false) - ) - }); + ead::pad_map(arg, padding, dimension)}); - template: typename T name: matmul args: diff --git a/cfg/ead_min.yml b/cfg/ead_min.yml new file mode 100644 index 000000000..5c74fd707 --- /dev/null +++ b/cfg/ead_min.yml @@ -0,0 +1,952 @@ +--- +dtype: + DOUBLE: double + FLOAT: float +opcode: + operator_path: ead/operator.hpp + params: ade::Shape shape, ead::EigenptrT& out, std::vector>& in + opcalls: + ABS: out = ead::abs(shape,in[0]); + NEG: out = ead::neg(shape,in[0]); + SIN: out = ead::sin(shape,in[0]); + COS: out = ead::cos(shape,in[0]); + TAN: out = ead::tan(shape,in[0]); + EXP: out = ead::exp(shape,in[0]); + LOG: out = ead::log(shape,in[0]); + SQRT: out = ead::sqrt(shape,in[0]); + ROUND: out = ead::round(shape,in[0]); + SIGMOID: out = ead::sigmoid(shape,in[0]); + SIGMOID_GRAD: out = ead::sigmoid_grad(shape,in[0]); + TANH: out = ead::tanh(shape,in[0]); + SQUARE: out = ead::square(shape,in[0]); + CUBE: out = ead::cube(shape,in[0]); + POW: out = ead::pow(shape,in[0],in[1]); + ADD: out = ead::add(shape,in[0],in[1]); + SUB: out = ead::sub(shape,in[0],in[1]); + MUL: out = ead::mul(shape,in[0],in[1]); + DIV: out = ead::div(shape,in[0],in[1]); + MIN: out = ead::min(shape,in[0],in[1]); + MAX: out = ead::max(shape,in[0],in[1]); + EQ: out = ead::eq(shape,in[0],in[1]); + NEQ: out = ead::neq(shape,in[0],in[1]); + LT: out = ead::lt(shape,in[0],in[1]); + GT: out = ead::gt(shape,in[0],in[1]); + RAND_UNIF: out = ead::rand_uniform(shape,in[0],in[1]); + REDUCE_SUM: out = ead::reduce_sum(shape,in[0]); + REDUCE_PROD: out = ead::reduce_prod(shape,in[0]); + REDUCE_MIN: out = ead::reduce_min(shape,in[0]); + REDUCE_MAX: out = ead::reduce_max(shape,in[0]); + PERMUTE: out = ead::permute(shape,in[0]); + EXTEND: out = ead::extend(shape,in[0]); + MATMUL: out = ead::matmul(shape,in[0],in[1]); + CONV: out = ead::convolution(shape,in[0],in[1]); + SLICE: out = ead::slice(shape,in[0]); + PAD: out = ead::pad(shape,in[0]); + CONV_IMG_GRAD: out = ead::convolution_image_grad(shape,in[0],in[1]); + CONV_KRN_GRAD: out = ead::convolution_kernel_grad(shape,in[0],in[1]); + SELECT: out = ead::select(shape, in[0], in[1], in[2]); +api: + pybind_type: float + includes: + - '"ead/constant.hpp"' + - '"ead/variable.hpp"' + - '"ead/functor.hpp"' + - '"tag/group.hpp"' + - '"tag/prop.hpp"' + namespaces: + tenncor: + - template: typename T + name: abs + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"ABS",::age::ABS},{ead::identity_map(arg)}); + - template: typename T + name: neg + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"NEG",::age::NEG},{ead::identity_map(arg)}); + - template: typename T + name: sin + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SIN",::age::SIN},{ead::identity_map(arg)}); + - template: typename T + name: cos + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"COS",::age::COS},{ead::identity_map(arg)}); + - template: typename T + name: tan + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"TAN",::age::TAN},{ead::identity_map(arg)}); + - template: typename T + name: exp + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"EXP",::age::EXP},{ead::identity_map(arg)}); + - template: typename T + name: log + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"LOG",::age::LOG},{ead::identity_map(arg)}); + - template: typename T + name: sqrt + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SQRT",::age::SQRT},{ead::identity_map(arg)}); + - template: typename T + name: round + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"ROUND",::age::ROUND},{ead::identity_map(arg)}); + - template: typename T + name: sigmoid + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SIGMOID",::age::SIGMOID},{ead::identity_map(arg)}); + - template: typename T + name: sigmoid_grad + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SIGMOID_GRAD",::age::SIGMOID_GRAD},{ead::identity_map(arg)}); + - template: typename T + name: tanh + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"TANH",::age::TANH},{ead::identity_map(arg)}); + - template: typename T + name: square + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SQUARE",::age::SQUARE},{ead::identity_map(arg)}); + - template: typename T + name: cube + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"CUBE",::age::CUBE},{ead::identity_map(arg)}); + - template: typename T + name: pow + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"POW",::age::POW},{ead::identity_map(arg1),ead::identity_map(arg2)}); + - template: typename T + name: add + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"ADD",::age::ADD}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + tag::get_group_reg().group_tag(out->get_tensor(), "sum"); + return out; + - template: typename T + name: sub + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"SUB",::age::SUB},{ead::identity_map(arg1),ead::identity_map(arg2)}); + - template: typename T + name: mul + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"MUL",::age::MUL}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + tag::get_group_reg().group_tag(out->get_tensor(), "prod"); + return out; + - template: typename T + name: div + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"DIV",::age::DIV},{ead::identity_map(arg1),ead::identity_map(arg2)}); + - template: typename T + name: eq + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"EQ",::age::EQ}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + return out; + - template: typename T + name: neq + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"NEQ",::age::NEQ}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + return out; + - template: typename T + name: lt + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"LT",::age::LT},{ead::identity_map(arg1),ead::identity_map(arg2)}); + - template: typename T + name: gt + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"GT",::age::GT},{ead::identity_map(arg1),ead::identity_map(arg2)}); + - template: typename T + name: min + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"MIN",::age::MIN}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + return out; + - template: typename T + name: max + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + auto out = ead::make_functor(ade::Opcode{"MAX",::age::MAX}, { + ead::identity_map(arg1), + ead::identity_map(arg2), + }); + tag::get_property_reg().property_tag(out->get_tensor(), tag::commutative_tag); + return out; + - template: typename T + name: if_then_else + args: + - dtype: ead::NodeptrT + name: condition + - dtype: ead::NodeptrT + name: then + - dtype: ead::NodeptrT + name: otherwise + out: + type: ead::NodeptrT + val: | + // + return ead::make_functor(ade::Opcode{"SELECT",::age::SELECT},{ + ead::identity_map(condition), + ead::identity_map(then), + ead::identity_map(otherwise) + }); + - template: typename T + name: permute + args: + - dtype: ead::NodeptrT + name: arg + - dtype: std::vector + name: order + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"PERMUTE",::age::PERMUTE},{ead::permute_map(arg,order)}); + - template: typename T + name: extend + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: offset + - dtype: std::vector + name: xlist + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"EXTEND",::age::EXTEND},{ead::extend_map(arg,offset,xlist)}); + - template: typename T + name: reduce_sum + args: + - dtype: ead::NodeptrT + name: tens + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"REDUCE_SUM",::age::REDUCE_SUM},{ead::reduce_map(tens,offset,ndims)}); + description: sum values ignoring coordinate indices between start and end + - template: typename T + name: reduce_prod + args: + - dtype: ead::NodeptrT + name: tens + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"REDUCE_PROD",::age::REDUCE_PROD},{ead::reduce_map(tens,offset,ndims)}); + description: multiply values ignoring coordinate indices between start and end + - template: typename T + name: reduce_min + args: + - dtype: ead::NodeptrT + name: tens + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"REDUCE_MIN",::age::REDUCE_MIN},{ead::reduce_map(tens,offset,ndims)}); + description: min values ignoring coordinate indices between start and end + - template: typename T + name: reduce_max + args: + - dtype: ead::NodeptrT + name: tens + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: return ead::make_functor(ade::Opcode{"REDUCE_MAX",::age::REDUCE_MAX},{ead::reduce_map(tens,offset,ndims)}); + description: max values ignoring coordinate indices between start and end + - template: typename T + name: n_elems + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ead::make_constant_scalar(arg->get_tensor()->shape().n_elems(), ade::Shape()); + - template: typename T + name: n_dims + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: rank + out: + type: ead::NodeptrT + val: return ead::make_constant_scalar(arg->get_tensor()->shape().at(rank), ade::Shape()); + - template: typename T + name: slice + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: offset + - dtype: ade::RankT + name: extent + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + return ead::make_functor(ade::Opcode{"SLICE",::age::SLICE}, { + ead::slice_map(arg, offset, extent, dimension)}); + - template: typename T + name: pad + args: + - dtype: ead::NodeptrT + name: arg + - dtype: std::pair + name: padding + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + return ead::make_functor(ade::Opcode{"PAD",::age::PAD}, { + ead::pad_map(arg, padding, dimension)}); + - template: typename T + name: matmul + args: + - dtype: ead::NodeptrT + name: a + - dtype: ead::NodeptrT + name: b + out: + type: ead::NodeptrT + val: | + // + ade::Shape ashape = a->get_tensor()->shape(); + ade::Shape bshape = b->get_tensor()->shape(); + ade::DimT ncommon = ashape.at(0); + ade::DimT nrow = ashape.at(1); + ade::DimT ncol = bshape.at(0); + if (ncommon != bshape.at(1)) + { + logs::fatalf("invalid matmul shapes %s and %s", + ashape.to_string().c_str(), bshape.to_string().c_str()); + } + + ade::CoordptrT left_shaper(new ade::CoordMap( + [=](ade::MatrixT fwd) + { + for (ade::RankT i = 3; i < ade::mat_dim; ++i) + { + fwd[i][i] = 1; + } + fwd[2][0] = ncol; + fwd[1][1] = 1; + fwd[0][2] = 1.0 / ncommon; + } + )); + + ade::CoordptrT right_shaper(new ade::CoordMap( + [=](ade::MatrixT fwd) + { + for (ade::RankT i = 3; i < ade::mat_dim; ++i) + { + fwd[i][i] = 1; + } + fwd[0][0] = 1; + fwd[2][1] = nrow; + fwd[1][2] = 1.0 / ncommon; + } + )); + return ead::make_functor(ade::Opcode{"MATMUL",::age::MATMUL}, { + ead::FuncArg(a, left_shaper, nullptr), + ead::FuncArg(b, right_shaper, nullptr) + }); + - template: typename T + name: convolution + args: + - dtype: ead::NodeptrT + name: input + - dtype: ead::NodeptrT + name: kernel + - dtype: std::vector + name: dims + out: + type: ead::NodeptrT + val: | + // + ade::Shape inshape = input->get_tensor()->shape(); + ade::Shape kernelshape = kernel->get_tensor()->shape(); + ade::CoordptrT input_shaper(new ade::CoordMap( + [kernelshape](ade::MatrixT fwd) + { + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[i][i] = 1; + } + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[ade::rank_cap][i] = -kernelshape.at(i) + 1; + } + } + )); + + ade::CoordptrT kernel_shaper(new ade::CoordMap( + [inshape](ade::MatrixT fwd) + { + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[i][i] = -1; + } + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[ade::rank_cap][i] = inshape.at(i) + 1; + } + } + )); + + ade::CoordT kernel_dims; + auto it = kernel_dims.begin(); + std::fill(it, kernel_dims.end(), ade::rank_cap); + std::copy(dims.begin(), dims.end(), it); + return ead::make_functor(ade::Opcode{"CONV",::age::CONV}, { + ead::FuncArg(input, input_shaper, nullptr), + ead::FuncArg(kernel, kernel_shaper, + std::make_shared(kernel_dims, true)), + }); + - template: typename T + name: reduce_sum_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + auto red = ::tenncor::reduce_sum(arg, dimension, 1); + + std::vector indices(ade::rank_cap); + auto bt = indices.begin(); + auto it = bt + dimension; + std::iota(bt, it, 0); + std::iota(it, indices.end(), dimension + 1); + indices[ade::rank_cap - 1] = dimension; + return ::tenncor::permute(red, indices); + - template: typename T + name: reduce_prod_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + auto red = ::tenncor::reduce_prod(arg, dimension, 1); + + std::vector indices(ade::rank_cap); + auto bt = indices.begin(); + auto it = bt + dimension; + std::iota(bt, it, 0); + std::iota(it, indices.end(), dimension + 1); + indices[ade::rank_cap - 1] = dimension; + return ::tenncor::permute(red, indices); + - template: typename T + name: reduce_min_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + auto red = ::tenncor::reduce_min(arg, dimension, 1); + + std::vector indices(ade::rank_cap); + auto bt = indices.begin(); + auto it = bt + dimension; + std::iota(bt, it, 0); + std::iota(it, indices.end(), dimension + 1); + indices[ade::rank_cap - 1] = dimension; + return ::tenncor::permute(red, indices); + - template: typename T + name: reduce_max_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + auto red = ::tenncor::reduce_max(arg, dimension, 1); + + std::vector indices(ade::rank_cap); + auto bt = indices.begin(); + auto it = bt + dimension; + std::iota(bt, it, 0); + std::iota(it, indices.end(), dimension + 1); + indices[ade::rank_cap - 1] = dimension; + return ::tenncor::permute(red, indices); + - template: typename T + name: transpose + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ::tenncor::permute(arg, {1, 0}); + - template: typename T + name: reduce_mean + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: return ::tenncor::div(::tenncor::reduce_sum(arg), ::tenncor::n_elems(arg)); + - template: typename T + name: reduce_mean_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: | + // + auto red = ::tenncor::reduce_sum_1d(arg, dimension); + auto dim = ead::make_constant_scalar(arg->shape().at(dimension), red->shape()); + return ::tenncor::div(red, dim); + - template: typename T + name: reduce_l2norm + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: return ::tenncor::sqrt(::tenncor::reduce_sum(::tenncor::square(arg), offset, ndims)); + - template: typename T + name: reduce_l2norm_1d + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: dimension + out: + type: ead::NodeptrT + val: return ::tenncor::sqrt(::tenncor::reduce_sum_1d(::tenncor::square(arg), dimension)); + - template: typename T + name: clip_by_range + args: + - dtype: ead::NodeptrT + name: arg + - dtype: T + name: minval + - dtype: T + name: maxval + out: + type: ead::NodeptrT + val: | + // + if (minval > maxval) + { + logs::fatal("min value is below max"); + } + ade::Shape shape = arg->shape(); + auto lo = ead::make_constant_scalar(minval, shape); + auto hi = ead::make_constant_scalar(maxval, shape); + auto out = ::tenncor::max(::tenncor::min(arg, hi), lo); + tag::recursive_group_tag(out->get_tensor(), "clip_by_range", { + arg->get_tensor().get(), + lo->get_tensor().get(), + hi->get_tensor().get(), + }); + return out; + - template: typename T + name: clip_by_l2norm + args: + - dtype: ead::NodeptrT + name: arg + - dtype: T + name: upper + out: + type: ead::NodeptrT + val: | + // + if (upper == 0) + { + logs::fatal("cannot clip_by_norm with a upper limit of 0"); + } + ade::Shape shape = arg->shape(); + auto limit = ead::make_constant_scalar(upper, shape); + auto norm = ::tenncor::extend(::tenncor::reduce_l2norm(arg), 0, + std::vector(shape.begin(), shape.end())); + auto out = ::tenncor::if_then_else(::tenncor::lt(norm, limit), + arg, ::tenncor::div(::tenncor::mul(arg, limit), norm)); + tag::recursive_group_tag(out->get_tensor(), "clip_by_l2norm", { + arg->get_tensor().get(), + limit->get_tensor().get(), + }); + return out; + description: 'clip by l2norm ((todo) allow l2norm to be configurable)' + - template: typename T + name: sum + args: + - dtype: ead::NodesT + name: args + out: + type: ead::NodeptrT + val: | + // + if (args.empty()) + { + logs::fatal("cannot sum without arguments"); + } + ead::NodeptrT out = args[0]; + for (size_t i = 1, n = args.size(); i < n; ++i) + { + out = ::tenncor::add(out, args[i]); + } + return out; + - template: typename T + name: prod + args: + - dtype: ead::NodesT + name: args + out: + type: ead::NodeptrT + val: | + // + if (args.empty()) + { + logs::fatal("cannot sum without arguments"); + } + ead::NodeptrT out = args[0]; + for (size_t i = 1, n = args.size(); i < n; ++i) + { + out = ::tenncor::mul(out, args[i]); + } + return out; + - template: typename T + name: softmax + args: + - dtype: ead::NodeptrT + name: arg + - dtype: ade::RankT + name: offset + default: '0' + - dtype: ade::RankT + name: ndims + default: ade::rank_cap + out: + type: ead::NodeptrT + val: | + // + auto exarg = exp(arg); + ade::Shape shape = exarg->shape(); + auto it = shape.begin() + offset; + std::vector xlist(it, it + ndims); + auto out = ::tenncor::div(exarg, + ::tenncor::extend(::tenncor::reduce_sum(exarg, offset, offset+ndims), + offset, xlist)); + tag::recursive_group_tag(out->get_tensor(), "softmax", { + arg->get_tensor().get()}); + return out; + - template: typename T + name: sign + args: + - dtype: ead::NodeptrT + name: x + out: + type: ead::NodeptrT + val: return ::tenncor::pow(x,ead::make_constant_scalar(0,x->shape())); + tenncor::random: + - template: typename T + name: rand_unif + args: + - dtype: ead::NodeptrT + name: arg1 + - dtype: ead::NodeptrT + name: arg2 + out: + type: ead::NodeptrT + val: | + // + return ead::make_functor( + ade::Opcode{"RAND_UNIF",::age::RAND_UNIF},{ + ead::identity_map(arg1), + ead::identity_map(arg2) + }); + - template: typename T + name: rand_binom_one + args: + - dtype: ead::NodeptrT + name: arg + out: + type: ead::NodeptrT + val: | + // + const ade::Shape& shape = arg->get_tensor()->shape(); + auto trial = ::tenncor::random::rand_unif( + ead::convert_to_node(ead::make_variable_scalar((T) 0, shape)), + ead::convert_to_node(ead::make_variable_scalar((T) 1, shape))); + return ::tenncor::lt(trial, arg); + tenncor::nn: + - template: typename T + name: relu + args: + - dtype: ead::NodeptrT + name: x + out: + type: ead::NodeptrT + val: return ::tenncor::max(x,ead::make_constant_scalar(0,x->shape())); + - template: typename T + name: conv2d + args: + - dtype: ead::NodeptrT + name: image + - dtype: ead::NodeptrT + name: kernel + out: + type: ead::NodeptrT + val: | + // + // image must be in form [in, width, height, batch] + // kernel must be in form [out, in, width, height] + // see https://www.tensorflow.org/api_docs/python/tf/nn/conv2d + ade::DimT nfilters = kernel->shape().at(0); + ead::NodesT convolveds; + convolveds.reserve(nfilters); + for (ade::DimT i = 0; i < nfilters; ++i) + { + auto filter = ::tenncor::permute( + ::tenncor::slice(kernel, i, 1, 0), + {1, 2, 3, 0}); + auto conved = ::tenncor::convolution(image, filter, + {0, 1, 2}); + auto padded = ::tenncor::pad(conved, + {i, nfilters - i - 1}, 0); + convolveds.push_back(padded); + } + auto out = ::tenncor::sum(convolveds); + tag::recursive_group_tag(out->get_tensor(), "conv2d", { + image->get_tensor().get(), + kernel->get_tensor().get() + }); + return out; + - template: typename T + name: fully_connect + args: + - dtype: ead::NodesT + name: inputs + - dtype: ead::NodesT + name: weights + - dtype: ead::NodeptrT + name: bias + out: + type: ead::NodeptrT + val: | + // + if (weights.empty()) + { + logs::fatal("cannot create a fully connected layer without weights"); + } + size_t ninputs = inputs.size(); + if (ninputs != weights.size()) + { + logs::fatalf( + "number of inputs (%d) must equal the number of weights (%d)", + ninputs, weights.size()); + } + std::unordered_set ignores = { + inputs[0]->get_tensor().get(), + weights[0]->get_tensor().get() + }; + auto out = ::tenncor::matmul(inputs[0], weights[0]); + for (size_t i = 1; i < ninputs; ++i) + { + ignores.emplace(inputs[i]->get_tensor().get()); + ignores.emplace(weights[i]->get_tensor().get()); + out = ::tenncor::add(out, ::tenncor::matmul(inputs[i], weights[i])); + } + if (nullptr != bias) + { + const ade::Shape& shape = out->shape(); + out = ::tenncor::add(out, ::tenncor::extend(bias, 1, {shape.at(1)})); + ignores.emplace(bias->get_tensor().get()); + } + tag::recursive_group_tag(out->get_tensor(), "fully_connect", ignores); + return out; diff --git a/dbg/grpc/session.hpp b/dbg/grpc/session.hpp index 97a8fca05..abe13a65d 100644 --- a/dbg/grpc/session.hpp +++ b/dbg/grpc/session.hpp @@ -58,8 +58,8 @@ struct InteractiveSession final : public ead::iSession InteractiveSession (std::shared_ptr channel, ClientConfig client_cfg = ClientConfig(), tag::TagRegistry& registry = tag::get_reg()) : - client_(channel, client_cfg), - registry_(registry) + registry_(registry), + client_(channel, client_cfg) { logs::infof("created session: %s", sess_id_.c_str()); } diff --git a/dbg/python/stream.cpp b/dbg/python/stream.cpp index b49297902..d0c47bb91 100644 --- a/dbg/python/stream.cpp +++ b/dbg/python/stream.cpp @@ -92,7 +92,7 @@ PYBIND11_MODULE(stream_dbg, m) } else { - logs::warnf("failed to print graph to file '%s'", + logs::warnf("failed to print graph to file `%s`", filename.c_str()); } }, @@ -112,7 +112,7 @@ PYBIND11_MODULE(stream_dbg, m) } else { - logs::warnf("failed to write csv to file '%s'", filename.c_str()); + logs::warnf("failed to write csv to file `%s`", filename.c_str()); } }, "Stream csv of graph edges to file", @@ -134,7 +134,7 @@ PYBIND11_MODULE(stream_dbg, m) } else { - logs::warnf("failed to write csv to file '%s'", filename.c_str()); + logs::warnf("failed to write csv to file `%s`", filename.c_str()); } }, "Return csv of graph edges of multiple roots to file", diff --git a/dbg/stream/ade.hpp b/dbg/stream/ade.hpp index 7ecad7ce6..4177d766e 100644 --- a/dbg/stream/ade.hpp +++ b/dbg/stream/ade.hpp @@ -8,6 +8,7 @@ #include +#include "ade/ileaf.hpp" #include "ade/functor.hpp" #include "dbg/stream/tree.hpp" @@ -45,6 +46,10 @@ struct PrettyEquation final { out << it->second << "="; } + if (auto var = dynamic_cast(root)) + { + out << (var->is_const() ? "constant:" : "variable:"); + } out << root->to_string(); if (showshape_) { @@ -54,7 +59,7 @@ struct PrettyEquation final }) {} /// Stream equation of ptr to out - void print (std::ostream& out, ade::TensptrT& ptr) + void print (std::ostream& out, const ade::TensptrT& ptr) { drawer_.print(out, ptr.get()); } diff --git a/docs/_r_e_a_d_m_e_8md.html b/docs/_r_e_a_d_m_e_8md.html deleted file mode 100644 index 9bc684ede..000000000 --- a/docs/_r_e_a_d_m_e_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: README.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
README.md File Reference
-
-
-
- - - - diff --git a/docs/_r_e_a_d_m_e___a_d_e_8md.html b/docs/_r_e_a_d_m_e___a_d_e_8md.html deleted file mode 100644 index 84b4e1c81..000000000 --- a/docs/_r_e_a_d_m_e___a_d_e_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ade/README_ADE.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ade/README_ADE.md File Reference
-
-
-
- - - - diff --git a/docs/_r_e_a_d_m_e___d_b_g_8md.html b/docs/_r_e_a_d_m_e___d_b_g_8md.html deleted file mode 100644 index eeecef074..000000000 --- a/docs/_r_e_a_d_m_e___d_b_g_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/README_DBG.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
dbg/README_DBG.md File Reference
-
-
-
- - - - diff --git a/docs/_r_e_a_d_m_e___e_a_d_8md.html b/docs/_r_e_a_d_m_e___e_a_d_8md.html deleted file mode 100644 index 8c51fbbce..000000000 --- a/docs/_r_e_a_d_m_e___e_a_d_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead/README_EAD.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ead/README_EAD.md File Reference
-
-
-
- - - - diff --git a/docs/_r_e_a_d_m_e___p_b_m_8md.html b/docs/_r_e_a_d_m_e___p_b_m_8md.html deleted file mode 100644 index f7d8f3c23..000000000 --- a/docs/_r_e_a_d_m_e___p_b_m_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: pbm/README_PBM.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
pbm/README_PBM.md File Reference
-
-
-
- - - - diff --git a/docs/ade_2ade_8hpp.html b/docs/ade_2ade_8hpp.html deleted file mode 100644 index 515e2aef5..000000000 --- a/docs/ade_2ade_8hpp.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Tenncor: ade/ade.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade.hpp File Reference
-
-
-
#include "ade/functor.hpp"
-#include "ade/traveler.hpp"
-#include "ade/iopfunc.hpp"
-
-Include dependency graph for ade.hpp:
-
-
- - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/ade_2ade_8hpp__dep__incl.map b/docs/ade_2ade_8hpp__dep__incl.map deleted file mode 100644 index 4ad49c8e9..000000000 --- a/docs/ade_2ade_8hpp__dep__incl.map +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ade_2ade_8hpp__dep__incl.md5 b/docs/ade_2ade_8hpp__dep__incl.md5 deleted file mode 100644 index 156ccdfdf..000000000 --- a/docs/ade_2ade_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a70e2faf272b10a81369fbcc6151ae59 \ No newline at end of file diff --git a/docs/ade_2ade_8hpp__dep__incl.png b/docs/ade_2ade_8hpp__dep__incl.png deleted file mode 100644 index 864a0565c..000000000 Binary files a/docs/ade_2ade_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade_2ade_8hpp__incl.map b/docs/ade_2ade_8hpp__incl.map deleted file mode 100644 index beeb33913..000000000 --- a/docs/ade_2ade_8hpp__incl.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/ade_2ade_8hpp__incl.md5 b/docs/ade_2ade_8hpp__incl.md5 deleted file mode 100644 index 4de19612e..000000000 --- a/docs/ade_2ade_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5a1a8b4796ad756153d7f4665680dc92 \ No newline at end of file diff --git a/docs/ade_2ade_8hpp__incl.png b/docs/ade_2ade_8hpp__incl.png deleted file mode 100644 index 1d8884810..000000000 Binary files a/docs/ade_2ade_8hpp__incl.png and /dev/null differ diff --git a/docs/ade_2ade_8hpp_source.html b/docs/ade_2ade_8hpp_source.html deleted file mode 100644 index 5b09018a7..000000000 --- a/docs/ade_2ade_8hpp_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Tenncor: ade/ade.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade.hpp
-
- - - - - diff --git a/docs/ade_2coord_8hpp.html b/docs/ade_2coord_8hpp.html deleted file mode 100644 index 21fc96930..000000000 --- a/docs/ade_2coord_8hpp.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -Tenncor: ade/coord.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
coord.hpp File Reference
-
-
-
#include <functional>
-#include "ade/matops.hpp"
-
-Include dependency graph for coord.hpp:
-
-
- - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - -

-Classes

struct  ade::iCoordMap
 Interface for transforming coordinates and reversing the coordinate. More...
 
struct  ade::CoordMap
 
- - - -

-Namespaces

 ade
 
- - - - -

-Typedefs

using ade::CoordptrT = std::shared_ptr< iCoordMap >
 Type of iCoordMap smartpointer. More...
 
- - - - - - - - - - - - -

-Functions

bool ade::is_identity (iCoordMap *coorder)
 Checks if the coord mapper is an identity mapper. More...
 
CoordptrT ade::reduce (RankT rank, std::vector< DimT > red)
 
CoordptrT ade::extend (RankT rank, std::vector< DimT > ext)
 
CoordptrT ade::permute (std::vector< RankT > order)
 
CoordptrT ade::flip (RankT dim)
 
- - - - -

-Variables

CoordptrT ade::identity
 Identity matrix instance. More...
 
-
- - - - diff --git a/docs/ade_2coord_8hpp__dep__incl.map b/docs/ade_2coord_8hpp__dep__incl.map deleted file mode 100644 index da11c62be..000000000 --- a/docs/ade_2coord_8hpp__dep__incl.map +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ade_2coord_8hpp__dep__incl.md5 b/docs/ade_2coord_8hpp__dep__incl.md5 deleted file mode 100644 index ac097d368..000000000 --- a/docs/ade_2coord_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5f88c804386136e1d2321a24c4112b02 \ No newline at end of file diff --git a/docs/ade_2coord_8hpp__dep__incl.png b/docs/ade_2coord_8hpp__dep__incl.png deleted file mode 100644 index 3425a9178..000000000 Binary files a/docs/ade_2coord_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade_2coord_8hpp__incl.map b/docs/ade_2coord_8hpp__incl.map deleted file mode 100644 index 3f68d401b..000000000 --- a/docs/ade_2coord_8hpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/ade_2coord_8hpp__incl.md5 b/docs/ade_2coord_8hpp__incl.md5 deleted file mode 100644 index 93eb3208e..000000000 --- a/docs/ade_2coord_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -de14fa056d03afb12824a885ba008335 \ No newline at end of file diff --git a/docs/ade_2coord_8hpp__incl.png b/docs/ade_2coord_8hpp__incl.png deleted file mode 100644 index e5763f50a..000000000 Binary files a/docs/ade_2coord_8hpp__incl.png and /dev/null differ diff --git a/docs/ade_2coord_8hpp_source.html b/docs/ade_2coord_8hpp_source.html deleted file mode 100644 index 5ca0ba789..000000000 --- a/docs/ade_2coord_8hpp_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Tenncor: ade/coord.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
coord.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <functional>
10 
11 #include "ade/matops.hpp"
12 
13 #ifndef ADE_COORD_HPP
14 #define ADE_COORD_HPP
15 
16 namespace ade
17 {
18 
20 struct iCoordMap
21 {
22  virtual ~iCoordMap (void) = default;
23 
25  virtual iCoordMap* connect (const iCoordMap& rhs) const = 0;
26 
28  virtual void forward (CoordT::iterator out,
29  CoordT::const_iterator in) const = 0;
30 
33  virtual iCoordMap* reverse (void) const = 0;
34 
36  virtual std::string to_string (void) const = 0;
37 
40  virtual void access (std::function<void(const MatrixT&)> cb) const = 0;
41 
43  virtual bool is_bijective (void) const = 0;
44 };
45 
48 struct CoordMap final : public iCoordMap
49 {
50  CoordMap (std::function<void(MatrixT)> init)
51  {
52  std::memset(fwd_, 0, mat_size);
53  fwd_[rank_cap][rank_cap] = 1;
54  init(fwd_);
55  }
56 
58  iCoordMap* connect (const iCoordMap& rhs) const override
59  {
60  return new CoordMap([&](MatrixT out)
61  {
62  rhs.access([&](const MatrixT& in)
63  {
64  matmul(out, fwd_, in);
65  });
66  });
67  }
68 
70  void forward (CoordT::iterator out,
71  CoordT::const_iterator in) const override;
72 
74  iCoordMap* reverse (void) const override
75  {
76  return new CoordMap([this](MatrixT m)
77  {
78  inverse(m, this->fwd_);
79  });
80  }
81 
83  std::string to_string (void) const override
84  {
85  return ade::to_string(fwd_);
86  }
87 
89  void access (std::function<void(const MatrixT&)> cb) const override
90  {
91  cb(fwd_);
92  }
93 
95  bool is_bijective (void) const override
96  {
97  return (int) determinant(fwd_) != 0;
98  }
99 
100 private:
103 };
104 
106 using CoordptrT = std::shared_ptr<iCoordMap>;
107 
109 extern CoordptrT identity;
110 
112 bool is_identity (iCoordMap* coorder);
113 
118 CoordptrT reduce (RankT rank, std::vector<DimT> red);
119 
124 CoordptrT extend (RankT rank, std::vector<DimT> ext);
125 
134 CoordptrT permute (std::vector<RankT> order);
135 
139 CoordptrT flip (RankT dim);
140 
141 }
142 
143 #endif // ADE_COORD_HPP
virtual void forward(CoordT::iterator out, CoordT::const_iterator in) const =0
Forward transform coordinates.
-
CoordptrT flip(RankT dim)
-
CoordptrT extend(RankT rank, std::vector< DimT > ext)
-
CoordptrT reduce(RankT rank, std::vector< DimT > red)
-
virtual bool is_bijective(void) const =0
Return true if this instance maps coordinates/shapes bijectively.
-
virtual ~iCoordMap(void)=default
-
virtual std::string to_string(void) const =0
Return string representation of coordinate transformer.
-
bool is_bijective(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:95
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
void access(std::function< void(const MatrixT &)> cb) const override
Implementation of iCoordMap.
Definition: coord.hpp:89
-
CoordMap(std::function< void(MatrixT)> init)
Definition: coord.hpp:50
- -
virtual void access(std::function< void(const MatrixT &)> cb) const =0
-
void matmul(MatrixT out, const MatrixT &lhs, const MatrixT &rhs)
Apply matrix multiplication for lhs and rhs to out matrix.
-
iCoordMap * connect(const iCoordMap &rhs) const override
Implementation of iCoordMap.
Definition: coord.hpp:58
-
const size_t mat_size
Number of bytes in a homogeneous matrix.
Definition: matops.hpp:25
-
CoordptrT identity
Identity matrix instance.
-
Interface for transforming coordinates and reversing the coordinate.
Definition: coord.hpp:20
-
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28
-
Definition: coord.hpp:16
-
Definition: coord.hpp:48
-
std::string to_string(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:83
-
void forward(CoordT::iterator out, CoordT::const_iterator in) const override
Implementation of iCoordMap.
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
double determinant(const MatrixT &mat)
Return the determinant of matrix.
-
iCoordMap * reverse(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:74
-
virtual iCoordMap * reverse(void) const =0
-
CoordptrT permute(std::vector< RankT > order)
-
MatrixT fwd_
Forward transformation matrix.
Definition: coord.hpp:102
-
const RankT rank_cap
Number of dimsensions in a shape/coordinate.
Definition: shape.hpp:45
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
virtual iCoordMap * connect(const iCoordMap &rhs) const =0
Return matmul(this, rhs)
-
void inverse(MatrixT out, const MatrixT &in)
Inverse in matrix and dump to out matrix.
-
bool is_identity(iCoordMap *coorder)
Checks if the coord mapper is an identity mapper.
-
- - - - diff --git a/docs/ade_2funcarg_8hpp.html b/docs/ade_2funcarg_8hpp.html deleted file mode 100644 index bad32eaa1..000000000 --- a/docs/ade_2funcarg_8hpp.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -Tenncor: ade/funcarg.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
funcarg.hpp File Reference
-
-
-
#include "ade/itensor.hpp"
-#include "ade/coord.hpp"
-
-Include dependency graph for funcarg.hpp:
-
-
- - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ade::FuncArg
 Coordinate mapper and tensor pair. More...
 
- - - -

-Namespaces

 ade
 
- - - - - - - -

-Typedefs

using ade::ArgsT = std::vector< FuncArg >
 Type of functor arguments. More...
 
using ade::TensT = std::vector< TensptrT >
 Vector representation of ade tensor pointers. More...
 
- - - - - - - - - - - - - - - - - - - - -

-Functions

Shape ade::apply_shaper (const CoordptrT &shaper, Shape inshape)
 
FuncArg ade::identity_map (TensptrT tensor)
 Return FuncArg that identity maps input tensor. More...
 
FuncArg ade::reduce_1d_map (TensptrT tensor, RankT rank)
 
FuncArg ade::reduce_map (TensptrT tensor, RankT rank, std::vector< DimT > red)
 
FuncArg ade::extend_map (TensptrT tensor, RankT rank, std::vector< DimT > ext)
 
FuncArg ade::permute_map (TensptrT tensor, std::vector< RankT > order)
 
FuncArg ade::flip_map (TensptrT tensor, RankT dim)
 Return FuncArg that flips input tensor along dimension. More...
 
ArgsT ade::to_args (TensT tens)
 Return ArgsT with each tensor in TensT attached to identity mapper. More...
 
-
- - - - diff --git a/docs/ade_2funcarg_8hpp__dep__incl.map b/docs/ade_2funcarg_8hpp__dep__incl.map deleted file mode 100644 index 62af65c7e..000000000 --- a/docs/ade_2funcarg_8hpp__dep__incl.map +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ade_2funcarg_8hpp__dep__incl.md5 b/docs/ade_2funcarg_8hpp__dep__incl.md5 deleted file mode 100644 index fe4872e49..000000000 --- a/docs/ade_2funcarg_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -223fe9f40806f9d7613145a3b4da2004 \ No newline at end of file diff --git a/docs/ade_2funcarg_8hpp__dep__incl.png b/docs/ade_2funcarg_8hpp__dep__incl.png deleted file mode 100644 index 9ce74e907..000000000 Binary files a/docs/ade_2funcarg_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade_2funcarg_8hpp__incl.map b/docs/ade_2funcarg_8hpp__incl.map deleted file mode 100644 index cb023071d..000000000 --- a/docs/ade_2funcarg_8hpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/ade_2funcarg_8hpp__incl.md5 b/docs/ade_2funcarg_8hpp__incl.md5 deleted file mode 100644 index a959edbbb..000000000 --- a/docs/ade_2funcarg_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d7a5f7dfa969651f2de52055fe61dfbd \ No newline at end of file diff --git a/docs/ade_2funcarg_8hpp__incl.png b/docs/ade_2funcarg_8hpp__incl.png deleted file mode 100644 index fda8edaa3..000000000 Binary files a/docs/ade_2funcarg_8hpp__incl.png and /dev/null differ diff --git a/docs/ade_2funcarg_8hpp_source.html b/docs/ade_2funcarg_8hpp_source.html deleted file mode 100644 index b16623580..000000000 --- a/docs/ade_2funcarg_8hpp_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Tenncor: ade/funcarg.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
funcarg.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/itensor.hpp"
10 #include "ade/coord.hpp"
11 
12 #ifndef ADE_FUNCARG_HPP
13 #define ADE_FUNCARG_HPP
14 
15 namespace ade
16 {
17 
18 Shape apply_shaper (const CoordptrT& shaper, Shape inshape);
19 
21 struct FuncArg final
22 {
24  FuncArg (TensptrT tensor, CoordptrT shaper) :
25  tensor_(tensor), shaper_(shaper)
26  {
27  if (tensor_ == nullptr)
28  {
29  logs::fatal("cannot map a null tensor");
30  }
31  map_io_ = tensor_->shape().n_elems() > shape().n_elems();
32  if (shaper == identity || map_io_)
33  {
34  coorder_ = shaper;
35  }
36  else
37  {
38  coorder_ = CoordptrT(shaper->reverse());
39  }
40  }
41 
43  FuncArg (TensptrT tensor, CoordptrT shaper,
44  bool map_io, CoordptrT coorder) :
45  tensor_(tensor), shaper_(shaper),
46  map_io_(map_io), coorder_(coorder)
47  {
48  if (tensor_ == nullptr)
49  {
50  logs::fatal("cannot map a null tensor");
51  }
52  }
53 
55  Shape shape (void) const
56  {
57  return apply_shaper(shaper_, tensor_->shape());
58  }
59 
61  TensptrT get_tensor (void) const
62  {
63  return tensor_;
64  }
65 
67  CoordptrT get_shaper (void) const
68  {
69  return shaper_;
70  }
71 
74  bool map_io (void) const
75  {
76  return map_io_;
77  }
78 
80  CoordptrT get_coorder (void) const
81  {
82  return coorder_;
83  }
84 
85 private:
88 
91 
94  bool map_io_;
95 
98 };
99 
101 using ArgsT = std::vector<FuncArg>;
102 
104 using TensT = std::vector<TensptrT>;
105 
107 FuncArg identity_map (TensptrT tensor);
108 
112 FuncArg reduce_1d_map (TensptrT tensor, RankT rank);
113 
118 FuncArg reduce_map (TensptrT tensor,
119  RankT rank, std::vector<DimT> red);
120 
125 FuncArg extend_map (TensptrT tensor,
126  RankT rank, std::vector<DimT> ext);
127 
131 FuncArg permute_map (TensptrT tensor, std::vector<RankT> order);
132 
134 FuncArg flip_map (TensptrT tensor, RankT dim);
135 
137 ArgsT to_args (TensT tens);
138 
139 }
140 
141 #endif // ADE_FUNCARG_HPP
FuncArg(TensptrT tensor, CoordptrT shaper)
Construct FuncArg auto deducing coorder_ and map_io_ flag.
Definition: funcarg.hpp:24
-
FuncArg extend_map(TensptrT tensor, RankT rank, std::vector< DimT > ext)
-
FuncArg identity_map(TensptrT tensor)
Return FuncArg that identity maps input tensor.
-
CoordptrT coorder_
Coordinate mapper.
Definition: funcarg.hpp:97
-
FuncArg permute_map(TensptrT tensor, std::vector< RankT > order)
-
bool map_io_
Definition: funcarg.hpp:94
- - -
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
NElemT n_elems(void) const
Return the total number of elements represented by the shape.
Definition: shape.hpp:116
-
ArgsT to_args(TensT tens)
Return ArgsT with each tensor in TensT attached to identity mapper.
-
bool map_io(void) const
Definition: funcarg.hpp:74
-
CoordptrT identity
Identity matrix instance.
-
CoordptrT get_coorder(void) const
Return coord map for coordinates.
Definition: funcarg.hpp:80
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Definition: coord.hpp:16
-
FuncArg flip_map(TensptrT tensor, RankT dim)
Return FuncArg that flips input tensor along dimension.
-
Shape apply_shaper(const CoordptrT &shaper, Shape inshape)
-
FuncArg reduce_map(TensptrT tensor, RankT rank, std::vector< DimT > red)
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
Definition: shape.hpp:60
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
-
TensptrT tensor_
Tensor reference.
Definition: funcarg.hpp:87
-
CoordptrT get_shaper(void) const
Return shaper coord map.
Definition: funcarg.hpp:67
-
FuncArg(TensptrT tensor, CoordptrT shaper, bool map_io, CoordptrT coorder)
Construct FuncArg with specific coorder_ and map_io_ flag.
Definition: funcarg.hpp:43
-
CoordptrT shaper_
Shape mapper.
Definition: funcarg.hpp:90
-
Shape shape(void) const
Return shape of tensor filtered through coordinate mapper.
Definition: funcarg.hpp:55
-
TensptrT get_tensor(void) const
Return tensor being mapped.
Definition: funcarg.hpp:61
-
FuncArg reduce_1d_map(TensptrT tensor, RankT rank)
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/ade_2functor_8hpp.html b/docs/ade_2functor_8hpp.html deleted file mode 100644 index 0b02efc16..000000000 --- a/docs/ade_2functor_8hpp.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Tenncor: ade/functor.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
functor.hpp File Reference
-
-
-
#include "ade/ifunctor.hpp"
-
-Include dependency graph for functor.hpp:
-
-
- - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ade::Functor
 Functor of the graph mapping to operators specified by opcode argument. More...
 
- - - -

-Namespaces

 ade
 
-
- - - - diff --git a/docs/ade_2functor_8hpp__dep__incl.map b/docs/ade_2functor_8hpp__dep__incl.map deleted file mode 100644 index e4283abbf..000000000 --- a/docs/ade_2functor_8hpp__dep__incl.map +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ade_2functor_8hpp__dep__incl.md5 b/docs/ade_2functor_8hpp__dep__incl.md5 deleted file mode 100644 index f38e1a05d..000000000 --- a/docs/ade_2functor_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d09a610750e302746cc0eb9ac578e33b \ No newline at end of file diff --git a/docs/ade_2functor_8hpp__dep__incl.png b/docs/ade_2functor_8hpp__dep__incl.png deleted file mode 100644 index abb6c9229..000000000 Binary files a/docs/ade_2functor_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade_2functor_8hpp__incl.map b/docs/ade_2functor_8hpp__incl.map deleted file mode 100644 index f3f60f041..000000000 --- a/docs/ade_2functor_8hpp__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/ade_2functor_8hpp__incl.md5 b/docs/ade_2functor_8hpp__incl.md5 deleted file mode 100644 index 612a7f3be..000000000 --- a/docs/ade_2functor_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -33eda81d71d2503b0a78cd3462a5788d \ No newline at end of file diff --git a/docs/ade_2functor_8hpp__incl.png b/docs/ade_2functor_8hpp__incl.png deleted file mode 100644 index 6a128ce03..000000000 Binary files a/docs/ade_2functor_8hpp__incl.png and /dev/null differ diff --git a/docs/ade_2functor_8hpp_source.html b/docs/ade_2functor_8hpp_source.html deleted file mode 100644 index ab3377302..000000000 --- a/docs/ade_2functor_8hpp_source.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: ade/functor.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
functor.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/ifunctor.hpp"
10 
11 #ifndef ADE_FUNCTOR_HPP
12 #define ADE_FUNCTOR_HPP
13 
14 namespace ade
15 {
16 
18 struct Functor final : public iFunctor
19 {
21  static Functor* get (Opcode opcode, ArgsT args)
22  {
23  if (0 == args.size())
24  {
25  logs::fatalf("cannot perform %s with no arguments",
26  opcode.name_.c_str());
27  }
28 
29  Shape shape = args[0].shape();
30  for (size_t i = 1, n = args.size(); i < n; ++i)
31  {
32  Shape ishape = args[i].shape();
33  if (false == ishape.compatible_after(shape, 0))
34  {
35  logs::fatalf("cannot perform %s with incompatible shapes %s "
36  "and %s", opcode.name_.c_str(), shape.to_string().c_str(),
37  ishape.to_string().c_str());
38  }
39  }
40  return new Functor(opcode, shape, args);
41  }
42 
43  static Functor* get (const Functor& other)
44  {
45  return new Functor(other);
46  }
47 
48  static Functor* get (Functor&& other)
49  {
50  return new Functor(std::move(other));
51  }
52 
53  Functor& operator = (const Functor& other) = delete;
54 
55  Functor& operator = (Functor&& other) = delete;
56 
58  const Shape& shape (void) const override
59  {
60  return shape_;
61  }
62 
64  std::string to_string (void) const override
65  {
66  return opcode_.name_;
67  }
68 
70  Opcode get_opcode (void) const override
71  {
72  return opcode_;
73  }
74 
76  const ArgsT& get_children (void) const override
77  {
78  return args_;
79  }
80 
82  void update_child (FuncArg arg, size_t index) override
83  {
84  logs::warn("ade::Functor does not allow editing of children");
85  }
86 
87 private:
89  opcode_(opcode), shape_(shape), args_(args) {}
90 
91  Functor (const Functor& other) = default;
92 
93  Functor (Functor&& other) = default;
94 
97 
100 
103 };
104 
105 }
106 
107 #endif // ADE_FUNCTOR_HPP
Functor of the graph mapping to operators specified by opcode argument.
Definition: functor.hpp:18
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
args
Definition: csv_to_png.py:105
-
Encoding of operation.
Definition: ifunctor.hpp:18
-
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
Functor & operator=(const Functor &other)=delete
-
std::string to_string(void) const
Return string representation of shape.
Definition: shape.hpp:146
-
Opcode get_opcode(void) const override
Implementation of iFunctor.
Definition: functor.hpp:70
-
Opcode opcode_
Operation encoding.
Definition: functor.hpp:96
-
const ArgsT & get_children(void) const override
Implementation of iFunctor.
Definition: functor.hpp:76
-
Definition: coord.hpp:16
-
ArgsT args_
Tensor arguments (and children)
Definition: functor.hpp:102
-
void update_child(FuncArg arg, size_t index) override
Implementation of iFunctor.
Definition: functor.hpp:82
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
std::string to_string(void) const override
Implementation of iTensor.
Definition: functor.hpp:64
-
NElemT index(Shape shape, CoordT coord)
-
bool compatible_after(const Shape &other, RankT idx) const
Definition: shape.hpp:134
-
Definition: shape.hpp:60
-
Shape shape_
Shape info built at construction time according to arguments.
Definition: functor.hpp:99
-
Functor(Opcode opcode, Shape shape, ArgsT args)
Definition: functor.hpp:88
- -
const Shape & shape(void) const override
Implementation of iTensor.
Definition: functor.hpp:58
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/ade_2ileaf_8hpp.html b/docs/ade_2ileaf_8hpp.html deleted file mode 100644 index 371d70f0c..000000000 --- a/docs/ade_2ileaf_8hpp.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -Tenncor: ade/ileaf.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ileaf.hpp File Reference
-
-
-
#include "ade/itensor.hpp"
-#include "ade/idata.hpp"
-
-Include dependency graph for ileaf.hpp:
-
-
- - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ade::iLeaf
 Leaf of the graph commonly representing the variable in an equation. More...
 
- - - -

-Namespaces

 ade
 
- - - - -

-Typedefs

using ade::LeafptrT = std::shared_ptr< iLeaf >
 Leaf smart pointer. More...
 
-
- - - - diff --git a/docs/ade_2ileaf_8hpp__dep__incl.map b/docs/ade_2ileaf_8hpp__dep__incl.map deleted file mode 100644 index 90e11ce24..000000000 --- a/docs/ade_2ileaf_8hpp__dep__incl.map +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ade_2ileaf_8hpp__dep__incl.md5 b/docs/ade_2ileaf_8hpp__dep__incl.md5 deleted file mode 100644 index ade11b9ad..000000000 --- a/docs/ade_2ileaf_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f22fafa05b31a057a9b5d6d97f9ded4c \ No newline at end of file diff --git a/docs/ade_2ileaf_8hpp__dep__incl.png b/docs/ade_2ileaf_8hpp__dep__incl.png deleted file mode 100644 index ad67bb56b..000000000 Binary files a/docs/ade_2ileaf_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade_2ileaf_8hpp__incl.map b/docs/ade_2ileaf_8hpp__incl.map deleted file mode 100644 index be9db419c..000000000 --- a/docs/ade_2ileaf_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/ade_2ileaf_8hpp__incl.md5 b/docs/ade_2ileaf_8hpp__incl.md5 deleted file mode 100644 index 0d8f4b5c2..000000000 --- a/docs/ade_2ileaf_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1b4c403fc30a618dcea5a19e04ddf679 \ No newline at end of file diff --git a/docs/ade_2ileaf_8hpp__incl.png b/docs/ade_2ileaf_8hpp__incl.png deleted file mode 100644 index 0b865b1cf..000000000 Binary files a/docs/ade_2ileaf_8hpp__incl.png and /dev/null differ diff --git a/docs/ade_2ileaf_8hpp_source.html b/docs/ade_2ileaf_8hpp_source.html deleted file mode 100644 index fc8f6de36..000000000 --- a/docs/ade_2ileaf_8hpp_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: ade/ileaf.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ileaf.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/itensor.hpp"
10 #include "ade/idata.hpp"
11 
12 #ifndef ADE_ILEAF_HPP
13 #define ADE_ILEAF_HPP
14 
15 namespace ade
16 {
17 
19 struct iLeaf : public iTensor, public iData
20 {
21  virtual ~iLeaf (void) = default;
22 
24  void accept (iTraveler& visiter) override
25  {
26  visiter.visit(this);
27  }
28 };
29 
31 using LeafptrT = std::shared_ptr<iLeaf>;
32 
33 }
34 
35 #endif // ADE_ILEAF_HPP
std::shared_ptr< iLeaf > LeafptrT
Leaf smart pointer.
Definition: ileaf.hpp:31
- -
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
Interface for unveiling data.
Definition: idata.hpp:19
-
Definition: coord.hpp:16
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
virtual void visit(iLeaf *leaf)=0
Visit leaf node.
- -
void accept(iTraveler &visiter) override
Implementation of iTensor.
Definition: ileaf.hpp:24
-
virtual ~iLeaf(void)=default
-
- - - - diff --git a/docs/ade_2src_2coord_8cpp.html b/docs/ade_2src_2coord_8cpp.html deleted file mode 100644 index de6b51abc..000000000 --- a/docs/ade_2src_2coord_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: ade/src/coord.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
coord.cpp File Reference
-
-
-
#include "ade/coord.hpp"
-
-Include dependency graph for coord.cpp:
-
-
- - - - - -
-
- - - - diff --git a/docs/ade_2src_2coord_8cpp__incl.map b/docs/ade_2src_2coord_8cpp__incl.map deleted file mode 100644 index 37e94cf03..000000000 --- a/docs/ade_2src_2coord_8cpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/ade_2src_2coord_8cpp__incl.md5 b/docs/ade_2src_2coord_8cpp__incl.md5 deleted file mode 100644 index 67d85c8c4..000000000 --- a/docs/ade_2src_2coord_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -cf142a43785c26f645efbad5f2d76f3a \ No newline at end of file diff --git a/docs/ade_2src_2coord_8cpp__incl.png b/docs/ade_2src_2coord_8cpp__incl.png deleted file mode 100644 index 6431fc4da..000000000 Binary files a/docs/ade_2src_2coord_8cpp__incl.png and /dev/null differ diff --git a/docs/ade_8hpp.html b/docs/ade_8hpp.html deleted file mode 100644 index ecdc0114d..000000000 --- a/docs/ade_8hpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Tenncor: ade/ade.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade.hpp File Reference
-
-
-
#include "ade/functor.hpp"
-#include "ade/traveler.hpp"
-#include "ade/iopfunc.hpp"
-
-Include dependency graph for ade.hpp:
-
-
- -
-
-This graph shows which files directly or indirectly include this file:
-
-
- -
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/ade_8hpp__dep__incl.dot b/docs/ade_8hpp__dep__incl.dot deleted file mode 100644 index 2ffa57afa..000000000 --- a/docs/ade_8hpp__dep__incl.dot +++ /dev/null @@ -1,52 +0,0 @@ -digraph "ade/ade.hpp" -{ - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node23 [label="ade/ade.hpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black"]; - Node23 -> Node24 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node24 [label="pbm/data.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$data_8hpp.html"]; - Node24 -> Node25 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node25 [label="ead/serialize.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$serialize_8hpp.html"]; - Node25 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node26 [label="ead/ead.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_8hpp.html"]; - Node26 -> Node27 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node27 [label="ead/parse.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2parse_8hpp.html"]; - Node27 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node28 [label="ead/python/ead.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_8cpp.html"]; - Node24 -> Node29 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node29 [label="pbm/load.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$load_8hpp.html"]; - Node24 -> Node30 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node30 [label="pbm/save.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$save_8hpp.html"]; - Node23 -> Node31 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node31 [label="opt/stats.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$stats_8hpp.html"]; - Node31 -> Node32 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node32 [label="opt/ivoter.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ivoter_8hpp.html"]; - Node32 -> Node33 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node33 [label="opt/matcher.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$matcher_8hpp.html"]; - Node33 -> Node34 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node34 [label="opt/optimize.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$optimize_8hpp.html"]; - Node34 -> Node35 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node35 [label="ead/session.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$session_8hpp.html"]; - Node35 -> Node26 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node35 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node34 -> Node36 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node36 [label="opt/parse.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$opt_2parse_8hpp.html"]; - Node36 -> Node27 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node36 -> Node37 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node37 [label="opt/src/parse.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$parse_8cpp.html"]; - Node34 -> Node38 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node38 [label="opt/src/optimize.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$optimize_8cpp.html"]; - Node32 -> Node39 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node39 [label="opt/src/ivoter.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ivoter_8cpp.html"]; - Node32 -> Node40 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node40 [label="opt/voter.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$voter_8hpp.html"]; - Node40 -> Node37 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node31 -> Node41 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node41 [label="opt/rmdups.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$rmdups_8hpp.html"]; - Node41 -> Node38 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node41 -> Node42 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node42 [label="opt/src/rmdups.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$rmdups_8cpp.html"]; - Node31 -> Node43 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node43 [label="opt/src/stats.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$stats_8cpp.html"]; - Node23 -> Node28 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; -} diff --git a/docs/ade_8hpp__dep__incl.md5 b/docs/ade_8hpp__dep__incl.md5 deleted file mode 100644 index a2339062e..000000000 --- a/docs/ade_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d9419acf0c789e280948925177192dc1 \ No newline at end of file diff --git a/docs/ade_8hpp__incl.dot b/docs/ade_8hpp__incl.dot deleted file mode 100644 index 542fe5a9c..000000000 --- a/docs/ade_8hpp__incl.dot +++ /dev/null @@ -1,55 +0,0 @@ -digraph "ade/ade.hpp" -{ - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node0 [label="ade/ade.hpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black"]; - Node0 -> Node1 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node1 [label="ade/functor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2functor_8hpp.html"]; - Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node2 [label="ade/ifunctor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ifunctor_8hpp.html"]; - Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node3 [label="ade/funcarg.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2funcarg_8hpp.html"]; - Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node4 [label="ade/itensor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$itensor_8hpp.html"]; - Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node5 [label="ade/shape.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$shape_8hpp.html"]; - Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node6 [label="array",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node5 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node7 [label="cmath",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node5 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node8 [label="numeric",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node5 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node9 [label="vector",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node5 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node10 [label="logs/logs.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node3 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node11 [label="ade/coord.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2coord_8hpp.html"]; - Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node12 [label="functional",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node11 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node13 [label="ade/matops.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$matops_8hpp.html"]; - Node13 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node14 [label="cassert",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node13 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node15 [label="cstring",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node13 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node0 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node16 [label="ade/traveler.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$traveler_8hpp.html"]; - Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node17 [label="estd/estd.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node16 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node18 [label="ade/ileaf.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2ileaf_8hpp.html"]; - Node18 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node19 [label="ade/idata.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$idata_8hpp.html"]; - Node19 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node20 [label="cstdlib",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node19 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node21 [label="string",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node16 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node0 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node22 [label="ade/iopfunc.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$iopfunc_8hpp.html"]; - Node22 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node22 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; -} diff --git a/docs/ade_8hpp__incl.md5 b/docs/ade_8hpp__incl.md5 deleted file mode 100644 index 5016c0996..000000000 --- a/docs/ade_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6ac843c1dfab75beb7ea4980331af09c \ No newline at end of file diff --git a/docs/ade_8hpp_source.html b/docs/ade_8hpp_source.html deleted file mode 100644 index f0e9737fb..000000000 --- a/docs/ade_8hpp_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Tenncor: ade/ade.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade.hpp
-
- - - - - diff --git a/docs/ade__csv_8hpp.html b/docs/ade__csv_8hpp.html deleted file mode 100644 index 8b313470f..000000000 --- a/docs/ade__csv_8hpp.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/ade_csv.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ade_csv.hpp File Reference
-
-
-
#include <unordered_map>
-#include <unordered_set>
-#include <utility>
-#include "ade/ileaf.hpp"
-#include "ade/ifunctor.hpp"
-#include "estd/estd.hpp"
-#include "dbg/stream/ade.hpp"
-
-Include dependency graph for ade_csv.hpp:
-
-
- - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  CSVEquation
 
struct  CSVEquation::Edge
 
struct  CSVEquation::Node
 
- - - -

-Typedefs

using GetTypeF = std::function< NODE_TYPE(ade::iFunctor *)>
 
- - - -

-Enumerations

enum  NODE_TYPE { VARIABLE = 0, -FUNCTOR, -CACHED_FUNC - }
 
- - - -

-Functions

static void multiline_replace (std::string &multiline)
 
- - - -

-Variables

const char label_delim = ':'
 
-

Typedef Documentation

- -

◆ GetTypeF

- -
-
- - - - -
using GetTypeF = std::function<NODE_TYPE(ade::iFunctor*)>
-
- -
-
-

Enumeration Type Documentation

- -

◆ NODE_TYPE

- -
-
- - - - -
enum NODE_TYPE
-
- - - - -
Enumerator
VARIABLE 
FUNCTOR 
CACHED_FUNC 
- -
-
-

Function Documentation

- -

◆ multiline_replace()

- -
-
- - - - - -
- - - - - - - - -
static void multiline_replace (std::string & multiline)
-
-static
-
- -
-
-

Variable Documentation

- -

◆ label_delim

- -
-
- - - - -
const char label_delim = ':'
-
- -
-
-
- - - - diff --git a/docs/ade__csv_8hpp__dep__incl.map b/docs/ade__csv_8hpp__dep__incl.map deleted file mode 100644 index f92a25dd8..000000000 --- a/docs/ade__csv_8hpp__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/ade__csv_8hpp__dep__incl.md5 b/docs/ade__csv_8hpp__dep__incl.md5 deleted file mode 100644 index 01ea5a61f..000000000 --- a/docs/ade__csv_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6f810a1b6b8af56dddb0795365f1d08f \ No newline at end of file diff --git a/docs/ade__csv_8hpp__dep__incl.png b/docs/ade__csv_8hpp__dep__incl.png deleted file mode 100644 index 8325124bb..000000000 Binary files a/docs/ade__csv_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ade__csv_8hpp__incl.map b/docs/ade__csv_8hpp__incl.map deleted file mode 100644 index 25b36bd88..000000000 --- a/docs/ade__csv_8hpp__incl.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/ade__csv_8hpp__incl.md5 b/docs/ade__csv_8hpp__incl.md5 deleted file mode 100644 index be253d461..000000000 --- a/docs/ade__csv_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f0af18fa87bc038a023ae52880e97d07 \ No newline at end of file diff --git a/docs/ade__csv_8hpp__incl.png b/docs/ade__csv_8hpp__incl.png deleted file mode 100644 index c69aad253..000000000 Binary files a/docs/ade__csv_8hpp__incl.png and /dev/null differ diff --git a/docs/ade__csv_8hpp_source.html b/docs/ade__csv_8hpp_source.html deleted file mode 100644 index 6f0159a2c..000000000 --- a/docs/ade__csv_8hpp_source.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/ade_csv.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade_csv.hpp
-
-
-Go to the documentation of this file.
1 #include <unordered_map>
2 #include <unordered_set>
3 #include <utility>
4 
5 #include "ade/ileaf.hpp"
6 #include "ade/ifunctor.hpp"
7 
8 #include "estd/estd.hpp"
9 
10 #include "dbg/stream/ade.hpp"
11 
12 #ifndef DBG_ADE_CSV_HPP
13 #define DBG_ADE_CSV_HPP
14 
15 const char label_delim = ':';
16 
17 static void multiline_replace (std::string& multiline)
18 {
19  size_t i = 0;
20  char nline = '\n';
21  while ((i = multiline.find(nline, i)) != std::string::npos)
22  {
23  multiline.replace(i, 1, "\\");
24  }
25 }
26 
28 {
29  VARIABLE = 0,
32 };
33 
34 using GetTypeF = std::function<NODE_TYPE(ade::iFunctor*)>;
35 
36 struct CSVEquation final : public ade::iTraveler
37 {
38  CSVEquation (GetTypeF get_ftype =
39  [](ade::iFunctor* func) { return FUNCTOR; }) :
40  get_ftype_(get_ftype) {}
41 
42  void visit (ade::iLeaf* leaf) override
43  {
44  if (estd::has(nodes_, leaf))
45  {
46  return;
47  }
48  std::string label;
49  auto it = labels_.find(leaf);
50  if (labels_.end() != it)
51  {
52  label = it->second + "=";
53  }
54  label += leaf->to_string();
55  if (showshape_)
56  {
57  label += leaf->shape().to_string();
58  }
59  nodes_.emplace(leaf, Node{
60  label,
61  VARIABLE,
62  nodes_.size(),
63  });
64  }
65 
66  void visit (ade::iFunctor* func) override
67  {
68  if (estd::has(nodes_, func))
69  {
70  return;
71  }
72  std::string funcstr;
73  auto it = labels_.find(func);
74  if (labels_.end() != it)
75  {
76  funcstr = it->second + "=";
77  }
78  funcstr += func->to_string();
79  if (showshape_)
80  {
81  funcstr += func->shape().to_string();
82  }
83  nodes_.emplace(func, Node{
84  funcstr,
85  get_ftype_(func),
86  nodes_.size(),
87  });
88  auto& children = func->get_children();
89  for (size_t i = 0, n = children.size(); i < n; ++i)
90  {
91  const ade::FuncArg& child = children[i];
92  auto coorder = child.get_coorder().get();
93  auto tens = child.get_tensor().get();
94  if (ade::is_identity(coorder))
95  {
96  coorder = nullptr;
97  }
98  else
99  {
100  std::string coordstr = coorder->to_string();
101  multiline_replace(coordstr);
102  coorders_.emplace(coorder, coordstr);
103  }
104  edges_.push_back(Edge{
105  func,
106  tens,
107  coorder,
108  fmts::to_string(i),
109  });
110  tens->accept(*this);
111  }
112  }
113 
114  void to_stream (std::ostream& out)
115  {
116  size_t nnodes = nodes_.size();
117  for (size_t i = 0, nedges = edges_.size(); i < nedges; ++i)
118  {
119  const Edge& edge = edges_[i];
120  auto& parent_node = nodes_[edge.func_];
121  auto& child_node = nodes_[edge.child_];
122  std::string color = child_node.ntype_ == CACHED_FUNC ?
123  "red" : "white";
124  if (nullptr == edge.coorder_)
125  {
126  out << parent_node.id_ << label_delim
127  << parent_node.label_ << ','
128  << child_node.id_ << label_delim
129  << child_node.label_ << ','
130  << edge.edge_label_ << ','
131  << color << '\n';
132  }
133  else
134  {
135  out << parent_node.id_ << label_delim
136  << parent_node.label_ << ','
137  << nnodes + i << label_delim
138  << coorders_[edge.coorder_] << ','
139  << edge.edge_label_ << ','
140  << color << '\n';
141 
142  out << nnodes + i << label_delim
143  << coorders_[edge.coorder_] << ','
144  << child_node.id_ << label_delim
145  << child_node.label_ << ','
146  << edge.edge_label_ << ','
147  << color << '\n';
148  }
149  }
150  }
151 
152  bool showshape_ = false;
153 
154  struct Edge
155  {
157 
159 
161 
162  std::string edge_label_;
163  };
164 
165  struct Node
166  {
167  std::string label_;
168 
170 
171  size_t id_;
172  };
173 
176 
177  std::vector<Edge> edges_;
178 
179  std::unordered_map<ade::iTensor*,Node> nodes_;
180 
181  std::unordered_map<ade::iCoordMap*,std::string> coorders_;
182 
184 };
185 
186 #endif // DBG_ADE_CSV_HPP
std::vector< Edge > edges_
Definition: ade_csv.hpp:177
-
void visit(ade::iFunctor *func) override
Visit functor node.
Definition: ade_csv.hpp:66
-
NODE_TYPE
Definition: ade_csv.hpp:27
-
size_t id_
Definition: ade_csv.hpp:171
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
ade::iFunctor * func_
Definition: ade_csv.hpp:156
-
CSVEquation(GetTypeF get_ftype=[](ade::iFunctor *func) { return FUNCTOR;})
Definition: ade_csv.hpp:38
-
std::unordered_map< ade::iTensor *, Node > nodes_
Definition: ade_csv.hpp:179
-
bool showshape_
Definition: ade_csv.hpp:152
-
LabelsMapT labels_
For every label associated with a tensor, show LABEL=value in the tree.
Definition: ade_csv.hpp:175
-
NODE_TYPE ntype_
Definition: ade_csv.hpp:169
-
virtual const Shape & shape(void) const =0
Return the shape held by this tensor.
-
std::string to_string(void) const
Return string representation of shape.
Definition: shape.hpp:146
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
ade::iCoordMap * coorder_
Definition: ade_csv.hpp:160
-
std::unordered_map< ade::iTensor *, std::string > LabelsMapT
Definition: ade.hpp:18
-
static void multiline_replace(std::string &multiline)
Definition: ade_csv.hpp:17
-
Definition: ade_csv.hpp:30
-
virtual std::string to_string(void) const =0
Return the string representation of the tensor.
-
CoordptrT get_coorder(void) const
Return coord map for coordinates.
Definition: funcarg.hpp:80
-
Interface for transforming coordinates and reversing the coordinate.
Definition: coord.hpp:20
-
GetTypeF get_ftype_
Definition: ade_csv.hpp:183
-
void to_stream(std::ostream &out)
Definition: ade_csv.hpp:114
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
std::string edge_label_
Definition: ade_csv.hpp:162
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
Definition: ade_csv.hpp:36
-
std::function< NODE_TYPE(ade::iFunctor *)> GetTypeF
Definition: ade_csv.hpp:34
- -
std::string label_
Definition: ade_csv.hpp:167
- -
const char label_delim
Definition: ade_csv.hpp:15
-
Definition: ade_csv.hpp:31
-
Definition: ade_csv.hpp:165
-
TensptrT get_tensor(void) const
Return tensor being mapped.
Definition: funcarg.hpp:61
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
Definition: ade_csv.hpp:154
-
Definition: ade_csv.hpp:29
- -
void visit(ade::iLeaf *leaf) override
Visit leaf node.
Definition: ade_csv.hpp:42
-
ade::iTensor * child_
Definition: ade_csv.hpp:158
-
std::unordered_map< ade::iCoordMap *, std::string > coorders_
Definition: ade_csv.hpp:181
-
bool is_identity(iCoordMap *coorder)
Checks if the coord mapper is an identity mapper.
-
- - - - diff --git a/docs/agen_8py.html b/docs/agen_8py.html deleted file mode 100644 index 57ccc2e9d..000000000 --- a/docs/agen_8py.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: ead/age/agen.py File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
agen.py File Reference
-
-
- - - - -

-Namespaces

 agen
 
- - - - - -

-Functions

def agen.parse (cfg_str)
 
def agen.main (args)
 
- - - -

-Variables

string agen.prog_description = 'Generate c++ glue layer mapping ADE and some data-processing library.'
 
-
- - - - diff --git a/docs/annotated.html b/docs/annotated.html deleted file mode 100644 index 64b74852e..000000000 --- a/docs/annotated.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -Tenncor: Class List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Nade
 Napis
 Ndbg
 Ndtypes
 Nead
 Nopcodes
 Nopt
 Npbm
 Npyapis
 Ntag
 CArg
 CBranch
 CConversion
 CCSVEquation
 CGraphEmitterImpl
 CGroup
 CNumList
 CNumNode
 CPrettyEquationUse PrettyTree to render ade::TensptrT graph as an ascii art
 CPrettyTensorDraw data as a multi-dimension array (similar to python) according to shape
 CPrettyTree
 CProperty
 CPtrList
 CPtrNode
 CStatement
 CSubgraph
-
-
- - - - diff --git a/docs/apis_8py.html b/docs/apis_8py.html deleted file mode 100644 index 09279937a..000000000 --- a/docs/apis_8py.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins/apis.py File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
apis.py File Reference
-
-
- - - - -

-Classes

class  apis.APIsPlugin
 
- - - -

-Namespaces

 apis
 
- - - - - - - - - - - - - - - - - -

-Functions

def apis._parse_args (arg, accept_def=True)
 
def apis._nullcheck (args)
 
def apis._decl_func (api)
 
def apis._template_defn_func (api)
 
def apis._defn_func (api)
 
def apis._handle_api_header (apis)
 
def apis._handle_api_source (apis)
 
def apis._handle_api_templates (apis)
 
- - - - - - - - - - - - - - - - - -

-Variables

string apis._ns_template
 
string apis._header_template
 
string apis._source_template
 
string apis._decl_tmp
 
string apis._template_defn_tmp
 
string apis._defn_tmp
 
string apis._plugin_id = "API"
 
string apis.api_header = 'api.hpp'
 
-
- - - - diff --git a/docs/bc_s.png b/docs/bc_s.png deleted file mode 100644 index 224b29aa9..000000000 Binary files a/docs/bc_s.png and /dev/null differ diff --git a/docs/bdwn.png b/docs/bdwn.png deleted file mode 100644 index 940a0b950..000000000 Binary files a/docs/bdwn.png and /dev/null differ diff --git a/docs/candidate_8hpp.html b/docs/candidate_8hpp.html deleted file mode 100644 index 1b58c3b88..000000000 --- a/docs/candidate_8hpp.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - -Tenncor: opt/candidate.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
candidate.hpp File Reference
-
-
-
#include <string>
-#include <unordered_map>
-#include <boost/functional/hash.hpp>
-#include "ade/itensor.hpp"
-
-Include dependency graph for candidate.hpp:
-
-
- - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  opt::Symbol
 
struct  opt::SymbolHash
 
struct  opt::CandArg
 
- - - -

-Namespaces

 opt
 
- - - - - - - - - - - -

-Typedefs

using opt::CtxValT = std::set< ade::TensptrT >
 
using opt::ContexT = std::map< std::string, CtxValT >
 
using opt::CtxsT = std::unordered_set< ContexT, boost::hash< ContexT > >
 
using opt::CandsT = std::unordered_map< Symbol, CtxsT, SymbolHash >
 
using opt::CandArgsT = std::vector< CandArg >
 
- - - -

-Enumerations

enum  opt::CAND_TYPE { opt::SCALAR = 0, -opt::CONST, -opt::INTERM, -opt::CONVRT - }
 
- - - -

-Functions

bool opt::operator== (const Symbol &lhs, const Symbol &rhs)
 
-
- - - - diff --git a/docs/candidate_8hpp__dep__incl.map b/docs/candidate_8hpp__dep__incl.map deleted file mode 100644 index 97c0b226c..000000000 --- a/docs/candidate_8hpp__dep__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/candidate_8hpp__dep__incl.md5 b/docs/candidate_8hpp__dep__incl.md5 deleted file mode 100644 index 0def8732f..000000000 --- a/docs/candidate_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9e05707f6f4c2946d117d32f63320a5d \ No newline at end of file diff --git a/docs/candidate_8hpp__dep__incl.png b/docs/candidate_8hpp__dep__incl.png deleted file mode 100644 index 023932362..000000000 Binary files a/docs/candidate_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/candidate_8hpp__incl.map b/docs/candidate_8hpp__incl.map deleted file mode 100644 index 53419a8a5..000000000 --- a/docs/candidate_8hpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/candidate_8hpp__incl.md5 b/docs/candidate_8hpp__incl.md5 deleted file mode 100644 index 812515527..000000000 --- a/docs/candidate_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4500a1a00c776ff801d8a4110d347ea1 \ No newline at end of file diff --git a/docs/candidate_8hpp__incl.png b/docs/candidate_8hpp__incl.png deleted file mode 100644 index 457f28d2e..000000000 Binary files a/docs/candidate_8hpp__incl.png and /dev/null differ diff --git a/docs/candidate_8hpp_source.html b/docs/candidate_8hpp_source.html deleted file mode 100644 index 09b4e85c5..000000000 --- a/docs/candidate_8hpp_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Tenncor: opt/candidate.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
candidate.hpp
-
-
-Go to the documentation of this file.
1 #include <string>
2 #include <unordered_map>
3 
4 #include <boost/functional/hash.hpp>
5 
6 #include "ade/itensor.hpp"
7 
8 #ifndef OPT_CAND_HPP
9 #define OPT_CAND_HPP
10 
11 namespace opt
12 {
13 
14 using CtxValT = std::set<ade::TensptrT>;
15 
16 using ContexT = std::map<std::string,CtxValT>;
17 
18 using CtxsT = std::unordered_set<ContexT,boost::hash<ContexT>>;
19 
21 {
22  SCALAR = 0,
26 };
27 
28 struct Symbol final
29 {
31 
32  // SCALAR -> scalar label
33  // INTERM -> intermediate id
34  // CONVRT -> conversion ref
35  std::string reference_;
36 };
37 
38 struct SymbolHash final
39 {
40  size_t operator() (const Symbol& sym) const
41  {
42  size_t seed = 0;
43  boost::hash_combine(seed, sym.type_);
44  boost::hash_combine(seed, sym.reference_);
45  return seed;
46  }
47 };
48 
49 inline bool operator == (const Symbol& lhs, const Symbol& rhs)
50 {
51  return lhs.type_ == rhs.type_ && lhs.reference_ == rhs.reference_;
52 }
53 
54 using CandsT = std::unordered_map<Symbol,CtxsT,SymbolHash>;
55 
56 struct CandArg
57 {
59 
61 
63 
65 };
66 
67 using CandArgsT = std::vector<CandArg>;
68 
69 }
70 
71 #endif // OPT_CAND_HPP
std::set< ade::TensptrT > CtxValT
Definition: candidate.hpp:14
-
CandsT candidates_
Definition: candidate.hpp:60
-
Definition: candidate.hpp:23
-
std::string reference_
Definition: candidate.hpp:35
- -
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Definition: candidate.hpp:11
-
std::unordered_set< ContexT, boost::hash< ContexT > > CtxsT
Definition: candidate.hpp:18
-
size_t operator()(const Symbol &sym) const
Definition: candidate.hpp:40
-
std::vector< CandArg > CandArgsT
Definition: candidate.hpp:67
-
Definition: candidate.hpp:38
-
CAND_TYPE
Definition: candidate.hpp:20
-
std::map< std::string, CtxValT > ContexT
Definition: candidate.hpp:16
-
Definition: candidate.hpp:24
-
ade::CoordptrT coorder_
Definition: candidate.hpp:64
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
std::unordered_map< Symbol, CtxsT, SymbolHash > CandsT
Definition: candidate.hpp:54
-
Definition: candidate.hpp:56
-
CAND_TYPE type_
Definition: candidate.hpp:30
-
ade::CoordptrT shaper_
Definition: candidate.hpp:62
-
Definition: candidate.hpp:28
-
Definition: candidate.hpp:25
-
Definition: candidate.hpp:22
-
bool operator==(const Symbol &lhs, const Symbol &rhs)
Definition: candidate.hpp:49
-
ade::TensptrT tensor_
Definition: candidate.hpp:58
-
- - - - diff --git a/docs/classapis_1_1_a_p_is_plugin-members.html b/docs/classapis_1_1_a_p_is_plugin-members.html deleted file mode 100644 index 4de909765..000000000 --- a/docs/classapis_1_1_a_p_is_plugin-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
apis.APIsPlugin Member List
-
-
- -

This is the complete list of members for apis.APIsPlugin, including all inherited members.

- - - -
plugin_id(self)apis.APIsPlugin
process(self, generated_files, arguments)apis.APIsPlugin
- - - - diff --git a/docs/classapis_1_1_a_p_is_plugin.html b/docs/classapis_1_1_a_p_is_plugin.html deleted file mode 100644 index 1b24715ba..000000000 --- a/docs/classapis_1_1_a_p_is_plugin.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: apis.APIsPlugin Class Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
apis.APIsPlugin Class Reference
-
-
- - - - - - -

-Public Member Functions

def plugin_id (self)
 
def process (self, generated_files, arguments)
 
-

Member Function Documentation

- -

◆ plugin_id()

- -
-
- - - - - - - - -
def apis.APIsPlugin.plugin_id ( self)
-
- -
-
- -

◆ process()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def apis.APIsPlugin.process ( self,
 generated_files,
 arguments 
)
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/classdtypes_1_1_d_types_plugin-members.html b/docs/classdtypes_1_1_d_types_plugin-members.html deleted file mode 100644 index aa609c460..000000000 --- a/docs/classdtypes_1_1_d_types_plugin-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
dtypes.DTypesPlugin Member List
-
-
- -

This is the complete list of members for dtypes.DTypesPlugin, including all inherited members.

- - - -
plugin_id(self)dtypes.DTypesPlugin
process(self, generated_files, arguments)dtypes.DTypesPlugin
- - - - diff --git a/docs/classdtypes_1_1_d_types_plugin.html b/docs/classdtypes_1_1_d_types_plugin.html deleted file mode 100644 index b9ecf6f2b..000000000 --- a/docs/classdtypes_1_1_d_types_plugin.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: dtypes.DTypesPlugin Class Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
dtypes.DTypesPlugin Class Reference
-
-
- - - - - - -

-Public Member Functions

def plugin_id (self)
 
def process (self, generated_files, arguments)
 
-

Member Function Documentation

- -

◆ plugin_id()

- -
-
- - - - - - - - -
def dtypes.DTypesPlugin.plugin_id ( self)
-
- -
-
- -

◆ process()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def dtypes.DTypesPlugin.process ( self,
 generated_files,
 arguments 
)
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/classes.html b/docs/classes.html deleted file mode 100644 index 917206fcc..000000000 --- a/docs/classes.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Tenncor: Class Index - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Index
-
-
-
a | b | c | d | e | f | g | h | i | m | n | o | p | r | s | t | v
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  a  
-
EADSaver (ead)   
  i  
-
NodeConverters (ead)   
  s  
-
GraphEmitterImpl::Edge   NumList   
AnyConvr (ead)   CSVEquation::Edge   iConverter (opt)   NumNode   ScalarConvr (ead)   
APIsPlugin (apis)   EdgeInfo (dbg)   iConverterBuilder (opt)   
  o  
-
SegVArgs (opt)   
Arg   EdgeInfoHash (dbg)   iCoordMap (ade)   Session (ead)   
  b  
-
EigenMatOp (ead)   iData (ade)   OnceTraveler (ade)   Shape (ade)   
EigenTensOp (ead)   iEigen (ead)   OpArg (ead)   SizeT (ead)   
Branch   
  f  
-
iFunctor (ade)   Opcode (ade)   Statement   
BuilderArg (ead)   iGradientBuilder (ade)   OpcodesPlugin (opcodes)   Subgraph   
  c  
-
FuncArg (ead)   iLeaf (ade)   OptCtx (opt)   Subgraph (tag)   
FuncArg (ade)   iLeaf (ead)   OrdrHasher (opt)   Symbol (opt)   
CandArg (opt)   FuncConvr (ead)   iLoader (pbm)   OrdrVoter (opt)   SymbolHash (opt)   
ClientConfig (dbg)   Functor (ade)   iNode (ead)   
  p  
-
  t  
-
CommHasher (opt)   Functor (ead)   InteractiveSession (dbg)   
CommVoter (opt)   FunctorNode (ead)   iOperableFunc (ade)   ParentFinder (ade)   TagCollective (tag)   
Constant (ead)   
  g  
-
iSaver (pbm)   PathedTens (pbm)   TagRegistry (tag)   
ConstantNode (ead)   iSession (ead)   PathFinder (ade)   TensKey (tag)   
Conversion   GradientBuilder (ead)   iTag (tag)   PrettyEquation   TensKeyHash (tag)   
ConverterBuilder (ead)   GraphEmitterClient (dbg)   iTensor (ade)   PrettyTensor   
  v  
-
CoordMap (ade)   GraphEmitterImpl   iTraveler (ade)   PrettyTree   
CoordMap (ead)   GraphInfo (pbm)   iVoter (opt)   Property   Variable (ead)   
CSVEquation   GraphSaver (pbm)   
  m  
-
PropertyRegistry (tag)   VariableNode (ead)   
  d  
-
GraphStat (ade)   PropTag (tag)   VariadicVoter (opt)   
Group   Matcher (opt)   PtrList   VoterArg (opt)   
DTypesPlugin (dtypes)   GroupConvr (ead)   
  n  
-
PtrNode   VoterPool (opt)   
  e  
-
GroupRegistry (tag)   PyAPIsPlugin (pyapis)   
GroupTag (tag)   GraphEmitterImpl::Node   
  r  
-
EADLoader (ead)   
  h  
-
CSVEquation::Node   
RulesContext (opt)   
HeightMatrix (ade)   
-
a | b | c | d | e | f | g | h | i | m | n | o | p | r | s | t | v
-
- - - - diff --git a/docs/classopcodes_1_1_opcodes_plugin-members.html b/docs/classopcodes_1_1_opcodes_plugin-members.html deleted file mode 100644 index 58b6a7d3d..000000000 --- a/docs/classopcodes_1_1_opcodes_plugin-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
opcodes.OpcodesPlugin Member List
-
-
- -

This is the complete list of members for opcodes.OpcodesPlugin, including all inherited members.

- - - -
plugin_id(self)opcodes.OpcodesPlugin
process(self, generated_files, arguments)opcodes.OpcodesPlugin
- - - - diff --git a/docs/classopcodes_1_1_opcodes_plugin.html b/docs/classopcodes_1_1_opcodes_plugin.html deleted file mode 100644 index 101db7e45..000000000 --- a/docs/classopcodes_1_1_opcodes_plugin.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: opcodes.OpcodesPlugin Class Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
opcodes.OpcodesPlugin Class Reference
-
-
- - - - - - -

-Public Member Functions

def plugin_id (self)
 
def process (self, generated_files, arguments)
 
-

Member Function Documentation

- -

◆ plugin_id()

- -
-
- - - - - - - - -
def opcodes.OpcodesPlugin.plugin_id ( self)
-
- -
-
- -

◆ process()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def opcodes.OpcodesPlugin.process ( self,
 generated_files,
 arguments 
)
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/classpyapis_1_1_py_a_p_is_plugin-members.html b/docs/classpyapis_1_1_py_a_p_is_plugin-members.html deleted file mode 100644 index 95547d2f6..000000000 --- a/docs/classpyapis_1_1_py_a_p_is_plugin-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
pyapis.PyAPIsPlugin Member List
-
-
- -

This is the complete list of members for pyapis.PyAPIsPlugin, including all inherited members.

- - - -
plugin_id(self)pyapis.PyAPIsPlugin
process(self, generated_files, arguments)pyapis.PyAPIsPlugin
- - - - diff --git a/docs/classpyapis_1_1_py_a_p_is_plugin.html b/docs/classpyapis_1_1_py_a_p_is_plugin.html deleted file mode 100644 index 2d0e08f53..000000000 --- a/docs/classpyapis_1_1_py_a_p_is_plugin.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: pyapis.PyAPIsPlugin Class Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
pyapis.PyAPIsPlugin Class Reference
-
-
- - - - - - -

-Public Member Functions

def plugin_id (self)
 
def process (self, generated_files, arguments)
 
-

Member Function Documentation

- -

◆ plugin_id()

- -
-
- - - - - - - - -
def pyapis.PyAPIsPlugin.plugin_id ( self)
-
- -
-
- -

◆ process()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
def pyapis.PyAPIsPlugin.process ( self,
 generated_files,
 arguments 
)
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/client_8hpp.html b/docs/client_8hpp.html deleted file mode 100644 index 4f2b69995..000000000 --- a/docs/client_8hpp.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc/client.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
client.hpp File Reference
-
-
-
#include <chrono>
-#include <grpc/grpc.h>
-#include <grpcpp/channel.h>
-#include <grpcpp/client_context.h>
-#include "jobs/managed_job.hpp"
-#include "jobs/sequence.hpp"
-#include "dbg/grpc/tenncor.grpc.pb.h"
-
-Include dependency graph for client.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - - - -

-Classes

struct  dbg::ClientConfig
 
struct  dbg::GraphEmitterClient
 
- - - -

-Namespaces

 dbg
 
- - - - - -

-Variables

static const size_t dbg::max_attempts = 10
 
static const size_t dbg::data_sync_interval = 50
 
-
- - - - diff --git a/docs/client_8hpp__dep__incl.map b/docs/client_8hpp__dep__incl.map deleted file mode 100644 index b7c15a73c..000000000 --- a/docs/client_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/client_8hpp__dep__incl.md5 b/docs/client_8hpp__dep__incl.md5 deleted file mode 100644 index 408ba9bbb..000000000 --- a/docs/client_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -979a84b3f451077aaa28e5892bdd38f7 \ No newline at end of file diff --git a/docs/client_8hpp__dep__incl.png b/docs/client_8hpp__dep__incl.png deleted file mode 100644 index 35e72fc25..000000000 Binary files a/docs/client_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/client_8hpp__incl.map b/docs/client_8hpp__incl.map deleted file mode 100644 index caad80392..000000000 --- a/docs/client_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/client_8hpp__incl.md5 b/docs/client_8hpp__incl.md5 deleted file mode 100644 index f742c7d6a..000000000 --- a/docs/client_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -dcec421d198bbc27b3a3950cbb6fba5b \ No newline at end of file diff --git a/docs/client_8hpp__incl.png b/docs/client_8hpp__incl.png deleted file mode 100644 index 29bb567fa..000000000 Binary files a/docs/client_8hpp__incl.png and /dev/null differ diff --git a/docs/client_8hpp_source.html b/docs/client_8hpp_source.html deleted file mode 100644 index b26392637..000000000 --- a/docs/client_8hpp_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc/client.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
client.hpp
-
-
-Go to the documentation of this file.
1 #include <chrono>
2 
3 #include <grpc/grpc.h>
4 #include <grpcpp/channel.h>
5 #include <grpcpp/client_context.h>
6 
7 #include "jobs/managed_job.hpp"
8 #include "jobs/sequence.hpp"
9 
10 #include "dbg/grpc/tenncor.grpc.pb.h"
11 
12 #ifndef DBG_GRPC_CLIENT_HPP
13 #define DBG_GRPC_CLIENT_HPP
14 
15 namespace dbg
16 {
17 
18 static const size_t max_attempts = 10;
19 
20 static const size_t data_sync_interval = 50;
21 
23 {
24  ClientConfig (void) = default;
25 
26  ClientConfig (std::chrono::duration<int64_t,std::milli> request_duration,
27  std::chrono::duration<int64_t,std::milli> stream_duration) :
28  request_duration_(request_duration), stream_duration_(stream_duration) {}
29 
30  std::chrono::duration<int64_t,std::milli> request_duration_ =
31  std::chrono::milliseconds(250);
32 
33  std::chrono::duration<int64_t,std::milli> stream_duration_ =
34  std::chrono::milliseconds(10000);
35 };
36 
37 struct GraphEmitterClient final
38 {
39  GraphEmitterClient (std::shared_ptr<grpc::ChannelInterface> channel,
40  ClientConfig cfg) :
41  stub_(tenncor::GraphEmitter::NewStub(channel)),
42  cfg_(cfg),
43  connected_(true)
44  {
45  jobs::ManagedJob healthjob(
46  [this](std::future<void> stop_it)
47  {
48  tenncor::Empty empty;
49  do
50  {
51  grpc::ClientContext context;
52  tenncor::CreateGraphResponse response;
53  // set context deadline
54  std::chrono::time_point<std::chrono::system_clock> deadline =
55  std::chrono::system_clock::now() +
56  std::chrono::milliseconds(1000);
57  context.set_deadline(deadline);
58  grpc::Status status =
59  stub_->HealthCheck(&context, empty, &empty);
60  this->connected_ = status.ok();
61 
62  std::this_thread::sleep_for(
63  std::chrono::milliseconds(1000));
64  }
65  while (stop_it.wait_for(std::chrono::milliseconds(1)) ==
66  std::future_status::timeout);
67  });
68  health_checker_ = std::move(healthjob);
69  }
70 
72  void create_graph (tenncor::CreateGraphRequest& request)
73  {
74  // retries sending creation request unless stop_it times out
75  sequential_jobs_.attach_job(
76  [this](std::future<void> dependency, std::future<void> stop_it,
77  tenncor::CreateGraphRequest request)
78  {
79  if (dependency.valid())
80  {
81  dependency.get(); // wait for dependency completion
82  }
83  std::string sid = fmts::to_string(
84  std::this_thread::get_id());
85  for (size_t attempt = 0;
86  stop_it.wait_for(std::chrono::milliseconds(1)) ==
87  std::future_status::timeout && attempt < max_attempts;
88  ++attempt)
89  {
90  grpc::ClientContext context;
91  tenncor::CreateGraphResponse response;
92  // set context deadline
93  std::chrono::time_point<std::chrono::system_clock> deadline =
94  std::chrono::system_clock::now() + cfg_.request_duration_;
95  context.set_deadline(deadline);
96 
97  grpc::Status status = this->stub_->CreateGraph(
98  &context, request, &response);
99  if (status.ok())
100  {
101  auto res_status = response.status();
102  if (tenncor::Status::OK != res_status)
103  {
104  logs::errorf("%s: %s",
105  tenncor::Status_Name(res_status).c_str(),
106  response.message().c_str());
107  }
108  else
109  {
110  logs::infof("%s: CreateGraphRequest success: %s",
111  sid.c_str(), response.message().c_str());
112  return;
113  }
114  }
115  else
116  {
117  logs::errorf(
118  "%s: CreateGraphRequest attempt %d failure: %s",
119  sid.c_str(), attempt,
120  status.error_message().c_str());
121  }
122  std::this_thread::sleep_for(
123  std::chrono::milliseconds(attempt * 1000));
124  }
125  logs::warnf("%s: CreateGraphRequest terminating", sid.c_str());
126  }, std::move(request));
127  }
128 
130  void update_graph (tenncor::UpdateGraphRequest& request)
131  {
132  // retries sending creation request unless stop_it times out
133  sequential_jobs_.attach_job(
134  [this](std::future<void> dependency, std::future<void> stop_it,
135  tenncor::UpdateGraphRequest request)
136  {
137  if (dependency.valid())
138  {
139  dependency.get(); // wait for dependency completion
140  }
141  std::string sid = fmts::to_string(
142  std::this_thread::get_id());
143  for (size_t attempt = 0;
144  stop_it.wait_for(std::chrono::milliseconds(1)) ==
145  std::future_status::timeout && attempt < max_attempts;
146  ++attempt)
147  {
148  grpc::ClientContext context;
149  tenncor::UpdateGraphResponse response;
150  // set context deadline
151  std::chrono::time_point<std::chrono::system_clock> deadline =
152  std::chrono::system_clock::now() + cfg_.request_duration_;
153  context.set_deadline(deadline);
154 
155  grpc::Status status = this->stub_->UpdateGraph(
156  &context, request, &response);
157  if (status.ok())
158  {
159  auto res_status = response.status();
160  if (tenncor::Status::OK != res_status)
161  {
162  logs::errorf("%s: %s",
163  tenncor::Status_Name(res_status).c_str(),
164  response.message().c_str());
165  }
166  else
167  {
168  logs::infof("%s: UpdateGraphRequest success: %s",
169  sid.c_str(), response.message().c_str());
170  return;
171  }
172  }
173  else
174  {
175  logs::errorf(
176  "%s: UpdateGraphRequest attempt %d failure: %s",
177  sid.c_str(), attempt,
178  status.error_message().c_str());
179  }
180  std::this_thread::sleep_for(
181  std::chrono::milliseconds(attempt * 1000));
182  }
183  logs::warnf("%s: UpdateGraphRequest terminating", sid.c_str());
184  }, std::move(request));
185  }
186 
189  std::vector<tenncor::UpdateNodeDataRequest>& requests,
190  size_t update_it)
191  {
192  sequential_jobs_.attach_job(
193  [this](std::future<void> dependency,
194  std::future<void> stop_it,
195  std::vector<tenncor::UpdateNodeDataRequest> requests, size_t update_it)
196  {
197  if (dependency.valid())
198  {
199  dependency.get(); // wait for dependency completion
200  }
201  std::string sid = fmts::to_string(
202  std::this_thread::get_id());
203  tenncor::UpdateNodeDataResponse response;
204  grpc::ClientContext context;
205  // set context deadline
206  std::chrono::time_point<std::chrono::system_clock> deadline =
207  std::chrono::system_clock::now() +
208  std::chrono::milliseconds(cfg_.stream_duration_);
209  context.set_deadline(deadline);
210  std::unique_ptr<grpc::ClientWriterInterface<
211  tenncor::UpdateNodeDataRequest>> writer(
212  stub_->UpdateNodeData(&context, &response));
213 
214  for (auto& request : requests)
215  {
216  if (stop_it.wait_for(std::chrono::milliseconds(1)) !=
217  std::future_status::timeout)
218  {
219  break;
220  }
221  if (false == writer->Write(request))
222  {
223  logs::errorf("failed to write update %d", update_it);
224  break;
225  }
226  }
227  writer->WritesDone();
228 
229  grpc::Status status = writer->Finish();
230  if (status.ok())
231  {
232  auto res_status = response.status();
233  if (tenncor::Status::OK != res_status)
234  {
235  logs::errorf("%s: %s",
236  tenncor::Status_Name(res_status).c_str(),
237  response.message().c_str());
238  }
239  else
240  {
241  return;
242  }
243  }
244  else
245  {
246  logs::errorf(
247  "UpdateNodeData failure: %s",
248  status.error_message().c_str());
249  }
250  logs::warnf("%s: UpdateNodeData terminating", sid.c_str());
251  }, std::move(requests), std::move(update_it));
252  }
253 
254  bool is_connected (void)
255  {
256  return connected_;
257  }
258 
259  void join (void)
260  {
261  sequential_jobs_.join();
262  }
263 
264  void clear (void)
265  {
266  sequential_jobs_.stop();
267  }
268 
269 private:
270  std::unique_ptr<tenncor::GraphEmitter::Stub> stub_;
271 
273 
274  // every request from emitter has dependency on the previous request
275  jobs::Sequence sequential_jobs_;
276 
277  // connection state
278  std::atomic<bool> connected_;
279  jobs::ManagedJob health_checker_;
280 };
281 
282 }
283 
284 #endif // DBG_GRPC_CLIENT_HPP
GraphEmitterClient(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig cfg)
Definition: client.hpp:39
-
std::atomic< bool > connected_
Definition: client.hpp:278
-
Definition: client.hpp:15
-
void create_graph(tenncor::CreateGraphRequest &request)
Add job that pass CreateGraphRequest.
Definition: client.hpp:72
-
ClientConfig(void)=default
-
std::chrono::duration< int64_t, std::milli > request_duration_
Definition: client.hpp:30
-
Definition: client.hpp:22
-
jobs::ManagedJob health_checker_
Definition: client.hpp:279
-
void update_graph(tenncor::UpdateGraphRequest &request)
Add job that pass UpdateGraphRequest.
Definition: client.hpp:130
-
void update_node_data(std::vector< tenncor::UpdateNodeDataRequest > &requests, size_t update_it)
Add job that streams UpdateNodeDataRequest.
Definition: client.hpp:188
-
ClientConfig cfg_
Definition: client.hpp:272
-
std::unique_ptr< tenncor::GraphEmitter::Stub > stub_
Definition: client.hpp:270
-
static const size_t data_sync_interval
Definition: client.hpp:20
-
void clear(void)
Definition: client.hpp:264
-
static const size_t max_attempts
Definition: client.hpp:18
-
Definition: client.hpp:37
-
bool is_connected(void)
Definition: client.hpp:254
-
std::chrono::duration< int64_t, std::milli > stream_duration_
Definition: client.hpp:33
-
void join(void)
Definition: client.hpp:259
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
ClientConfig(std::chrono::duration< int64_t, std::milli > request_duration, std::chrono::duration< int64_t, std::milli > stream_duration)
Definition: client.hpp:26
-
jobs::Sequence sequential_jobs_
Definition: client.hpp:275
-
- - - - diff --git a/docs/closed.png b/docs/closed.png deleted file mode 100644 index 98cc2c909..000000000 Binary files a/docs/closed.png and /dev/null differ diff --git a/docs/constant_8hpp.html b/docs/constant_8hpp.html deleted file mode 100644 index 7a8ec0a1a..000000000 --- a/docs/constant_8hpp.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - -Tenncor: ead/constant.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
constant.hpp File Reference
-
-
-
#include "tag/prop.hpp"
-#include "ead/ileaf.hpp"
-#include "ead/inode.hpp"
-
-Include dependency graph for constant.hpp:
-
-
- - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - -

-Classes

struct  ead::Constant< T >
 
struct  ead::ConstantNode< T >
 
- - - -

-Namespaces

 ead
 
- - - - - - - -

-Functions

template<typename T >
NodeptrT< T > ead::make_constant_scalar (T scalar, ade::Shape shape)
 
template<typename T >
NodeptrT< T > ead::make_constant (T *data, ade::Shape shape)
 
- - - -

-Variables

static const size_t ead::label_limit = 5
 
-
- - - - diff --git a/docs/constant_8hpp__dep__incl.map b/docs/constant_8hpp__dep__incl.map deleted file mode 100644 index fb9a5ca8b..000000000 --- a/docs/constant_8hpp__dep__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/constant_8hpp__dep__incl.md5 b/docs/constant_8hpp__dep__incl.md5 deleted file mode 100644 index 345f840f9..000000000 --- a/docs/constant_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -99342d0ba5e3d6546c888d30ff089126 \ No newline at end of file diff --git a/docs/constant_8hpp__dep__incl.png b/docs/constant_8hpp__dep__incl.png deleted file mode 100644 index 35095c053..000000000 Binary files a/docs/constant_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/constant_8hpp__incl.map b/docs/constant_8hpp__incl.map deleted file mode 100644 index 137e8b99b..000000000 --- a/docs/constant_8hpp__incl.map +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/docs/constant_8hpp__incl.md5 b/docs/constant_8hpp__incl.md5 deleted file mode 100644 index 56a340ec5..000000000 --- a/docs/constant_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -bef33dd0eee7ee4a6001b0e8e6d01058 \ No newline at end of file diff --git a/docs/constant_8hpp__incl.png b/docs/constant_8hpp__incl.png deleted file mode 100644 index c35fc8a4e..000000000 Binary files a/docs/constant_8hpp__incl.png and /dev/null differ diff --git a/docs/constant_8hpp_source.html b/docs/constant_8hpp_source.html deleted file mode 100644 index c9d8f2aa9..000000000 --- a/docs/constant_8hpp_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Tenncor: ead/constant.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
constant.hpp
-
-
-Go to the documentation of this file.
1 #include "tag/prop.hpp"
2 
3 #include "ead/ileaf.hpp"
4 #include "ead/inode.hpp"
5 
6 #ifndef EAD_CONSTANT_HPP
7 #define EAD_CONSTANT_HPP
8 
9 namespace ead
10 {
11 
12 static const size_t label_limit = 5;
13 
14 template <typename T>
15 struct Constant final : public iLeaf<T>
16 {
17  static Constant<T>* get (T* data, ade::Shape shape);
18 
19  static Constant<T>* get_scalar (T scalar, ade::Shape shape)
20  {
21  size_t n = shape.n_elems();
22  T buffer[n];
23  std::fill(buffer, buffer + n, scalar);
24  return Constant<T>::get(buffer, shape);
25  }
26 
27  Constant (const Constant<T>& other) = delete;
28 
29  Constant (Constant<T>&& other) = delete;
30 
31  Constant<T>& operator = (const Constant<T>& other) = delete;
32 
33  Constant<T>& operator = (Constant<T>&& other) = delete;
34 
36  std::string to_string (void) const override
37  {
38  const T* data = this->data_.data();
39  if (is_scalar())
40  {
41  if (0 == data[0]) // prevent -0
42  {
43  return "0";
44  }
45  return fmts::to_string(data[0]);
46  }
47  size_t nelems = this->shape_.n_elems();
48  auto out = fmts::to_string(data,
49  data + std::min(label_limit, nelems));
50  if (nelems > label_limit)
51  {
52  out += "...";
53  }
54  return out;
55  }
56 
57  bool is_const (void) const override
58  {
59  return true;
60  }
61 
62  bool is_scalar (void) const
63  {
64  const T* data = this->data_.data();
65  size_t nelems = this->shape_.n_elems();
66  return std::all_of(data + 1, data + nelems,
67  [&](const T& e) { return e == data[0]; });
68  }
69 
70 private:
72  iLeaf<T>(data, shape) {}
73 };
74 
75 template <typename T>
76 struct ConstantNode final : public iNode<T>
77 {
78  ConstantNode (std::shared_ptr<Constant<T>> cst) : cst_(cst) {}
79 
80  T* data (void) override
81  {
82  return (T*) cst_->data();
83  }
84 
85  void update (void) override {}
86 
87  ade::TensptrT get_tensor (void) override
88  {
89  return cst_;
90  }
91 
92 private:
93  std::shared_ptr<Constant<T>> cst_;
94 };
95 
96 template <typename T>
98 {
99  static bool registered = register_builder<Constant<T>,T>(
100  [](ade::TensptrT tens)
101  {
102  return std::make_shared<ConstantNode<T>>(
103  std::static_pointer_cast<Constant<T>>(tens));
104  });
105  assert(registered);
106 
107  return new Constant(data, shape);
108 }
109 
110 template <typename T>
112 {
113  auto out = std::make_shared<ConstantNode<T>>(
114  std::shared_ptr<Constant<T>>(Constant<T>::get_scalar(scalar, shape))
115  );
117  return out;
118 }
119 
120 template <typename T>
122 {
123  auto out = std::make_shared<ConstantNode<T>>(
124  std::shared_ptr<Constant<T>>(Constant<T>::get(data, shape))
125  );
127  return out;
128 }
129 
130 }
131 
132 #endif // EAD_CONSTANT_HPP
std::string to_string(void) const override
Implementation of iTensor.
Definition: constant.hpp:36
-
NodeptrT< T > make_constant_scalar(T scalar, ade::Shape shape)
Definition: constant.hpp:111
-
const ade::Shape & shape(void) const override
Implementation of iTensor.
Definition: ileaf.hpp:25
-
std::shared_ptr< Constant< T > > cst_
Definition: constant.hpp:93
-
std::shared_ptr< iNode< T > > NodeptrT
Definition: inode.hpp:31
-
Constant(T *data, ade::Shape shape)
Definition: constant.hpp:71
-
ade::TensptrT get_tensor(void) override
Definition: constant.hpp:87
-
ConstantNode(std::shared_ptr< Constant< T >> cst)
Definition: constant.hpp:78
-
Definition: constant.hpp:9
-
NElemT n_elems(void) const
Return the total number of elements represented by the shape.
Definition: shape.hpp:116
-
bool is_const(void) const override
Definition: constant.hpp:57
-
TensorT< T > data_
Data Source.
Definition: ileaf.hpp:69
-
EigenptrT< T > min(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:893
-
Constant< T > & operator=(const Constant< T > &other)=delete
-
Definition: inode.hpp:14
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
NodeptrT< T > make_constant(T *data, ade::Shape shape)
Definition: constant.hpp:121
- -
static Constant< T > * get_scalar(T scalar, ade::Shape shape)
Definition: constant.hpp:19
-
static const size_t label_limit
Definition: constant.hpp:12
-
bool is_scalar(void) const
Definition: constant.hpp:62
-
Definition: shape.hpp:60
-
ade::Shape shape_
Shape utility to avoid excessive conversion between data_.dimensions()
Definition: ileaf.hpp:72
- -
static Constant< T > * get(T *data, ade::Shape shape)
Definition: constant.hpp:97
-
PropertyRegistry & get_property_reg(void)
-
const std::string immutable_tag
Definition: prop.hpp:14
-
Definition: ileaf.hpp:20
-
void update(void) override
Definition: constant.hpp:85
-
Definition: constant.hpp:76
-
T * data(void) override
Definition: constant.hpp:80
- -
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
void * data(void) override
Implementation of iData.
Definition: ileaf.hpp:31
-
Constant(const Constant< T > &other)=delete
-
void property_tag(ade::TensrefT tens, std::string property)
Definition: prop.hpp:52
-
Definition: constant.hpp:15
-
- - - - diff --git a/docs/csv__to__png_8py.html b/docs/csv__to__png_8py.html deleted file mode 100644 index 9324a42c9..000000000 --- a/docs/csv__to__png_8py.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Tenncor: dbg/csv_to_png.py File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
csv_to_png.py File Reference
-
-
- - - - -

-Namespaces

 csv_to_png
 
- - - - - - - - - - - -

-Functions

def csv_to_png._str_clean (str)
 
def csv_to_png._apply_styles (graph, styles)
 
def csv_to_png.read_graph (lines)
 
def csv_to_png.print_graph (callgraph, outname)
 
def csv_to_png.csv_to_png (lines, outpath)
 
- - - - - - - - - - - - - -

-Variables

dictionary csv_to_png._styles
 
 csv_to_png.parser = argparse.ArgumentParser()
 
 csv_to_png.nargs
 
 csv_to_png.default
 
 csv_to_png.help
 
 csv_to_png.args = parser.parse_args()
 
-
- - - - diff --git a/docs/data_8hpp.html b/docs/data_8hpp.html deleted file mode 100644 index 83f96cab1..000000000 --- a/docs/data_8hpp.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Tenncor: pbm/data.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
data.hpp File Reference
-
-
-
#include <list>
-#include "ade/ade.hpp"
-#include "pbm/graph.pb.h"
-
-Include dependency graph for data.hpp:
-
-
- - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - -

-Classes

struct  pbm::iSaver
 
struct  pbm::iLoader
 
- - - -

-Namespaces

 pbm
 
- - - - - - - -

-Typedefs

using pbm::TensT = std::vector< ade::TensptrT >
 Tensptr vector type. More...
 
using pbm::StringsT = std::list< fmts::string >
 String list type used for paths. More...
 
-
- - - - diff --git a/docs/data_8hpp__dep__incl.map b/docs/data_8hpp__dep__incl.map deleted file mode 100644 index f0de1851b..000000000 --- a/docs/data_8hpp__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/data_8hpp__dep__incl.md5 b/docs/data_8hpp__dep__incl.md5 deleted file mode 100644 index 4e500e32e..000000000 --- a/docs/data_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -eb4570e859dd955055d989dcad7a3315 \ No newline at end of file diff --git a/docs/data_8hpp__dep__incl.png b/docs/data_8hpp__dep__incl.png deleted file mode 100644 index 1b237ef8a..000000000 Binary files a/docs/data_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/data_8hpp__incl.map b/docs/data_8hpp__incl.map deleted file mode 100644 index 19e2166d8..000000000 --- a/docs/data_8hpp__incl.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/data_8hpp__incl.md5 b/docs/data_8hpp__incl.md5 deleted file mode 100644 index cd4f48f3b..000000000 --- a/docs/data_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -df553006611f3d6a557233a1855d07ea \ No newline at end of file diff --git a/docs/data_8hpp__incl.png b/docs/data_8hpp__incl.png deleted file mode 100644 index 946d440f3..000000000 Binary files a/docs/data_8hpp__incl.png and /dev/null differ diff --git a/docs/data_8hpp_source.html b/docs/data_8hpp_source.html deleted file mode 100644 index deae61728..000000000 --- a/docs/data_8hpp_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Tenncor: pbm/data.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
data.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <list>
10 
11 #include "ade/ade.hpp"
12 
13 #include "pbm/graph.pb.h"
14 
15 #ifndef PBM_COMMON_HPP
16 #define PBM_COMMON_HPP
17 
18 namespace pbm
19 {
20 
22 using TensT = std::vector<ade::TensptrT>;
23 
25 using StringsT = std::list<fmts::string>;
26 
27 struct iSaver
28 {
29  virtual std::string save_leaf (bool& is_const, ade::iLeaf* leaf) = 0;
30 
31  virtual std::vector<double> save_shaper (const ade::CoordptrT& mapper) = 0;
32 
33  virtual std::vector<double> save_coorder (const ade::CoordptrT& mapper) = 0;
34 };
35 
36 struct iLoader
37 {
38  virtual ade::TensptrT generate_leaf (const char* data, ade::Shape shape,
39  std::string typelabel, std::string label, bool is_const) = 0;
40 
41  virtual ade::TensptrT generate_func (std::string opname, ade::ArgsT args) = 0;
42 
43  virtual ade::CoordptrT generate_shaper (std::vector<double> coord) = 0;
44 
46  std::string opname, std::vector<double> coord) = 0;
47 };
48 
49 }
50 
51 #endif // PBM_COMMON_HPP
args
Definition: csv_to_png.py:105
- -
virtual std::vector< double > save_shaper(const ade::CoordptrT &mapper)=0
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
virtual ade::TensptrT generate_func(std::string opname, ade::ArgsT args)=0
-
std::list< fmts::string > StringsT
String list type used for paths.
Definition: data.hpp:25
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
virtual std::vector< double > save_coorder(const ade::CoordptrT &mapper)=0
-
Definition: shape.hpp:60
-
virtual ade::CoordptrT generate_coorder(std::string opname, std::vector< double > coord)=0
-
Definition: data.hpp:36
-
std::vector< ade::TensptrT > TensT
Tensptr vector type.
Definition: data.hpp:22
-
Definition: data.hpp:27
-
virtual std::string save_leaf(bool &is_const, ade::iLeaf *leaf)=0
-
virtual ade::TensptrT generate_leaf(const char *data, ade::Shape shape, std::string typelabel, std::string label, bool is_const)=0
-
virtual ade::CoordptrT generate_shaper(std::vector< double > coord)=0
-
Definition: data.hpp:18
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/dbg_2grpc_2session_8hpp.html b/docs/dbg_2grpc_2session_8hpp.html deleted file mode 100644 index d51a3b2fb..000000000 --- a/docs/dbg_2grpc_2session_8hpp.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc/session.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
session.hpp File Reference
-
-
-
#include <grpc/grpc.h>
-#include <grpcpp/create_channel.h>
-#include <grpcpp/security/credentials.h>
-#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
-#include "jobs/scope_guard.hpp"
-#include "ead/session.hpp"
-#include "tag/tag.hpp"
-#include "dbg/grpc/client.hpp"
-
-Include dependency graph for session.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  dbg::EdgeInfo
 
struct  dbg::EdgeInfoHash
 
struct  dbg::InteractiveSession
 
- - - -

-Namespaces

 dbg
 
- - - -

-Macros

#define DBG_SESSION_HPP
 
- - - -

-Functions

bool dbg::operator== (const EdgeInfo &lhs, const EdgeInfo &rhs)
 
- - - - - - - -

-Variables

static const std::string dbg::tag_str_key = "name"
 
static const std::string dbg::tag_node_type = "node_type"
 
static const std::string dbg::edge_label_fmt = "parent-child-%d"
 
-

Macro Definition Documentation

- -

◆ DBG_SESSION_HPP

- -
-
- - - - -
#define DBG_SESSION_HPP
-
- -
-
-
- - - - diff --git a/docs/dbg_2grpc_2session_8hpp__dep__incl.map b/docs/dbg_2grpc_2session_8hpp__dep__incl.map deleted file mode 100644 index f474840f6..000000000 --- a/docs/dbg_2grpc_2session_8hpp__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/dbg_2grpc_2session_8hpp__dep__incl.md5 b/docs/dbg_2grpc_2session_8hpp__dep__incl.md5 deleted file mode 100644 index 71e4eb68f..000000000 --- a/docs/dbg_2grpc_2session_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -45b82ad13c76409ea1b663104f53b996 \ No newline at end of file diff --git a/docs/dbg_2grpc_2session_8hpp__dep__incl.png b/docs/dbg_2grpc_2session_8hpp__dep__incl.png deleted file mode 100644 index 9f34fd834..000000000 Binary files a/docs/dbg_2grpc_2session_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/dbg_2grpc_2session_8hpp__incl.map b/docs/dbg_2grpc_2session_8hpp__incl.map deleted file mode 100644 index b8fbf5596..000000000 --- a/docs/dbg_2grpc_2session_8hpp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/dbg_2grpc_2session_8hpp__incl.md5 b/docs/dbg_2grpc_2session_8hpp__incl.md5 deleted file mode 100644 index 9cdd89ecf..000000000 --- a/docs/dbg_2grpc_2session_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4fece05db7d9728219a77cb6adf65874 \ No newline at end of file diff --git a/docs/dbg_2grpc_2session_8hpp__incl.png b/docs/dbg_2grpc_2session_8hpp__incl.png deleted file mode 100644 index 8d6801e11..000000000 Binary files a/docs/dbg_2grpc_2session_8hpp__incl.png and /dev/null differ diff --git a/docs/dbg_2grpc_2session_8hpp_source.html b/docs/dbg_2grpc_2session_8hpp_source.html deleted file mode 100644 index 0bc2e95bc..000000000 --- a/docs/dbg_2grpc_2session_8hpp_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc/session.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
session.hpp
-
-
-Go to the documentation of this file.
1 #include <grpc/grpc.h>
2 #include <grpcpp/create_channel.h>
3 #include <grpcpp/security/credentials.h>
4 
5 #include <boost/uuid/uuid.hpp>
6 #include <boost/uuid/uuid_generators.hpp>
7 #include <boost/uuid/uuid_io.hpp>
8 
9 #include "jobs/scope_guard.hpp"
10 
11 #include "ead/session.hpp"
12 
13 #include "tag/tag.hpp"
14 
15 #include "dbg/grpc/client.hpp"
16 
17 #ifndef DBG_SESSION_HPP
18 #define DBG_SESSION_HPP
19 
20 namespace dbg
21 {
22 
23 static const std::string tag_str_key = "name";
24 
25 static const std::string tag_node_type = "node_type";
26 
27 static const std::string edge_label_fmt = "parent-child-%d";
28 
29 struct EdgeInfo
30 {
31  size_t parent_;
32  size_t child_;
33  std::string label_;
34 };
35 
36 struct EdgeInfoHash final
37 {
38  size_t operator() (const EdgeInfo& edge) const
39  {
40  std::stringstream ss;
41  ss << edge.parent_ << ","
42  << edge.child_ << ","
43  << edge.label_;
44  return std::hash<std::string>()(ss.str());
45  }
46 };
47 
48 inline bool operator == (const EdgeInfo& lhs, const EdgeInfo& rhs)
49 {
50  EdgeInfoHash hasher;
51  return hasher(lhs) == hasher(rhs);
52 }
53 
54 struct InteractiveSession final : public ead::iSession
55 {
56  static boost::uuids::random_generator uuid_gen_;
57 
58  InteractiveSession (std::shared_ptr<grpc::ChannelInterface> channel,
59  ClientConfig client_cfg = ClientConfig(),
60  tag::TagRegistry& registry = tag::get_reg()) :
61  client_(channel, client_cfg),
62  registry_(registry)
63  {
64  logs::infof("created session: %s", sess_id_.c_str());
65  }
66 
67  InteractiveSession (std::string host,
68  ClientConfig client_cfg = ClientConfig()) :
69  InteractiveSession(grpc::CreateChannel(host,
70  grpc::InsecureChannelCredentials()), client_cfg) {}
71 
72  void track (ade::TensT roots) override
73  {
74  sess_.track(roots);
75 
76  // setup request
77  tenncor::CreateGraphRequest request;
78  auto payload = request.mutable_payload();
79  payload->set_graph_id(sess_id_);
80  for (auto& statpair : sess_.stat_.graphsize_)
81  {
82  auto tens = statpair.first;
83  auto& range = statpair.second;
84  size_t id = node_ids_.size() + 1;
85  if (false == estd::has(node_ids_, tens))
86  {
87  node_ids_.emplace(tens, id);
88  // add to request
89  auto node = payload->add_nodes();
90  node->set_id(id);
91  auto tags = node->mutable_tags();
92  {
93  tenncor::Strings tag_str;
94  tag_str.add_strings(tens->to_string());
95  tags->insert({tag_str_key, tag_str});
96  }
97  {
98  tenncor::Strings type_str;
99  if (0 == range.upper_)
100  {
101  type_str.add_strings("leaf");
102  }
103  else
104  {
105  type_str.add_strings("functor");
106  }
107  tags->insert({tag_node_type, type_str});
108  }
109  {
110  auto inner_tags = registry_.get_tags(tens);
111  std::map<std::string,tenncor::Strings> outer_tags;
112  for (auto& itags : inner_tags)
113  {
114  google::protobuf::RepeatedPtrField<std::string>
115  field(itags.second.begin(), itags.second.end());
116  tenncor::Strings otags;
117  otags.mutable_strings()->Swap(&field);
118  outer_tags.emplace(itags.first, otags);
119  }
120  tags->insert(outer_tags.begin(), outer_tags.end());
121  }
122  auto s = tens->shape();
123  google::protobuf::RepeatedField<uint32_t> shape(
124  s.begin(), s.end());
125  node->mutable_shape()->Swap(&shape);
126  auto location = node->mutable_location();
127  location->set_maxheight(range.upper_);
128  location->set_minheight(range.lower_);
129  }
130  }
131  for (auto& statpair : sess_.stat_.graphsize_)
132  {
133  auto tens = statpair.first;
134  auto& range = statpair.second;
135  if (range.upper_ > 0)
136  {
137  auto f = static_cast<ade::iFunctor*>(tens);
138  auto& children = f->get_children();
139  for (size_t i = 0, n = children.size(); i < n; ++i)
140  {
141  auto& child = children[i];
142  auto child_tens = child.get_tensor().get();
143  auto shaper = child.get_shaper();
144  auto coorder = child.get_coorder();
145  std::string label = fmts::sprintf(edge_label_fmt, i);
146  EdgeInfo edgeinfo{
147  node_ids_[f],
148  node_ids_[child_tens],
149  label,
150  };
151  if (false == estd::has(edges_, edgeinfo))
152  {
153  edges_.emplace(edgeinfo);
154  // add to request
155  auto edge = payload->add_edges();
156  edge->set_parent(node_ids_[f]);
157  edge->set_child(node_ids_[child_tens]);
158  edge->set_label(label);
159  if (false == ade::is_identity(shaper.get()))
160  {
161  edge->set_shaper(shaper->to_string());
162  }
163  if (false == ade::is_identity(coorder.get()))
164  {
165  edge->set_coorder(coorder->to_string());
166  }
167  }
168  }
169  }
170  }
171 
172  client_.create_graph(request);
173  }
174 
175  void update (ead::TensSetT updated = {},
176  ead::TensSetT ignores = {}) override
177  {
178  jobs::ScopeGuard defer([this]() { ++this->update_it_; });
179 
180  // ignore any node data updates when
181  // not connected or out of sync interval
182  if (false == client_.is_connected() || 0 < update_it_ % data_sync_interval)
183  {
184  sess_.update(updated, ignores);
185  return;
186  }
187 
188  // basic copy over from session::update
189  std::unordered_map<ade::iOperableFunc*,ead::SizeT> fulfilments;
190  for (ade::iTensor* unodes : updated)
191  {
192  auto& node_parents = sess_.parents_[unodes];
193  for (auto& node_parent : node_parents)
194  {
195  ++fulfilments[node_parent].d;
196  }
197  }
198 
199  std::vector<tenncor::UpdateNodeDataRequest> requests;
200  requests.reserve(sess_.requirements_.size());
201 
202  for (auto& statpair : sess_.stat_.graphsize_)
203  {
204  if (0 == statpair.second.upper_)
205  {
206  auto leaf = static_cast<ade::iLeaf*>(statpair.first);
207  age::_GENERATED_DTYPE dtype =
208  (age::_GENERATED_DTYPE) leaf->type_code();
209  std::vector<float> data;
210  size_t nelems = leaf->shape().n_elems();
211  age::type_convert(data, leaf->data(), dtype, nelems);
212 
213  tenncor::UpdateNodeDataRequest request;
214  auto payload = request.mutable_payload();
215  payload->set_graph_id(sess_id_);
216  payload->set_node_id(node_ids_[leaf]);
217  google::protobuf::RepeatedField<float> field(
218  data.begin(), data.end());
219  payload->mutable_data()->Swap(&field);
220  requests.push_back(request);
221  }
222  }
223 
224  // ignored nodes and its dependers will never fulfill requirement
225  for (auto& op : sess_.requirements_)
226  {
227  // fulfilled and not ignored
228  if (fulfilments[op.first].d >= op.second &&
229  false == estd::has(ignores, op.first))
230  {
231  op.first->update();
232  age::_GENERATED_DTYPE dtype =
233  (age::_GENERATED_DTYPE) op.first->type_code();
234  std::vector<float> data;
235  size_t nelems = op.first->shape().n_elems();
236  age::type_convert(data, op.first->data(), dtype, nelems);
237  auto& op_parents = sess_.parents_[op.first];
238  for (auto& op_parent : op_parents)
239  {
240  ++fulfilments[op_parent].d;
241  }
242 
243  // create requests (bulk of the overhead)
244  tenncor::UpdateNodeDataRequest request;
245  auto payload = request.mutable_payload();
246  payload->set_graph_id(sess_id_);
247  payload->set_node_id(node_ids_[op.first]);
248  google::protobuf::RepeatedField<float> field(
249  data.begin(), data.end());
250  payload->mutable_data()->Swap(&field);
251  requests.push_back(request);
252  }
253  }
254 
256  }
257 
258  void update_target (ead::TensSetT targeted,
259  ead::TensSetT updated = {}) override
260  {
261  jobs::ScopeGuard defer([this]() { ++this->update_it_; });
262 
263  // ignore any node data updates when
264  // not connected or out of sync interval
265  if (false == client_.is_connected() || 0 < update_it_ % data_sync_interval)
266  {
267  sess_.update_target(targeted, updated);
268  return;
269  }
270 
271  // basic copy over from session::update
272  ade::OnceTraveler traveler;
273  for (auto& tens : targeted)
274  {
275  tens->accept(traveler);
276  }
277 
278  std::unordered_map<ade::iOperableFunc*,ead::SizeT> fulfilments;
279  for (ade::iTensor* unodes : updated)
280  {
281  auto& node_parents = sess_.parents_[unodes];
282  for (auto& node_parent : node_parents)
283  {
284  ++fulfilments[node_parent].d;
285  }
286  }
287 
288  std::vector<tenncor::UpdateNodeDataRequest> requests;
289  requests.reserve(sess_.requirements_.size());
290 
291  for (auto& statpair : sess_.stat_.graphsize_)
292  {
293  if (0 == statpair.second.upper_)
294  {
295  auto leaf = static_cast<ade::iLeaf*>(statpair.first);
296  age::_GENERATED_DTYPE dtype =
297  (age::_GENERATED_DTYPE) leaf->type_code();
298  std::vector<float> data;
299  size_t nelems = leaf->shape().n_elems();
300  age::type_convert(data, leaf->data(), dtype, nelems);
301 
302  tenncor::UpdateNodeDataRequest request;
303  auto payload = request.mutable_payload();
304  payload->set_graph_id(sess_id_);
305  payload->set_node_id(node_ids_[leaf]);
306  google::protobuf::RepeatedField<float> field(
307  data.begin(), data.end());
308  payload->mutable_data()->Swap(&field);
309  requests.push_back(request);
310  }
311  }
312 
313  // ignored nodes and its dependers will never fulfill requirement
314  for (auto& op : sess_.requirements_)
315  {
316  // fulfilled and not ignored
317  if (estd::has(traveler.visited_, op.first) &&
318  fulfilments[op.first].d >= op.second)
319  {
320  op.first->update();
321  age::_GENERATED_DTYPE dtype =
322  (age::_GENERATED_DTYPE) op.first->type_code();
323  std::vector<float> data;
324  size_t nelems = op.first->shape().n_elems();
325  age::type_convert(data, op.first->data(), dtype, nelems);
326  auto& op_parents = sess_.parents_[op.first];
327  for (auto& op_parent : op_parents)
328  {
329  ++fulfilments[op_parent].d;
330  }
331 
332  // create requests (bulk of the overhead)
333  tenncor::UpdateNodeDataRequest request;
334  auto payload = request.mutable_payload();
335  payload->set_graph_id(sess_id_);
336  payload->set_node_id(node_ids_[op.first]);
337  google::protobuf::RepeatedField<float> field(
338  data.begin(), data.end());
339  payload->mutable_data()->Swap(&field);
340  requests.push_back(request);
341  }
342  }
343 
345  }
346 
347  void optimize (const opt::OptCtx& rules)
348  {
349  sess_.optimize(rules);
350 
351  // update graph
352  node_ids_.clear();
353  edges_.clear();
354 
355  // setup request
356  tenncor::UpdateGraphRequest request;
357  auto payload = request.mutable_payload();
358  payload->set_graph_id(sess_id_);
359  for (auto& statpair : sess_.stat_.graphsize_)
360  {
361  auto tens = statpair.first;
362  auto& range = statpair.second;
363  size_t id = node_ids_.size() + 1;
364  if (false == estd::has(node_ids_, tens))
365  {
366  node_ids_.emplace(tens, id);
367  // add to request
368  auto node = payload->add_nodes();
369  node->set_id(id);
370  auto tags = node->mutable_tags();
371  {
372  tenncor::Strings tag_str;
373  tag_str.add_strings(tens->to_string());
374  tags->insert({tag_str_key, tag_str});
375  }
376  {
377  tenncor::Strings type_str;
378  if (0 == range.upper_)
379  {
380  type_str.add_strings("leaf");
381  }
382  else
383  {
384  type_str.add_strings("functor");
385  }
386  tags->insert({tag_node_type, type_str});
387  }
388  {
389  auto inner_tags = registry_.get_tags(tens);
390  std::map<std::string,tenncor::Strings> outer_tags;
391  for (auto& itags : inner_tags)
392  {
393  google::protobuf::RepeatedPtrField<std::string>
394  field(itags.second.begin(), itags.second.end());
395  tenncor::Strings otags;
396  otags.mutable_strings()->Swap(&field);
397  outer_tags.emplace(itags.first, otags);
398  }
399  tags->insert(outer_tags.begin(), outer_tags.end());
400  }
401  auto s = tens->shape();
402  google::protobuf::RepeatedField<uint32_t> shape(
403  s.begin(), s.end());
404  node->mutable_shape()->Swap(&shape);
405  auto location = node->mutable_location();
406  location->set_maxheight(range.upper_);
407  location->set_minheight(range.lower_);
408  }
409  }
410  for (auto& statpair : sess_.stat_.graphsize_)
411  {
412  auto tens = statpair.first;
413  auto& range = statpair.second;
414  if (range.upper_ > 0)
415  {
416  auto f = static_cast<ade::iFunctor*>(tens);
417  auto& children = f->get_children();
418  for (size_t i = 0, n = children.size(); i < n; ++i)
419  {
420  auto& child = children[i];
421  auto child_tens = child.get_tensor().get();
422  auto shaper = child.get_shaper();
423  auto coorder = child.get_coorder();
424  std::string label = fmts::sprintf(edge_label_fmt, i);
425  EdgeInfo edgeinfo{
426  node_ids_[f],
427  node_ids_[child_tens],
428  label,
429  };
430  if (false == estd::has(edges_, edgeinfo))
431  {
432  edges_.emplace(edgeinfo);
433  // add to request
434  auto edge = payload->add_edges();
435  edge->set_parent(node_ids_[f]);
436  edge->set_child(node_ids_[child_tens]);
437  edge->set_label(label);
438  if (false == ade::is_identity(shaper.get()))
439  {
440  edge->set_shaper(shaper->to_string());
441  }
442  if (false == ade::is_identity(coorder.get()))
443  {
444  edge->set_coorder(coorder->to_string());
445  }
446  }
447  }
448  }
449  }
450 
451  client_.update_graph(request);
452  }
453 
454  // join indefinitely
455  void join (void)
456  {
457  client_.join();
458  }
459 
460  // join until specified deadline, then terminate all jobs in the client
462  const std::chrono::time_point<std::chrono::system_clock>& deadline)
463  {
464  std::condition_variable client_done;
465  std::thread timed_killer(
466  [&]()
467  {
468  std::mutex mtx;
469  std::unique_lock<std::mutex> lck(mtx);
470  client_done.wait_until(lck, deadline);
471  this->client_.clear();
472  });
473  client_.join();
474  client_done.notify_one();
475  timed_killer.join();
476  }
477 
478  void stop (void)
479  {
480  client_.clear();
481  }
482 
483  std::string get_session_id (void) const
484  {
485  return sess_id_;
486  }
487 
488  std::unique_ptr<tenncor::GraphEmitter::Stub> stub_;
489 
491 
493 
494 private:
497 
498  std::unordered_map<ade::iTensor*,size_t> node_ids_;
499 
500  std::unordered_set<EdgeInfo,EdgeInfoHash> edges_;
501 
502  size_t update_it_ = 0;
503 
505 };
506 
507 boost::uuids::random_generator InteractiveSession::uuid_gen_;
508 
509 }
510 
511 #endif // DBG_SESSION_HPP
std::unordered_map< ade::iTensor *, std::unordered_set< ade::iOperableFunc * > > parents_
Definition: session.hpp:176
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
Definition: session.hpp:42
-
InteractiveSession(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig client_cfg=ClientConfig(), tag::TagRegistry &registry=tag::get_reg())
Definition: session.hpp:58
-
std::unique_ptr< tenncor::GraphEmitter::Stub > stub_
Definition: session.hpp:488
-
std::unordered_set< EdgeInfo, EdgeInfoHash > edges_
Definition: session.hpp:500
-
void optimize(const opt::OptCtx &rules)
Definition: session.hpp:162
-
void update(TensSetT updated={}, TensSetT ignores={}) override
Definition: session.hpp:101
-
Extremely generic traveler that visits every node in the graph once.
Definition: traveler.hpp:22
-
static boost::uuids::random_generator uuid_gen_
Definition: session.hpp:56
-
Definition: session.hpp:54
-
std::string label_
Definition: session.hpp:33
-
TagRepsT get_tags(const ade::iTensor *tens)
Definition: tag.hpp:152
-
Definition: tag.hpp:135
-
static const std::string edge_label_fmt
Definition: session.hpp:27
-
std::unordered_set< iTensor * > visited_
Definition: traveler.hpp:57
-
Definition: client.hpp:15
-
void create_graph(tenncor::CreateGraphRequest &request)
Add job that pass CreateGraphRequest.
Definition: client.hpp:72
-
std::unordered_set< ade::iTensor * > TensSetT
Definition: session.hpp:17
-
size_t parent_
Definition: session.hpp:31
-
Definition: session.hpp:19
-
void join(void)
Definition: session.hpp:455
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
Definition: client.hpp:22
- -
std::string sess_id_
Definition: session.hpp:495
-
InteractiveSession(std::string host, ClientConfig client_cfg=ClientConfig())
Definition: session.hpp:67
-
Definition: optimize.hpp:12
-
std::unordered_map< ade::iTensor *, size_t > node_ids_
Definition: session.hpp:498
-
GraphEmitterClient client_
Definition: session.hpp:504
-
size_t operator()(const EdgeInfo &edge) const
Definition: session.hpp:38
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
void update_graph(tenncor::UpdateGraphRequest &request)
Add job that pass UpdateGraphRequest.
Definition: client.hpp:130
-
void join_then_stop(const std::chrono::time_point< std::chrono::system_clock > &deadline)
Definition: session.hpp:461
-
void track(ade::TensT roots) override
Definition: session.hpp:44
-
void stop(void)
Definition: session.hpp:478
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
std::vector< std::pair< ade::iOperableFunc *, size_t > > requirements_
Definition: session.hpp:178
-
bool operator==(const EdgeInfo &lhs, const EdgeInfo &rhs)
Definition: session.hpp:48
-
void update_node_data(std::vector< tenncor::UpdateNodeDataRequest > &requests, size_t update_it)
Add job that streams UpdateNodeDataRequest.
Definition: client.hpp:188
-
static const size_t data_sync_interval
Definition: client.hpp:20
-
void track(ade::TensT roots) override
Definition: session.hpp:72
-
TagRegistry & get_reg(void)
-
static const std::string tag_node_type
Definition: session.hpp:25
-
void update(ead::TensSetT updated={}, ead::TensSetT ignores={}) override
Definition: session.hpp:175
-
void clear(void)
Definition: client.hpp:264
-
Definition: session.hpp:36
-
size_t update_it_
Definition: session.hpp:502
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
- -
Definition: client.hpp:37
-
bool is_connected(void)
Definition: client.hpp:254
-
std::string get_session_id(void) const
Definition: session.hpp:483
-
std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
Definition: traveler.hpp:109
-
virtual size_t type_code(void) const =0
Return data type encoding.
-
tag::TagRegistry & registry_
Definition: session.hpp:492
-
static const std::string tag_str_key
Definition: session.hpp:23
-
void join(void)
Definition: client.hpp:259
-
ead::Session sess_
Definition: session.hpp:490
-
ade::GraphStat stat_
Definition: session.hpp:173
-
void update_target(TensSetT target, TensSetT updated={}) override
Definition: session.hpp:129
-
void update_target(ead::TensSetT targeted, ead::TensSetT updated={}) override
Definition: session.hpp:258
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
size_t child_
Definition: session.hpp:32
-
Definition: session.hpp:29
-
void optimize(const opt::OptCtx &rules)
Definition: session.hpp:347
- -
bool is_identity(iCoordMap *coorder)
Checks if the coord mapper is an identity mapper.
-
- - - - diff --git a/docs/dbg_2stream_2ade_8hpp.html b/docs/dbg_2stream_2ade_8hpp.html deleted file mode 100644 index 81bcd18b4..000000000 --- a/docs/dbg_2stream_2ade_8hpp.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/ade.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ade.hpp File Reference
-
-
-
#include <unordered_map>
-#include "ade/functor.hpp"
-#include "dbg/stream/tree.hpp"
-
-Include dependency graph for ade.hpp:
-
-
- - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  PrettyEquation
 Use PrettyTree to render ade::TensptrT graph as an ascii art. More...
 
- - - -

-Typedefs

using LabelsMapT = std::unordered_map< ade::iTensor *, std::string >
 
-

Typedef Documentation

- -

◆ LabelsMapT

- -
-
- - - - -
using LabelsMapT = std::unordered_map<ade::iTensor*,std::string>
-
-

ade.hpp dbg

-

Purpose: Draw an equation graph as an ascii tree

- -
-
-
- - - - diff --git a/docs/dbg_2stream_2ade_8hpp__dep__incl.map b/docs/dbg_2stream_2ade_8hpp__dep__incl.map deleted file mode 100644 index 89cc89708..000000000 --- a/docs/dbg_2stream_2ade_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/dbg_2stream_2ade_8hpp__dep__incl.md5 b/docs/dbg_2stream_2ade_8hpp__dep__incl.md5 deleted file mode 100644 index df20511e6..000000000 --- a/docs/dbg_2stream_2ade_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -94cead7286aed8961d0d31df13a52ed5 \ No newline at end of file diff --git a/docs/dbg_2stream_2ade_8hpp__dep__incl.png b/docs/dbg_2stream_2ade_8hpp__dep__incl.png deleted file mode 100644 index 71587ed34..000000000 Binary files a/docs/dbg_2stream_2ade_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/dbg_2stream_2ade_8hpp__incl.map b/docs/dbg_2stream_2ade_8hpp__incl.map deleted file mode 100644 index 448137393..000000000 --- a/docs/dbg_2stream_2ade_8hpp__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/dbg_2stream_2ade_8hpp__incl.md5 b/docs/dbg_2stream_2ade_8hpp__incl.md5 deleted file mode 100644 index 8194280b4..000000000 --- a/docs/dbg_2stream_2ade_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ed87715e06cea79e59ba4943d42592f8 \ No newline at end of file diff --git a/docs/dbg_2stream_2ade_8hpp__incl.png b/docs/dbg_2stream_2ade_8hpp__incl.png deleted file mode 100644 index 456bb3e25..000000000 Binary files a/docs/dbg_2stream_2ade_8hpp__incl.png and /dev/null differ diff --git a/docs/dbg_2stream_2ade_8hpp_source.html b/docs/dbg_2stream_2ade_8hpp_source.html deleted file mode 100644 index 3421d4002..000000000 --- a/docs/dbg_2stream_2ade_8hpp_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/ade.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <unordered_map>
10 
11 #include "ade/functor.hpp"
12 
13 #include "dbg/stream/tree.hpp"
14 
15 #ifndef DBG_ADE_HPP
16 #define DBG_ADE_HPP
17 
18 using LabelsMapT = std::unordered_map<ade::iTensor*,std::string>;
19 
21 struct PrettyEquation final
22 {
24  [](ade::iTensor*& root) -> std::vector<ade::iTensor*>
25  {
26  if (ade::iFunctor* f = dynamic_cast<ade::iFunctor*>(root))
27  {
28  auto& children = f->get_children();
29  std::vector<ade::iTensor*> tens(children.size());
30  std::transform(children.begin(), children.end(), tens.begin(),
31  [](const ade::FuncArg& child)
32  {
33  return child.get_tensor().get();
34  });
35  return tens;
36  }
37  return {};
38  },
39  [this](std::ostream& out, ade::iTensor*& root)
40  {
41  if (root)
42  {
43  auto it = this->labels_.find(root);
44  if (this->labels_.end() != it)
45  {
46  out << it->second << "=";
47  }
48  out << root->to_string();
49  if (showshape_)
50  {
51  out << root->shape().to_string();
52  }
53  }
54  }) {}
55 
57  void print (std::ostream& out, ade::TensptrT& ptr)
58  {
59  drawer_.print(out, ptr.get());
60  }
61 
62  void print (std::ostream& out, ade::iTensor* ptr)
63  {
64  drawer_.print(out, ptr);
65  }
66 
69 
70  bool showshape_ = false;
71 
72 private:
75 };
76 
77 #endif // DBG_ADE_HPP
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
PrettyEquation(void)
Definition: ade.hpp:23
- -
LabelsMapT labels_
For every label associated with a tensor, show LABEL=value in the tree.
Definition: ade.hpp:68
-
std::unordered_map< ade::iTensor *, std::string > LabelsMapT
Definition: ade.hpp:18
-
void print(std::ostream &out, T root)
Definition: tree.hpp:33
-
bool showshape_
Definition: ade.hpp:70
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Definition: coord.hpp:16
-
PrettyTree< ade::iTensor * > drawer_
Actual ascii renderer.
Definition: ade.hpp:74
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
Definition: tree.hpp:22
-
void print(std::ostream &out, ade::iTensor *ptr)
Definition: ade.hpp:62
-
void print(std::ostream &out, ade::TensptrT &ptr)
Stream equation of ptr to out.
Definition: ade.hpp:57
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
Use PrettyTree to render ade::TensptrT graph as an ascii art.
Definition: ade.hpp:21
- -
- - - - diff --git a/docs/dbg__wrapper_8py.html b/docs/dbg__wrapper_8py.html deleted file mode 100644 index 488c13ca8..000000000 --- a/docs/dbg__wrapper_8py.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Tenncor: dbg/dbg_wrapper.py File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
dbg_wrapper.py File Reference
-
-
- - - - -

-Namespaces

 dbg_wrapper
 
- - - - - -

-Functions

def dbg_wrapper.graph_to_csvimg (root, outpath, showshape=False)
 
def dbg_wrapper.multigraph_to_csvimg (roots, outpath, showshape=False)
 
-
- - - - diff --git a/docs/def_8c.html b/docs/def_8c.html deleted file mode 100644 index 24084886e..000000000 --- a/docs/def_8c.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: opt/parse/def.c File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
def.c File Reference
-
-
-
#include <stdio.h>
-#include "opt/parse/def.h"
-
-Include dependency graph for def.c:
-
-
- - - - -
-
- - - - diff --git a/docs/def_8c__incl.map b/docs/def_8c__incl.map deleted file mode 100644 index 81ec958be..000000000 --- a/docs/def_8c__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/def_8c__incl.md5 b/docs/def_8c__incl.md5 deleted file mode 100644 index e08047a7a..000000000 --- a/docs/def_8c__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8e9c8dd5043c96bc056d47ed4c7f32ee \ No newline at end of file diff --git a/docs/def_8c__incl.png b/docs/def_8c__incl.png deleted file mode 100644 index ef767feb8..000000000 Binary files a/docs/def_8c__incl.png and /dev/null differ diff --git a/docs/def_8h.html b/docs/def_8h.html deleted file mode 100644 index 3fee2cf95..000000000 --- a/docs/def_8h.html +++ /dev/null @@ -1,375 +0,0 @@ - - - - - - - -Tenncor: opt/parse/def.h File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
def.h File Reference
-
-
-
#include <stdio.h>
-#include "opt/parse/list.h"
-
-Include dependency graph for def.h:
-
-
- - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - -

-Classes

struct  Branch
 
struct  Subgraph
 
struct  Arg
 
struct  Conversion
 
struct  Group
 
struct  Property
 
struct  Statement
 
- - - - - - - -

-Enumerations

enum  SUBGRAPH_TYPE { SCALAR = 0, -ANY, -BRANCH - }
 
enum  STMT_TYPE { SYMBOL_DEF = 0, -PROPERTY_DEF, -CONVERSION - }
 
enum  PTR_TYPE { STATEMENT = 0, -ARGUMENT - }
 
- - - - - - - - - - - - - - - -

-Functions

void subgraph_recursive_free (void *ptr)
 
void arg_recursive_free (void *ptr)
 
void conversion_recursive_free (void *ptr)
 
void statement_recursive_free (void *ptr)
 
void statements_free (struct PtrList *stmts)
 
int parse_str (struct PtrList **stmts, const char *str)
 
int parse_file (struct PtrList **stmts, FILE *file)
 
-

Enumeration Type Documentation

- -

◆ PTR_TYPE

- -
-
- - - - -
enum PTR_TYPE
-
- - - -
Enumerator
STATEMENT 
ARGUMENT 
- -
-
- -

◆ STMT_TYPE

- -
-
- - - - -
enum STMT_TYPE
-
- - - - -
Enumerator
SYMBOL_DEF 
PROPERTY_DEF 
CONVERSION 
- -
-
- -

◆ SUBGRAPH_TYPE

- -
-
- - - - -
enum SUBGRAPH_TYPE
-
- - - - -
Enumerator
SCALAR 
ANY 
BRANCH 
- -
-
-

Function Documentation

- -

◆ arg_recursive_free()

- -
-
- - - - - - - - -
void arg_recursive_free (void * ptr)
-
- -
-
- -

◆ conversion_recursive_free()

- -
-
- - - - - - - - -
void conversion_recursive_free (void * ptr)
-
- -
-
- -

◆ parse_file()

- -
-
- - - - - - - - - - - - - - - - - - -
int parse_file (struct PtrList ** stmts,
FILE * file 
)
-
- -
-
- -

◆ parse_str()

- -
-
- - - - - - - - - - - - - - - - - - -
int parse_str (struct PtrList ** stmts,
const char * str 
)
-
- -
-
- -

◆ statement_recursive_free()

- -
-
- - - - - - - - -
void statement_recursive_free (void * ptr)
-
- -
-
- -

◆ statements_free()

- -
-
- - - - - - - - -
void statements_free (struct PtrListstmts)
-
- -
-
- -

◆ subgraph_recursive_free()

- -
-
- - - - - - - - -
void subgraph_recursive_free (void * ptr)
-
- -
-
-
- - - - diff --git a/docs/def_8h__dep__incl.map b/docs/def_8h__dep__incl.map deleted file mode 100644 index b576e73e1..000000000 --- a/docs/def_8h__dep__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/def_8h__dep__incl.md5 b/docs/def_8h__dep__incl.md5 deleted file mode 100644 index 89d3fb6d2..000000000 --- a/docs/def_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4c3a52315903087d370f52639d1e3441 \ No newline at end of file diff --git a/docs/def_8h__dep__incl.png b/docs/def_8h__dep__incl.png deleted file mode 100644 index c01e67a13..000000000 Binary files a/docs/def_8h__dep__incl.png and /dev/null differ diff --git a/docs/def_8h__incl.map b/docs/def_8h__incl.map deleted file mode 100644 index fa412263c..000000000 --- a/docs/def_8h__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/def_8h__incl.md5 b/docs/def_8h__incl.md5 deleted file mode 100644 index f57683b7c..000000000 --- a/docs/def_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e3867c50af6219b4d7ac42ffd4df6d58 \ No newline at end of file diff --git a/docs/def_8h__incl.png b/docs/def_8h__incl.png deleted file mode 100644 index 7d43c70ac..000000000 Binary files a/docs/def_8h__incl.png and /dev/null differ diff --git a/docs/def_8h_source.html b/docs/def_8h_source.html deleted file mode 100644 index 01c7dfceb..000000000 --- a/docs/def_8h_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Tenncor: opt/parse/def.h Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
def.h
-
-
-Go to the documentation of this file.
1 #include <stdio.h>
2 
3 #include "opt/parse/list.h"
4 
5 #ifndef PARSE_DEF_H
6 #define PARSE_DEF_H
7 
8 struct Branch
9 {
10  int is_group_;
11  struct PtrList* args_;
12  char label_[32];
13  char variadic_[32];
14 };
15 
17 {
18  SCALAR = 0,
19  ANY,
21 };
22 
23 struct Subgraph
24 {
26  union
27  {
28  double scalar_;
29  char* any_;
30  struct Branch* branch_;
31  } val_;
32 };
33 
34 void subgraph_recursive_free (void* ptr);
35 
36 struct Arg
37 {
39  struct NumList* shaper_;
40  struct NumList* coorder_;
41 };
42 
43 void arg_recursive_free (void* ptr);
44 
45 struct Conversion
46 {
47  struct Subgraph* source_;
48  struct Subgraph* dest_;
49 };
50 
51 void conversion_recursive_free (void* ptr);
52 
53 struct Group
54 {
55  char ref_[32];
56  char tag_[32];
57 };
58 
59 struct Property
60 {
61  char label_[32];
62  char property_[32];
63  int is_group_;
64 };
65 
67 {
71 };
72 
73 struct Statement
74 {
76  void* val_;
77 };
78 
80 {
81  STATEMENT = 0,
83 };
84 
85 void statement_recursive_free (void* ptr);
86 
87 #ifdef __cplusplus
88 extern "C" {
89 #endif
90 
91 // wrapper around Statement recursive free
92 extern void statements_free (struct PtrList* stmts);
93 
94 extern int parse_str (struct PtrList** stmts, const char* str);
95 
96 extern int parse_file (struct PtrList** stmts, FILE* file);
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif // PARSE_DEF_H
STMT_TYPE
Definition: def.h:66
-
Definition: list.h:35
-
Definition: def.h:82
-
char label_[32]
Definition: def.h:61
-
struct Branch * branch_
Definition: def.h:30
-
char tag_[32]
Definition: def.h:56
-
Definition: def.h:68
-
struct Subgraph * dest_
Definition: def.h:48
-
int is_group_
Definition: def.h:63
-
Definition: def.h:70
-
Definition: def.h:36
-
int parse_str(struct PtrList **stmts, const char *str)
-
enum SUBGRAPH_TYPE type_
Definition: def.h:25
-
int is_group_
Definition: def.h:10
-
Definition: def.h:45
-
void * val_
Definition: def.h:76
-
enum STMT_TYPE type_
Definition: def.h:75
-
Definition: list.h:13
-
Definition: def.h:20
-
struct NumList * shaper_
Definition: def.h:39
-
struct PtrList * args_
Definition: def.h:11
-
Definition: def.h:8
-
struct NumList * coorder_
Definition: def.h:40
- -
void conversion_recursive_free(void *ptr)
-
Definition: def.h:19
-
Definition: def.h:23
-
char ref_[32]
Definition: def.h:55
-
char variadic_[32]
Definition: def.h:13
-
void statements_free(struct PtrList *stmts)
-
Definition: def.h:81
-
SUBGRAPH_TYPE
Definition: def.h:16
-
PTR_TYPE
Definition: def.h:79
-
Definition: def.h:53
-
struct Subgraph * source_
Definition: def.h:47
-
union Subgraph::@0 val_
-
char property_[32]
Definition: def.h:62
-
char label_[32]
Definition: def.h:12
-
void subgraph_recursive_free(void *ptr)
-
Definition: def.h:69
-
struct Subgraph * subgraph_
Definition: def.h:38
-
double scalar_
Definition: def.h:28
-
Definition: def.h:59
-
Definition: def.h:73
-
void statement_recursive_free(void *ptr)
-
Definition: def.h:18
-
void arg_recursive_free(void *ptr)
-
int parse_file(struct PtrList **stmts, FILE *file)
-
char * any_
Definition: def.h:29
-
- - - - diff --git a/docs/dir_000002_000000.html b/docs/dir_000002_000000.html deleted file mode 100644 index 18050456e..000000000 --- a/docs/dir_000002_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/stream -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

stream → ade Relation

File in dbg/streamIncludes file in ade
ade.hppfunctor.hpp
ade_csv.hppifunctor.hpp
ade_csv.hppileaf.hpp
- - - - diff --git a/docs/dir_000003_000000.html b/docs/dir_000003_000000.html deleted file mode 100644 index 541bd37c9..000000000 --- a/docs/dir_000003_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/dir_000003_000011.html b/docs/dir_000003_000011.html deleted file mode 100644 index 4b7cb7671..000000000 --- a/docs/dir_000003_000011.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead -> opt Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

ead → opt Relation

File in eadIncludes file in opt
parse.hppparse.hpp
session.hppoptimize.hpp
- - - - diff --git a/docs/dir_000003_000015.html b/docs/dir_000003_000015.html deleted file mode 100644 index e8ddf2a3c..000000000 --- a/docs/dir_000003_000015.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead -> pbm Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

ead → pbm Relation

File in eadIncludes file in pbm
serialize.hppdata.hpp
- - - - diff --git a/docs/dir_000003_000016.html b/docs/dir_000003_000016.html deleted file mode 100644 index b2397886a..000000000 --- a/docs/dir_000003_000016.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead -> tag Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

ead → tag Relation

File in eadIncludes file in tag
constant.hppprop.hpp
- - - - diff --git a/docs/dir_000006_000003.html b/docs/dir_000006_000003.html deleted file mode 100644 index c3e44e752..000000000 --- a/docs/dir_000006_000003.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc -> ead Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

grpc → ead Relation

File in dbg/grpcIncludes file in ead
session.hppsession.hpp
- - - - diff --git a/docs/dir_000006_000016.html b/docs/dir_000006_000016.html deleted file mode 100644 index 6b544f77f..000000000 --- a/docs/dir_000006_000016.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc -> tag Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

grpc → tag Relation

File in dbg/grpcIncludes file in tag
session.hpptag.hpp
- - - - diff --git a/docs/dir_000008_000000.html b/docs/dir_000008_000000.html deleted file mode 100644 index fad5ef9ef..000000000 --- a/docs/dir_000008_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/python -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

python → ade Relation

File in dbg/pythonIncludes file in ade
stream.cppade.hpp
- - - - diff --git a/docs/dir_000008_000002.html b/docs/dir_000008_000002.html deleted file mode 100644 index a2b81b1ce..000000000 --- a/docs/dir_000008_000002.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/python -> stream Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

python → stream Relation

File in dbg/pythonIncludes file in dbg/stream
stream.cppade.hpp
stream.cppade_csv.hpp
- - - - diff --git a/docs/dir_000008_000003.html b/docs/dir_000008_000003.html deleted file mode 100644 index 4b2bc42df..000000000 --- a/docs/dir_000008_000003.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/python -> ead Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

python → ead Relation

File in dbg/pythonIncludes file in ead
grpc.cppead.hpp
grpc.cppparse.hpp
- - - - diff --git a/docs/dir_000008_000006.html b/docs/dir_000008_000006.html deleted file mode 100644 index 8d09a989c..000000000 --- a/docs/dir_000008_000006.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: dbg/python -> grpc Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

python → grpc Relation

File in dbg/pythonIncludes file in dbg/grpc
grpc.cppsession.hpp
- - - - diff --git a/docs/dir_000011_000000.html b/docs/dir_000011_000000.html deleted file mode 100644 index 25514930b..000000000 --- a/docs/dir_000011_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: opt -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

opt → ade Relation

File in optIncludes file in ade
candidate.hppitensor.hpp
matcher.hpptraveler.hpp
stats.hppade.hpp
- - - - diff --git a/docs/dir_000011_000013.html b/docs/dir_000011_000013.html deleted file mode 100644 index 3feebcbb3..000000000 --- a/docs/dir_000011_000013.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: opt -> parse Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

opt → parse Relation

File in optIncludes file in opt/parse
iconverter.hppdef.h
ivoter.hppdef.h
- - - - diff --git a/docs/dir_000011_000016.html b/docs/dir_000011_000016.html deleted file mode 100644 index 857977f9c..000000000 --- a/docs/dir_000011_000016.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: opt -> tag Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

opt → tag Relation

File in optIncludes file in tag
matcher.hppgroup.hpp
stats.hppprop.hpp
- - - - diff --git a/docs/dir_000012_000000.html b/docs/dir_000012_000000.html deleted file mode 100644 index cfc10113c..000000000 --- a/docs/dir_000012_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: ead/python -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

python → ade Relation

File in ead/pythonIncludes file in ade
ead.cppade.hpp
- - - - diff --git a/docs/dir_000015_000000.html b/docs/dir_000015_000000.html deleted file mode 100644 index bce8dd672..000000000 --- a/docs/dir_000015_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: pbm -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

pbm → ade Relation

File in pbmIncludes file in ade
data.hppade.hpp
save.hppfunctor.hpp
save.hpptraveler.hpp
- - - - diff --git a/docs/dir_000016_000000.html b/docs/dir_000016_000000.html deleted file mode 100644 index 3a18c1cdc..000000000 --- a/docs/dir_000016_000000.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: tag -> ade Relation - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

tag → ade Relation

File in tagIncludes file in ade
tag.hppade.hpp
- - - - diff --git a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5.html b/docs/dir_07f5977f5a29732e6f1f304a9e5526f5.html deleted file mode 100644 index e067f6918..000000000 --- a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Tenncor: pbm Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
pbm Directory Reference
-
-
-
-Directory dependency graph for pbm:
-
-
pbm
- - - - - -
- - - - - - - - -

-Files

file  data.hpp [code]
 
file  load.hpp [code]
 
file  save.hpp [code]
 
-
- - - - diff --git a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.map b/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.map deleted file mode 100644 index cdb59d0e1..000000000 --- a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.md5 b/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.md5 deleted file mode 100644 index 690070a80..000000000 --- a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -ef37601b6ffaef7aa99b608ee0e55420 \ No newline at end of file diff --git a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.png b/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.png deleted file mode 100644 index 7a05b96ab..000000000 Binary files a/docs/dir_07f5977f5a29732e6f1f304a9e5526f5_dep.png and /dev/null differ diff --git a/docs/dir_0c861f68ba2ce04599a3b9164d89d7a8.html b/docs/dir_0c861f68ba2ce04599a3b9164d89d7a8.html deleted file mode 100644 index 47edccca2..000000000 --- a/docs/dir_0c861f68ba2ce04599a3b9164d89d7a8.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
plugins Directory Reference
-
-
- - - - - - - - - - - - -

-Files

file  apis.py
 
file  dtypes.py
 
file  opcodes.py
 
file  pyapis.py
 
file  template.py
 
-
- - - - diff --git a/docs/dir_2a8b73c4fa1844987128163974797431.html b/docs/dir_2a8b73c4fa1844987128163974797431.html deleted file mode 100644 index 5d24d0893..000000000 --- a/docs/dir_2a8b73c4fa1844987128163974797431.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Tenncor: dbg Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
dbg Directory Reference
-
-
-
-Directory dependency graph for dbg:
-
-
dbg
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -

-Directories

directory  grpc
 
directory  mockserver
 
directory  python
 
directory  stream
 
- - - - - -

-Files

file  csv_to_png.py
 
file  dbg_wrapper.py
 
-
- - - - diff --git a/docs/dir_2a8b73c4fa1844987128163974797431_dep.map b/docs/dir_2a8b73c4fa1844987128163974797431_dep.map deleted file mode 100644 index b28e4f9bf..000000000 --- a/docs/dir_2a8b73c4fa1844987128163974797431_dep.map +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/docs/dir_2a8b73c4fa1844987128163974797431_dep.md5 b/docs/dir_2a8b73c4fa1844987128163974797431_dep.md5 deleted file mode 100644 index d4a49b8a6..000000000 --- a/docs/dir_2a8b73c4fa1844987128163974797431_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -5a790fda1317846be7d1b97161e8737b \ No newline at end of file diff --git a/docs/dir_2a8b73c4fa1844987128163974797431_dep.png b/docs/dir_2a8b73c4fa1844987128163974797431_dep.png deleted file mode 100644 index 68740678e..000000000 Binary files a/docs/dir_2a8b73c4fa1844987128163974797431_dep.png and /dev/null differ diff --git a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb.html b/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb.html deleted file mode 100644 index 11ee4e83b..000000000 --- a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Tenncor: ead/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
ead/src
- - - - -
- - - - - - - - -

-Files

file  coord.cpp
 
file  eigen.cpp
 
file  random.cpp
 
-
- - - - diff --git a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.map b/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.map deleted file mode 100644 index 881505364..000000000 --- a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.md5 b/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.md5 deleted file mode 100644 index 3e1277e41..000000000 --- a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -5fa5cc565115cc64de9aca5ce33e44b7 \ No newline at end of file diff --git a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.png b/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.png deleted file mode 100644 index 37e053f6c..000000000 Binary files a/docs/dir_2f5fbbbcf3ebba20712d986ec2aa45eb_dep.png and /dev/null differ diff --git a/docs/dir_300af2e3fb644b1cc95833d99d1580cb.html b/docs/dir_300af2e3fb644b1cc95833d99d1580cb.html deleted file mode 100644 index f40f967db..000000000 --- a/docs/dir_300af2e3fb644b1cc95833d99d1580cb.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: dbg/mockserver Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
mockserver Directory Reference
-
-
- - - - -

-Files

file  mockserver.cpp
 
-
- - - - diff --git a/docs/dir_5247ae95413d904c463adb31a711663c.html b/docs/dir_5247ae95413d904c463adb31a711663c.html deleted file mode 100644 index e8773c708..000000000 --- a/docs/dir_5247ae95413d904c463adb31a711663c.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: opt/parse Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
parse Directory Reference
-
-
- - - - - - - - - - -

-Files

file  def.c
 
file  def.h [code]
 
file  list.c
 
file  list.h [code]
 
-
- - - - diff --git a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258.html b/docs/dir_74e5efdc6e80f7a3d9906cace1e11258.html deleted file mode 100644 index 40cf3094d..000000000 --- a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: dbg/grpc Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
grpc Directory Reference
-
-
-
-Directory dependency graph for grpc:
-
-
dbg/grpc
- - - - - - - - - -
- - - - - - -

-Files

file  client.hpp [code]
 
file  session.hpp [code]
 
-
- - - - diff --git a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.map b/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.map deleted file mode 100644 index 9eb059505..000000000 --- a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.md5 b/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.md5 deleted file mode 100644 index 335b3a678..000000000 --- a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -e2adc45c600cf034b19154575fe52462 \ No newline at end of file diff --git a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.png b/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.png deleted file mode 100644 index 8d469d367..000000000 Binary files a/docs/dir_74e5efdc6e80f7a3d9906cace1e11258_dep.png and /dev/null differ diff --git a/docs/dir_850baa5eb5fa9b6f248ed10c61457354.html b/docs/dir_850baa5eb5fa9b6f248ed10c61457354.html deleted file mode 100644 index 01f11edd2..000000000 --- a/docs/dir_850baa5eb5fa9b6f248ed10c61457354.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Tenncor: dbg/python Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
python Directory Reference
-
-
-
-Directory dependency graph for python:
-
-
dbg/python
- - - - - - - - - - - - - - - -
- - - - - - -

-Files

file  grpc.cpp
 
file  stream.cpp
 
-
- - - - diff --git a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.map b/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.map deleted file mode 100644 index 55a6b012e..000000000 --- a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.md5 b/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.md5 deleted file mode 100644 index f225bde64..000000000 --- a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -cb897239ee549bd0e9794c2152f76579 \ No newline at end of file diff --git a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.png b/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.png deleted file mode 100644 index 9829fd103..000000000 Binary files a/docs/dir_850baa5eb5fa9b6f248ed10c61457354_dep.png and /dev/null differ diff --git a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35.html b/docs/dir_89d55d0dfc6fe7de606196bb2106fb35.html deleted file mode 100644 index d97d25514..000000000 --- a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: ead Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ead Directory Reference
-
-
-
-Directory dependency graph for ead:
-
-
ead
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - -

-Directories

directory  age
 
directory  python
 
directory  src
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  constant.hpp [code]
 
file  coord.hpp [code]
 
file  ead.hpp [code]
 
file  eigen.hpp [code]
 
file  funcarg.hpp [code]
 
file  functor.hpp [code]
 
file  grader.hpp [code]
 
file  ileaf.hpp [code]
 
file  inode.hpp [code]
 
file  operator.hpp [code]
 
file  parse.hpp [code]
 
file  random.hpp [code]
 
file  serialize.hpp [code]
 
file  session.hpp [code]
 
file  variable.hpp [code]
 
-
- - - - diff --git a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.map b/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.map deleted file mode 100644 index 57746d62a..000000000 --- a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.map +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.md5 b/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.md5 deleted file mode 100644 index ee7fcd949..000000000 --- a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -09f00ce864e56d59d4aff68c28f8db87 \ No newline at end of file diff --git a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.png b/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.png deleted file mode 100644 index e7444066d..000000000 Binary files a/docs/dir_89d55d0dfc6fe7de606196bb2106fb35_dep.png and /dev/null differ diff --git a/docs/dir_97757236e3c067dca99452dec566d982.html b/docs/dir_97757236e3c067dca99452dec566d982.html deleted file mode 100644 index b07237ef2..000000000 --- a/docs/dir_97757236e3c067dca99452dec566d982.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: ade/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
ade/src
- - - - -
- - - - - - - - - - - - -

-Files

file  coord.cpp
 
file  funcarg.cpp
 
file  matops.cpp
 
file  shape.cpp
 
file  traveler.cpp
 
-
- - - - diff --git a/docs/dir_97757236e3c067dca99452dec566d982_dep.map b/docs/dir_97757236e3c067dca99452dec566d982_dep.map deleted file mode 100644 index 53ca178c4..000000000 --- a/docs/dir_97757236e3c067dca99452dec566d982_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/dir_97757236e3c067dca99452dec566d982_dep.md5 b/docs/dir_97757236e3c067dca99452dec566d982_dep.md5 deleted file mode 100644 index 4fcfdde7f..000000000 --- a/docs/dir_97757236e3c067dca99452dec566d982_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -99f53186bc0e9373dfd44cf1510bd231 \ No newline at end of file diff --git a/docs/dir_97757236e3c067dca99452dec566d982_dep.png b/docs/dir_97757236e3c067dca99452dec566d982_dep.png deleted file mode 100644 index b256ec9e1..000000000 Binary files a/docs/dir_97757236e3c067dca99452dec566d982_dep.png and /dev/null differ diff --git a/docs/dir_98252352adabc1c9f57a361e0737ebf3.html b/docs/dir_98252352adabc1c9f57a361e0737ebf3.html deleted file mode 100644 index 3908c9a70..000000000 --- a/docs/dir_98252352adabc1c9f57a361e0737ebf3.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Tenncor: tag Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
tag Directory Reference
-
-
-
-Directory dependency graph for tag:
-
-
tag
- - - - - - -
- - - - -

-Directories

directory  src
 
- - - - - - - -

-Files

file  group.hpp [code]
 
file  prop.hpp [code]
 
file  tag.hpp [code]
 
-
- - - - diff --git a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.map b/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.map deleted file mode 100644 index 99791097f..000000000 --- a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.md5 b/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.md5 deleted file mode 100644 index 61e77ccf6..000000000 --- a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -82b2dc6294afb4bf4135effc1123eb77 \ No newline at end of file diff --git a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.png b/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.png deleted file mode 100644 index 54574c470..000000000 Binary files a/docs/dir_98252352adabc1c9f57a361e0737ebf3_dep.png and /dev/null differ diff --git a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7.html b/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7.html deleted file mode 100644 index 53e99194a..000000000 --- a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Tenncor: opt Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
opt Directory Reference
-
-
-
-Directory dependency graph for opt:
-
-
opt
- - - - - - - - - - - -
- - - - - - -

-Directories

directory  parse
 
directory  src
 
- - - - - - - - - - - - - - - - - - - -

-Files

file  candidate.hpp [code]
 
file  iconverter.hpp [code]
 
file  ivoter.hpp [code]
 
file  matcher.hpp [code]
 
file  optimize.hpp [code]
 
file  parse.hpp [code]
 
file  rmdups.hpp [code]
 
file  stats.hpp [code]
 
file  voter.hpp [code]
 
-
- - - - diff --git a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.map b/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.map deleted file mode 100644 index c6d79cf35..000000000 --- a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.md5 b/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.md5 deleted file mode 100644 index 382ea64a5..000000000 --- a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -e71b3fbc5aea253ea7018e9cbbde7f01 \ No newline at end of file diff --git a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.png b/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.png deleted file mode 100644 index e96dd077e..000000000 Binary files a/docs/dir_a5c23e4d4d2f2652fc21caa9afd4c5c7_dep.png and /dev/null differ diff --git a/docs/dir_a767387f486eef92b1156f77cacf1674.html b/docs/dir_a767387f486eef92b1156f77cacf1674.html deleted file mode 100644 index 0f6a3cf21..000000000 --- a/docs/dir_a767387f486eef92b1156f77cacf1674.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Tenncor: tag/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
tag/src
- - - - -
- - - - - - - - -

-Files

file  group.cpp
 
file  prop.cpp
 
file  tag.cpp
 
-
- - - - diff --git a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.map b/docs/dir_a767387f486eef92b1156f77cacf1674_dep.map deleted file mode 100644 index 759ee8b00..000000000 --- a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.md5 b/docs/dir_a767387f486eef92b1156f77cacf1674_dep.md5 deleted file mode 100644 index 624194dee..000000000 --- a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -9edc72b3a3f4ef42b7a13c10b07190bf \ No newline at end of file diff --git a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.png b/docs/dir_a767387f486eef92b1156f77cacf1674_dep.png deleted file mode 100644 index e42d9af42..000000000 Binary files a/docs/dir_a767387f486eef92b1156f77cacf1674_dep.png and /dev/null differ diff --git a/docs/dir_b126124e7ba8268801842e13214ea156.html b/docs/dir_b126124e7ba8268801842e13214ea156.html deleted file mode 100644 index 483a37326..000000000 --- a/docs/dir_b126124e7ba8268801842e13214ea156.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: opt/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
opt/src
- - - - -
- - - - - - - - - - - - -

-Files

file  ivoter.cpp
 
file  optimize.cpp
 
file  parse.cpp
 
file  rmdups.cpp
 
file  stats.cpp
 
-
- - - - diff --git a/docs/dir_b126124e7ba8268801842e13214ea156_dep.map b/docs/dir_b126124e7ba8268801842e13214ea156_dep.map deleted file mode 100644 index 210424bae..000000000 --- a/docs/dir_b126124e7ba8268801842e13214ea156_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/dir_b126124e7ba8268801842e13214ea156_dep.md5 b/docs/dir_b126124e7ba8268801842e13214ea156_dep.md5 deleted file mode 100644 index bce3d3cf2..000000000 --- a/docs/dir_b126124e7ba8268801842e13214ea156_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -12699f6ed69416bf0b43da6efe063a59 \ No newline at end of file diff --git a/docs/dir_b126124e7ba8268801842e13214ea156_dep.png b/docs/dir_b126124e7ba8268801842e13214ea156_dep.png deleted file mode 100644 index d1d3e26a5..000000000 Binary files a/docs/dir_b126124e7ba8268801842e13214ea156_dep.png and /dev/null differ diff --git a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed.html b/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed.html deleted file mode 100644 index 1d0ce936b..000000000 --- a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Tenncor: ead/python Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
python Directory Reference
-
-
-
-Directory dependency graph for python:
-
-
ead/python
- - - - - - -
- - - - -

-Files

file  ead.cpp
 
-
- - - - diff --git a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.map b/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.map deleted file mode 100644 index d899f83c1..000000000 --- a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.md5 b/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.md5 deleted file mode 100644 index c66fe7cf8..000000000 --- a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -74634b3f8498b339795ac67ba63dc187 \ No newline at end of file diff --git a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.png b/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.png deleted file mode 100644 index f4950575d..000000000 Binary files a/docs/dir_c24f8759f5fd9f24f8b6a8d1a5bb7eed_dep.png and /dev/null differ diff --git a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d.html b/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d.html deleted file mode 100644 index e6b05a4f7..000000000 --- a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: dbg/stream Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
stream Directory Reference
-
-
-
-Directory dependency graph for stream:
-
-
dbg/stream
- - - - - - -
- - - - - - - - - - -

-Files

file  ade.hpp [code]
 
file  ade_csv.hpp [code]
 
file  tensor.hpp [code]
 
file  tree.hpp [code]
 
-
- - - - diff --git a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.map b/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.map deleted file mode 100644 index 3514b0c15..000000000 --- a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.md5 b/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.md5 deleted file mode 100644 index 0e850d407..000000000 --- a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -faeed99910f21664a8d0a7ac9d50ad5e \ No newline at end of file diff --git a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.png b/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.png deleted file mode 100644 index a80fe88cb..000000000 Binary files a/docs/dir_d67beddd9bdf57fb2c6b140720c0ce9d_dep.png and /dev/null differ diff --git a/docs/dir_e27d2b201b2b67ab280cb2f6929c41a1.html b/docs/dir_e27d2b201b2b67ab280cb2f6929c41a1.html deleted file mode 100644 index 21ba6374a..000000000 --- a/docs/dir_e27d2b201b2b67ab280cb2f6929c41a1.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Tenncor: ade Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ade Directory Reference
-
-
- - - - -

-Directories

directory  src
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  ade.hpp [code]
 
file  coord.hpp [code]
 
file  funcarg.hpp [code]
 
file  functor.hpp [code]
 
file  grad_def.hpp [code]
 
file  idata.hpp [code]
 
file  ifunctor.hpp [code]
 
file  ileaf.hpp [code]
 
file  iopfunc.hpp [code]
 
file  itensor.hpp [code]
 
file  matops.hpp [code]
 
file  shape.hpp [code]
 
file  traveler.hpp [code]
 
-
- - - - diff --git a/docs/dir_ebd219687892b0b747a5b0d511dfebc2.html b/docs/dir_ebd219687892b0b747a5b0d511dfebc2.html deleted file mode 100644 index 6faa18e8c..000000000 --- a/docs/dir_ebd219687892b0b747a5b0d511dfebc2.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: ead/age Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
age Directory Reference
-
-
- - - - -

-Directories

directory  plugins
 
- - - -

-Files

file  agen.py
 
-
- - - - diff --git a/docs/doc.png b/docs/doc.png deleted file mode 100644 index 17edabff9..000000000 Binary files a/docs/doc.png and /dev/null differ diff --git a/docs/doxygen.css b/docs/doxygen.css deleted file mode 100644 index 266c8b3a6..000000000 --- a/docs/doxygen.css +++ /dev/null @@ -1,1596 +0,0 @@ -/* The standard CSS for doxygen 1.8.14 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - - -/* @end */ diff --git a/docs/doxygen.png b/docs/doxygen.png deleted file mode 100644 index 3ff17d807..000000000 Binary files a/docs/doxygen.png and /dev/null differ diff --git a/docs/dtypes_8py.html b/docs/dtypes_8py.html deleted file mode 100644 index 3bd664b5b..000000000 --- a/docs/dtypes_8py.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins/dtypes.py File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
dtypes.py File Reference
-
-
- - - - -

-Classes

class  dtypes.DTypesPlugin
 
- - - -

-Namespaces

 dtypes
 
- - - - - - - - - - - - - - - - - -

-Functions

def dtypes._handle_enumeration (dtypes)
 
def dtypes._handle_mapping (dtypes)
 
def dtypes._handle_conversions (dtypes)
 
def dtypes._handle_cases (dtypes)
 
def dtypes._handle_type2names (dtypes)
 
def dtypes._handle_name2types (dtypes)
 
def dtypes._handle_typesizes (dtypes)
 
def dtypes._handle_get_types (dtypes)
 
- - - - - - - - - - - -

-Variables

string dtypes._header_template
 
string dtypes._source_template
 
string dtypes._convert_tmp
 
string dtypes._get_type_tmp
 
string dtypes._plugin_id = "DTYPE"
 
-
- - - - diff --git a/docs/dynsections.js b/docs/dynsections.js deleted file mode 100644 index c1ce12260..000000000 --- a/docs/dynsections.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Tenncor: ead/coord.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
coord.hpp File Reference
-
-
-
#include "ade/coord.hpp"
-
-Include dependency graph for coord.hpp:
-
-
- - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  ead::CoordMap
 
- - - -

-Namespaces

 ead
 
- - - - -

-Typedefs

using ead::CoordptrT = std::shared_ptr< CoordMap >
 Type of iCoordMap smartpointer. More...
 
- - - - - - - -

-Functions

CoordptrT ead::reduce (std::vector< ade::RankT > red_dims)
 
CoordptrT ead::extend (ade::RankT rank, std::vector< ade::DimT > ext)
 
CoordptrT ead::permute (std::vector< ade::RankT > dims)
 
-
- - - - diff --git a/docs/ead_2coord_8hpp__dep__incl.map b/docs/ead_2coord_8hpp__dep__incl.map deleted file mode 100644 index 089fef430..000000000 --- a/docs/ead_2coord_8hpp__dep__incl.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/ead_2coord_8hpp__dep__incl.md5 b/docs/ead_2coord_8hpp__dep__incl.md5 deleted file mode 100644 index 23c79e4fe..000000000 --- a/docs/ead_2coord_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e487c724a38c1b55a93dfaeedd4db2a2 \ No newline at end of file diff --git a/docs/ead_2coord_8hpp__dep__incl.png b/docs/ead_2coord_8hpp__dep__incl.png deleted file mode 100644 index c1085ceed..000000000 Binary files a/docs/ead_2coord_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2coord_8hpp__incl.map b/docs/ead_2coord_8hpp__incl.map deleted file mode 100644 index 36a0568e2..000000000 --- a/docs/ead_2coord_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/ead_2coord_8hpp__incl.md5 b/docs/ead_2coord_8hpp__incl.md5 deleted file mode 100644 index 982c37f6b..000000000 --- a/docs/ead_2coord_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -71599f72b346b26ca84a924a8edc9005 \ No newline at end of file diff --git a/docs/ead_2coord_8hpp__incl.png b/docs/ead_2coord_8hpp__incl.png deleted file mode 100644 index e2f24590e..000000000 Binary files a/docs/ead_2coord_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2coord_8hpp_source.html b/docs/ead_2coord_8hpp_source.html deleted file mode 100644 index 29faea479..000000000 --- a/docs/ead_2coord_8hpp_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Tenncor: ead/coord.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
coord.hpp
-
-
-Go to the documentation of this file.
1 #include "ade/coord.hpp"
2 
3 #ifndef EAD_COORD_HPP
4 #define EAD_COORD_HPP
5 
6 namespace ead
7 {
8 
9 struct CoordMap final : public ade::iCoordMap
10 {
11  CoordMap (ade::CoordT indices, bool bijective) :
12  indices_(indices), bijective_(bijective) {}
13 
14  ade::iCoordMap* connect (const ade::iCoordMap& rhs) const override
15  {
16  return nullptr;
17  }
18 
19  void forward (ade::CoordT::iterator out,
20  ade::CoordT::const_iterator in) const override
21  {
22  std::copy(indices_.begin(), indices_.end(), out);
23  }
24 
25  iCoordMap* reverse (void) const override
26  {
27  return nullptr;
28  }
29 
30  std::string to_string (void) const override
31  {
32  return fmts::to_string(indices_.begin(), indices_.end());
33  }
34 
35  void access (std::function<void(const ade::MatrixT&)> cb) const override {}
36 
37  bool is_bijective (void) const override
38  {
39  return bijective_;
40  }
41 
42 private:
44 
45  bool bijective_;
46 };
47 
49 using CoordptrT = std::shared_ptr<CoordMap>;
50 
51 CoordptrT reduce (std::vector<ade::RankT> red_dims);
52 
53 CoordptrT extend (ade::RankT rank, std::vector<ade::DimT> ext);
54 
55 CoordptrT permute (std::vector<ade::RankT> dims);
56 
57 }
58 
59 #endif // EAD_COORD_HPP
ade::CoordT indices_
Definition: coord.hpp:43
-
CoordptrT reduce(std::vector< ade::RankT > red_dims)
-
void forward(ade::CoordT::iterator out, ade::CoordT::const_iterator in) const override
Definition: coord.hpp:19
-
CoordptrT extend(ade::RankT rank, std::vector< ade::DimT > ext)
-
Definition: coord.hpp:9
- -
Definition: constant.hpp:9
-
bool bijective_
Definition: coord.hpp:45
-
std::string to_string(void) const override
Return string representation of coordinate transformer.
Definition: coord.hpp:30
-
bool is_bijective(void) const override
Return true if this instance maps coordinates/shapes bijectively.
Definition: coord.hpp:37
-
Interface for transforming coordinates and reversing the coordinate.
Definition: coord.hpp:20
-
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28
-
CoordMap(ade::CoordT indices, bool bijective)
Definition: coord.hpp:11
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
ade::iCoordMap * connect(const ade::iCoordMap &rhs) const override
Return matmul(this, rhs)
Definition: coord.hpp:14
-
std::array< CDimT, rank_cap > CoordT
Definition: shape.hpp:54
-
void access(std::function< void(const ade::MatrixT &)> cb) const override
Definition: coord.hpp:35
-
CoordptrT permute(std::vector< ade::RankT > dims)
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:49
-
iCoordMap * reverse(void) const override
Definition: coord.hpp:25
-
- - - - diff --git a/docs/ead_2funcarg_8hpp.html b/docs/ead_2funcarg_8hpp.html deleted file mode 100644 index d638ab11e..000000000 --- a/docs/ead_2funcarg_8hpp.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Tenncor: ead/funcarg.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
funcarg.hpp File Reference
-
-
-
#include "ade/funcarg.hpp"
-#include "ead/coord.hpp"
-#include "ead/inode.hpp"
-
-Include dependency graph for funcarg.hpp:
-
-
- - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  ead::FuncArg< T >
 
- - - -

-Namespaces

 ead
 
- - - - -

-Typedefs

template<typename T >
using ead::ArgsT = std::vector< FuncArg< T > >
 
- - - - - - - - - - - - - -

-Functions

template<typename T >
FuncArg< T > ead::identity_map (NodeptrT< T > node)
 
template<typename T >
FuncArg< T > ead::reduce_map (NodeptrT< T > node, ade::RankT offset, ade::RankT ndims)
 
template<typename T >
FuncArg< T > ead::extend_map (NodeptrT< T > node, ade::RankT rank, std::vector< ade::DimT > ext)
 
template<typename T >
FuncArg< T > ead::permute_map (NodeptrT< T > node, std::vector< ade::RankT > order)
 
-
- - - - diff --git a/docs/ead_2funcarg_8hpp__dep__incl.map b/docs/ead_2funcarg_8hpp__dep__incl.map deleted file mode 100644 index d47bd1b48..000000000 --- a/docs/ead_2funcarg_8hpp__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/ead_2funcarg_8hpp__dep__incl.md5 b/docs/ead_2funcarg_8hpp__dep__incl.md5 deleted file mode 100644 index fcab9dd0d..000000000 --- a/docs/ead_2funcarg_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -735690f9f8a03cbab58eb2480e987f6d \ No newline at end of file diff --git a/docs/ead_2funcarg_8hpp__dep__incl.png b/docs/ead_2funcarg_8hpp__dep__incl.png deleted file mode 100644 index 02932b009..000000000 Binary files a/docs/ead_2funcarg_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2funcarg_8hpp__incl.map b/docs/ead_2funcarg_8hpp__incl.map deleted file mode 100644 index 8050cbda6..000000000 --- a/docs/ead_2funcarg_8hpp__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/ead_2funcarg_8hpp__incl.md5 b/docs/ead_2funcarg_8hpp__incl.md5 deleted file mode 100644 index 91c2b8fb3..000000000 --- a/docs/ead_2funcarg_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b6f715ac20a4dbd692808949b1a9f72b \ No newline at end of file diff --git a/docs/ead_2funcarg_8hpp__incl.png b/docs/ead_2funcarg_8hpp__incl.png deleted file mode 100644 index 140abc733..000000000 Binary files a/docs/ead_2funcarg_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2funcarg_8hpp_source.html b/docs/ead_2funcarg_8hpp_source.html deleted file mode 100644 index 89470ba21..000000000 --- a/docs/ead_2funcarg_8hpp_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Tenncor: ead/funcarg.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
funcarg.hpp
-
-
-Go to the documentation of this file.
1 #include "ade/funcarg.hpp"
2 
3 #include "ead/coord.hpp"
4 #include "ead/inode.hpp"
5 
6 #ifndef EAD_FUNCARG_HPP
7 #define EAD_FUNCARG_HPP
8 
9 namespace ead
10 {
11 
12 template <typename T>
13 struct FuncArg final
14 {
16  FuncArg (NodeptrT<T> node, ade::CoordptrT shaper, CoordptrT coorder) :
17  node_(node), shaper_(shaper), coorder_(coorder)
18  {
19  if (node_ == nullptr)
20  {
21  logs::fatal("cannot map a null node");
22  }
23  }
24 
26  ade::Shape shape (void) const
27  {
28  return ade::apply_shaper(shaper_, node_->get_tensor()->shape());
29  }
30 
33  {
34  return node_->get_tensor();
35  }
36 
37  NodeptrT<T> get_node (void) const
38  {
39  return node_;
40  }
41 
44  {
45  return shaper_;
46  }
47 
50  bool map_io (void) const
51  {
52  // map in to out only if bijective
53  return nullptr == coorder_ || coorder_->is_bijective();
54  }
55 
57  CoordptrT get_coorder (void) const
58  {
59  return coorder_;
60  }
61 
62 private:
65 
68 
71 };
72 
73 template <typename T>
74 using ArgsT = std::vector<FuncArg<T>>;
75 
76 template <typename T>
78 {
79  return FuncArg<T>(node, ade::identity, nullptr);
80 }
81 
82 template <typename T>
84 {
85  if (offset >= ade::rank_cap)
86  {
87  logs::fatalf("cannot dimensions [%d,...] greater or equal to %d",
88  offset, ade::rank_cap);
89  }
90 
91  ade::RankT n = std::min<ade::RankT>(offset + ndims, ade::rank_cap);
92  ade::Shape shape = node->get_tensor()->shape();
93  std::vector<ade::RankT> dims; // dims are allowed to be non-contiguous
94  std::vector<ade::DimT> slist;
95  dims.reserve(n);
96  slist.reserve(n);
97 
98  for (ade::RankT i = offset; i < n; ++i)
99  {
100  if (shape.at(i) > 1)
101  {
102  dims.push_back(i);
103  }
104  slist.push_back(shape.at(i));
105  }
106 
107  return FuncArg<T>(node, ade::reduce(offset, slist), reduce(dims));
108 }
109 
110 template <typename T>
112  ade::RankT rank, std::vector<ade::DimT> ext)
113 {
114  return FuncArg<T>(node, ade::extend(rank, ext), extend(rank, ext));
115 }
116 
117 template <typename T>
118 FuncArg<T> permute_map (NodeptrT<T> node, std::vector<ade::RankT> order)
119 {
120  return FuncArg<T>(node, ade::permute(order), permute(order));
121 }
122 
123 }
124 
125 #endif // EAD_FUNCARG_HPP
ade::Shape shape(void) const
Return shape of tensor filtered through coordinate mapper.
Definition: funcarg.hpp:26
-
CoordptrT reduce(std::vector< ade::RankT > red_dims)
-
CoordptrT extend(ade::RankT rank, std::vector< ade::DimT > ext)
-
NodeptrT< T > get_node(void) const
Definition: funcarg.hpp:37
-
CoordptrT extend(RankT rank, std::vector< DimT > ext)
-
CoordptrT reduce(RankT rank, std::vector< DimT > red)
-
FuncArg< T > extend_map(NodeptrT< T > node, ade::RankT rank, std::vector< ade::DimT > ext)
Definition: funcarg.hpp:111
-
std::shared_ptr< iNode< T > > NodeptrT
Definition: inode.hpp:31
-
FuncArg< T > reduce_map(NodeptrT< T > node, ade::RankT offset, ade::RankT ndims)
Definition: funcarg.hpp:83
-
NodeptrT< T > node_
Tensor reference.
Definition: funcarg.hpp:64
-
std::vector< FuncArg< T > > ArgsT
Definition: funcarg.hpp:74
-
bool map_io(void) const
Definition: funcarg.hpp:50
-
ade::TensptrT get_tensor(void) const
Return tensor being mapped.
Definition: funcarg.hpp:32
- - -
Definition: constant.hpp:9
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Definition: funcarg.hpp:13
-
CoordptrT identity
Identity matrix instance.
-
FuncArg< T > permute_map(NodeptrT< T > node, std::vector< ade::RankT > order)
Definition: funcarg.hpp:118
-
CoordptrT coorder_
Coordinate mapper.
Definition: funcarg.hpp:70
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
ade::CoordptrT get_shaper(void) const
Return shaper coord map.
Definition: funcarg.hpp:43
- -
Shape apply_shaper(const CoordptrT &shaper, Shape inshape)
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
ade::CoordptrT shaper_
Shape mapper.
Definition: funcarg.hpp:67
-
FuncArg< T > identity_map(NodeptrT< T > node)
Definition: funcarg.hpp:77
-
Definition: shape.hpp:60
-
FuncArg(NodeptrT< T > node, ade::CoordptrT shaper, CoordptrT coorder)
Construct FuncArg with specific coorder_ and map_io_ flag.
Definition: funcarg.hpp:16
-
CoordptrT permute(std::vector< RankT > order)
-
CoordptrT permute(std::vector< ade::RankT > dims)
-
const RankT rank_cap
Number of dimsensions in a shape/coordinate.
Definition: shape.hpp:45
-
CoordptrT get_coorder(void) const
Return coord map for coordinates.
Definition: funcarg.hpp:57
-
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:49
-
- - - - diff --git a/docs/ead_2functor_8hpp.html b/docs/ead_2functor_8hpp.html deleted file mode 100644 index 3a1b7ce3f..000000000 --- a/docs/ead_2functor_8hpp.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -Tenncor: ead/functor.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
functor.hpp File Reference
-
-
-
#include "ade/iopfunc.hpp"
-#include "ead/generated/opcode.hpp"
-#include "ead/funcarg.hpp"
-#include "ead/constant.hpp"
-#include "ead/operator.hpp"
-
-Include dependency graph for functor.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - -

-Classes

struct  ead::Functor< T >
 
struct  ead::FunctorNode< T >
 
- - - -

-Namespaces

 ead
 
- - - - -

-Functions

template<typename T >
NodeptrT< T > ead::make_functor (ade::Opcode opcode, ArgsT< T > args)
 
-
- - - - diff --git a/docs/ead_2functor_8hpp__dep__incl.map b/docs/ead_2functor_8hpp__dep__incl.map deleted file mode 100644 index 99b3304d3..000000000 --- a/docs/ead_2functor_8hpp__dep__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/ead_2functor_8hpp__dep__incl.md5 b/docs/ead_2functor_8hpp__dep__incl.md5 deleted file mode 100644 index 5b881bf77..000000000 --- a/docs/ead_2functor_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8a1439fcd68dc90eb62b29c8e8feb64f \ No newline at end of file diff --git a/docs/ead_2functor_8hpp__dep__incl.png b/docs/ead_2functor_8hpp__dep__incl.png deleted file mode 100644 index 9a4158a6e..000000000 Binary files a/docs/ead_2functor_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2functor_8hpp__incl.map b/docs/ead_2functor_8hpp__incl.map deleted file mode 100644 index 448c836b6..000000000 --- a/docs/ead_2functor_8hpp__incl.map +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ead_2functor_8hpp__incl.md5 b/docs/ead_2functor_8hpp__incl.md5 deleted file mode 100644 index 29f08406e..000000000 --- a/docs/ead_2functor_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -52b2b1a09de6145aa7c9562180b09d15 \ No newline at end of file diff --git a/docs/ead_2functor_8hpp__incl.png b/docs/ead_2functor_8hpp__incl.png deleted file mode 100644 index b0b84346d..000000000 Binary files a/docs/ead_2functor_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2functor_8hpp_source.html b/docs/ead_2functor_8hpp_source.html deleted file mode 100644 index e6e6dd632..000000000 --- a/docs/ead_2functor_8hpp_source.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -Tenncor: ead/functor.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
functor.hpp
-
-
-Go to the documentation of this file.
1 #include "ade/iopfunc.hpp"
2 
3 #include "ead/generated/opcode.hpp"
4 
5 #include "ead/funcarg.hpp"
6 #include "ead/constant.hpp"
7 #include "ead/operator.hpp"
8 
9 #ifndef EAD_FUNCTOR_HPP
10 #define EAD_FUNCTOR_HPP
11 
12 namespace ead
13 {
14 
15 template <typename T>
16 struct Functor final : public ade::iOperableFunc
17 {
18  static Functor<T>* get (ade::Opcode opcode, ArgsT<T> args);
19 
20  static Functor<T>* get (Functor<T>&& other)
21  {
22  return new Functor<T>(std::move(other));
23  }
24 
25  Functor (const Functor<T>& other) = delete;
26 
27  Functor<T>& operator = (const Functor<T>& other) = delete;
28 
29  Functor<T>& operator = (Functor<T>&& other) = delete;
30 
32  const ade::Shape& shape (void) const override
33  {
34  return shape_;
35  }
36 
38  std::string to_string (void) const override
39  {
40  return opcode_.name_;
41  }
42 
44  ade::Opcode get_opcode (void) const override
45  {
46  return opcode_;
47  }
48 
50  const ade::ArgsT& get_children (void) const override
51  {
52  return args_;
53  }
54 
56  void update_child (ade::FuncArg arg, size_t index) override
57  {
58  ade::Shape arg_shape = arg.shape();
59  if (false == arg_shape.compatible_after(shape_, 0))
60  {
61  logs::fatalf("cannot update child %d to argument with "
62  "incompatible shape %s (requires shape %s)",
63  index, arg_shape.to_string().c_str(),
64  shape_.to_string().c_str());
65  }
66  args_[index] = arg;
67  uninitialize();
68  // warning: does not notify parents of data destruction
69  }
70 
72  void update (void) override
73  {
74  if (is_uninit())
75  {
76  initialize();
77  }
78  return out_->assign();
79  }
80 
82  void* data (void) override
83  {
84  if (is_uninit())
85  {
86  initialize();
87  }
88  return out_->get_ptr();
89  }
90 
92  const void* data (void) const override
93  {
94  if (is_uninit())
95  {
96  logs::fatal("cannot get data of uninitialized functor");
97  }
98  return out_->get_ptr();
99  }
100 
102  size_t type_code (void) const override
103  {
104  return age::get_type<T>();
105  }
106 
108  std::string type_label (void) const override
109  {
110  return age::name_type(age::get_type<T>());
111  }
112 
114  size_t nbytes (void) const override
115  {
116  return sizeof(T) * shape_.n_elems();
117  }
118 
119  bool is_uninit (void) const
120  {
121  return nullptr == out_;
122  }
123 
124  void uninitialize (void)
125  {
126  out_ = nullptr;
127  }
128 
129  void initialize (void)
130  {
131  std::vector<OpArg<T>> datamaps;
132  for (const ade::FuncArg& arg : args_)
133  {
134  auto tens = arg.get_tensor();
135  auto coorder = static_cast<CoordMap*>(arg.get_coorder().get());
136  datamaps.push_back(OpArg<T>{
137  NodeConverters<T>::to_node(tens)->data(),
138  tens->shape(),
139  coorder
140  });
141  }
142  age::typed_exec<T>((age::_GENERATED_OPCODE) opcode_.code_,
143  shape_, out_, datamaps);
144  }
145 
146 private:
148  opcode_(opcode), shape_(shape), args_(args)
149  {
150  // initialize();
151  }
152 
153  Functor (Functor<T>&& other) = default;
154 
155  EigenptrT<T> out_ = nullptr;
156 
159 
162 
165 };
166 
167 template <typename T>
168 struct FunctorNode final : public iNode<T>
169 {
170  FunctorNode (std::shared_ptr<Functor<T>> f) : func_(f) {}
171 
172  T* data (void) override
173  {
174  return (T*) func_->data();
175  }
176 
177  void update (void) override
178  {
179  func_->update();
180  }
181 
182  ade::TensptrT get_tensor (void) override
183  {
184  return func_;
185  }
186 
187 private:
188  std::shared_ptr<Functor<T>> func_;
189 };
190 
191 template <typename T>
193 {
194  static bool registered = register_builder<Functor<T>,T>(
195  [](ade::TensptrT tens)
196  {
197  return std::make_shared<FunctorNode<T>>(
198  std::static_pointer_cast<Functor<T>>(tens));
199  });
200  assert(registered);
201 
202  size_t nargs = args.size();
203  if (0 == nargs)
204  {
205  logs::fatalf("cannot perform %s with no arguments",
206  opcode.name_.c_str());
207  }
208 
209  ade::Shape shape = args[0].shape();
210  for (size_t i = 1, n = nargs; i < n; ++i)
211  {
212  ade::Shape ishape = args[i].shape();
213  if (false == ishape.compatible_after(shape, 0))
214  {
215  logs::fatalf("cannot perform %s with incompatible shapes %s "
216  "and %s", opcode.name_.c_str(), shape.to_string().c_str(),
217  ishape.to_string().c_str());
218  }
219  }
220 
221  ade::ArgsT input_args;
222  input_args.reserve(nargs);
223  std::transform(args.begin(), args.end(),
224  std::back_inserter(input_args),
225  [](FuncArg<T>& arg)
226  {
227  return ade::FuncArg(
228  arg.get_tensor(),
229  arg.get_shaper(),
230  arg.map_io(),
231  arg.get_coorder());
232  });
233  return new Functor<T>(opcode, shape, input_args);
234 }
235 
236 template <typename T>
238 {
239  return std::make_shared<FunctorNode<T>>(
240  std::shared_ptr<Functor<T>>(Functor<T>::get(opcode, args))
241  );
242 }
243 
244 }
245 
246 #endif // EAD_FUNCTOR_HPP
const void * data(void) const override
Implementation of iData.
Definition: functor.hpp:92
-
Functor< T > & operator=(const Functor< T > &other)=delete
-
size_t type_code(void) const override
Implementation of iData.
Definition: functor.hpp:102
-
args
Definition: csv_to_png.py:105
-
const ade::ArgsT & get_children(void) const override
Implementation of iFunctor.
Definition: functor.hpp:50
-
void update(void) override
Implementation of iOperableFunc.
Definition: functor.hpp:72
-
Encoding of operation.
Definition: ifunctor.hpp:18
- -
ade::ArgsT args_
Tensor arguments (and children)
Definition: functor.hpp:164
-
Definition: coord.hpp:9
-
std::shared_ptr< Functor< T > > func_
Definition: functor.hpp:188
-
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
std::shared_ptr< iNode< T > > NodeptrT
Definition: inode.hpp:31
-
std::vector< FuncArg< T > > ArgsT
Definition: funcarg.hpp:74
-
const ade::Shape & shape(void) const override
Implementation of iTensor.
Definition: functor.hpp:32
-
nargs
Definition: csv_to_png.py:101
-
void update_child(ade::FuncArg arg, size_t index) override
Implementation of iFunctor.
Definition: functor.hpp:56
- -
ade::Opcode get_opcode(void) const override
Implementation of iFunctor.
Definition: functor.hpp:44
-
std::string to_string(void) const
Return string representation of shape.
Definition: shape.hpp:146
-
Definition: constant.hpp:9
- -
FunctorNode(std::shared_ptr< Functor< T >> f)
Definition: functor.hpp:170
-
NElemT n_elems(void) const
Return the total number of elements represented by the shape.
Definition: shape.hpp:116
-
Functor(const Functor< T > &other)=delete
-
Definition: funcarg.hpp:13
-
static NodeptrT< T > to_node(ade::TensptrT tens)
Definition: inode.hpp:44
-
void uninitialize(void)
Definition: functor.hpp:124
-
void * data(void) override
Implementation of iData.
Definition: functor.hpp:82
-
Definition: inode.hpp:14
-
std::shared_ptr< iEigen< T > > EigenptrT
Definition: eigen.hpp:76
-
T * data(void) override
Definition: functor.hpp:172
-
Definition: operator.hpp:27
-
void update(void) override
Definition: functor.hpp:177
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
void initialize(void)
Definition: functor.hpp:129
-
static Functor< T > * get(ade::Opcode opcode, ArgsT< T > args)
Definition: functor.hpp:192
-
bool is_uninit(void) const
Definition: functor.hpp:119
-
Functor(ade::Opcode opcode, ade::Shape shape, ade::ArgsT args)
Definition: functor.hpp:147
-
A functor node with direct access to evaluated data.
Definition: iopfunc.hpp:20
-
ade::Opcode opcode_
Operation encoding.
Definition: functor.hpp:158
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
NElemT index(Shape shape, CoordT coord)
- -
bool compatible_after(const Shape &other, RankT idx) const
Definition: shape.hpp:134
-
Definition: shape.hpp:60
-
size_t code_
Numerical encoding of operation.
Definition: ifunctor.hpp:24
-
size_t nbytes(void) const override
Implementation of iData.
Definition: functor.hpp:114
-
Definition: functor.hpp:16
-
EigenptrT< T > out_
Definition: functor.hpp:155
-
NodeptrT< T > make_functor(ade::Opcode opcode, ArgsT< T > args)
Definition: functor.hpp:237
-
Shape shape(void) const
Return shape of tensor filtered through coordinate mapper.
Definition: funcarg.hpp:55
-
ade::TensptrT get_tensor(void) override
Definition: functor.hpp:182
-
std::string type_label(void) const override
Implementation of iData.
Definition: functor.hpp:108
-
std::string to_string(void) const override
Implementation of iTensor.
Definition: functor.hpp:38
-
ade::Shape shape_
Shape info built at construction time according to arguments.
Definition: functor.hpp:161
-
Definition: functor.hpp:168
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/ead_2ileaf_8hpp.html b/docs/ead_2ileaf_8hpp.html deleted file mode 100644 index 88fed6c31..000000000 --- a/docs/ead_2ileaf_8hpp.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Tenncor: ead/ileaf.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ileaf.hpp File Reference
-
-
-
#include "ade/ileaf.hpp"
-#include "ead/eigen.hpp"
-
-Include dependency graph for ileaf.hpp:
-
-
- - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  ead::iLeaf< T >
 
- - - -

-Namespaces

 ead
 
-
- - - - diff --git a/docs/ead_2ileaf_8hpp__dep__incl.map b/docs/ead_2ileaf_8hpp__dep__incl.map deleted file mode 100644 index 9b5f15bbb..000000000 --- a/docs/ead_2ileaf_8hpp__dep__incl.map +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/ead_2ileaf_8hpp__dep__incl.md5 b/docs/ead_2ileaf_8hpp__dep__incl.md5 deleted file mode 100644 index c81d1519a..000000000 --- a/docs/ead_2ileaf_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6ca9d8bfd8db7c5d1db04aded7cf140f \ No newline at end of file diff --git a/docs/ead_2ileaf_8hpp__dep__incl.png b/docs/ead_2ileaf_8hpp__dep__incl.png deleted file mode 100644 index 09a4df015..000000000 Binary files a/docs/ead_2ileaf_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2ileaf_8hpp__incl.map b/docs/ead_2ileaf_8hpp__incl.map deleted file mode 100644 index e03109b48..000000000 --- a/docs/ead_2ileaf_8hpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/ead_2ileaf_8hpp__incl.md5 b/docs/ead_2ileaf_8hpp__incl.md5 deleted file mode 100644 index 65d90ae08..000000000 --- a/docs/ead_2ileaf_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -023187b5596abdf6486c961c5ea9113e \ No newline at end of file diff --git a/docs/ead_2ileaf_8hpp__incl.png b/docs/ead_2ileaf_8hpp__incl.png deleted file mode 100644 index 931f4db2c..000000000 Binary files a/docs/ead_2ileaf_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2ileaf_8hpp_source.html b/docs/ead_2ileaf_8hpp_source.html deleted file mode 100644 index 817b0805d..000000000 --- a/docs/ead_2ileaf_8hpp_source.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Tenncor: ead/ileaf.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ileaf.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/ileaf.hpp"
10 
11 #include "ead/eigen.hpp"
12 
13 #ifndef EAD_ILEAF_HPP
14 #define EAD_ILEAF_HPP
15 
16 namespace ead
17 {
18 
19 template <typename T>
20 struct iLeaf : public ade::iLeaf
21 {
22  virtual ~iLeaf (void) = default;
23 
25  const ade::Shape& shape (void) const override
26  {
27  return shape_;
28  }
29 
31  void* data (void) override
32  {
33  return data_.data();
34  }
35 
37  const void* data (void) const override
38  {
39  return data_.data();
40  }
41 
43  size_t type_code (void) const override
44  {
45  return age::get_type<T>();
46  }
47 
49  std::string type_label (void) const override
50  {
51  return age::name_type(age::get_type<T>());
52  }
53 
55  size_t nbytes (void) const override
56  {
57  return sizeof(T) * shape_.n_elems();
58  }
59 
60  // todo: deprecate (with is_mutable)
61  virtual bool is_const (void) const = 0;
62 
63 protected:
66  shape_(shape) {}
67 
70 
73 };
74 
75 }
76 
77 #endif // EAD_ILEAF_HPP
size_t type_code(void) const override
Implementation of iData.
Definition: ileaf.hpp:43
-
virtual bool is_const(void) const =0
-
const ade::Shape & shape(void) const override
Implementation of iTensor.
Definition: ileaf.hpp:25
-
iLeaf(T *data, ade::Shape shape)
Definition: ileaf.hpp:64
-
virtual ~iLeaf(void)=default
-
TensMapT< T > make_tensmap(T *data, const ade::Shape &shape)
Definition: eigen.hpp:164
-
Definition: constant.hpp:9
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
NElemT n_elems(void) const
Return the total number of elements represented by the shape.
Definition: shape.hpp:116
-
TensorT< T > data_
Data Source.
Definition: ileaf.hpp:69
-
Eigen::Tensor< T, 8 > TensorT
Definition: eigen.hpp:22
-
size_t nbytes(void) const override
Implementation of iData.
Definition: ileaf.hpp:55
-
Definition: shape.hpp:60
-
ade::Shape shape_
Shape utility to avoid excessive conversion between data_.dimensions()
Definition: ileaf.hpp:72
- -
Definition: ileaf.hpp:20
- -
std::string type_label(void) const override
Implementation of iData.
Definition: ileaf.hpp:49
-
void * data(void) override
Implementation of iData.
Definition: ileaf.hpp:31
-
const void * data(void) const override
Implementation of iData.
Definition: ileaf.hpp:37
-
- - - - diff --git a/docs/ead_2parse_8hpp.html b/docs/ead_2parse_8hpp.html deleted file mode 100644 index eec97329c..000000000 --- a/docs/ead_2parse_8hpp.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -Tenncor: ead/parse.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
parse.hpp File Reference
-
-
-
#include "opt/parse.hpp"
-#include "ead/ead.hpp"
-
-Include dependency graph for parse.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Classes

struct  ead::ScalarConvr< T >
 
struct  ead::AnyConvr< T >
 
struct  ead::BuilderArg
 
struct  ead::FuncConvr< T >
 
struct  ead::GroupConvr< T >
 
struct  ead::ConverterBuilder< T >
 
- - - -

-Namespaces

 ead
 
- - - -

-Typedefs

using ead::BuilderArgsT = std::vector< BuilderArg >
 
- - - - - - - - - - - -

-Functions

static std::vector< double > ead::vectorize (::NumList *list)
 
static CoordptrT ead::coorderize (::NumList *list)
 
template<typename T >
opt::OptCtx ead::parse (std::string content)
 
template<typename T >
opt::OptCtx ead::parse_file (std::string filename)
 
-
- - - - diff --git a/docs/ead_2parse_8hpp__dep__incl.map b/docs/ead_2parse_8hpp__dep__incl.map deleted file mode 100644 index f4735f812..000000000 --- a/docs/ead_2parse_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/ead_2parse_8hpp__dep__incl.md5 b/docs/ead_2parse_8hpp__dep__incl.md5 deleted file mode 100644 index 4dec8da7e..000000000 --- a/docs/ead_2parse_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ac1f8bf3b1368e29ebd70866c09a46a8 \ No newline at end of file diff --git a/docs/ead_2parse_8hpp__dep__incl.png b/docs/ead_2parse_8hpp__dep__incl.png deleted file mode 100644 index 006b29a22..000000000 Binary files a/docs/ead_2parse_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2parse_8hpp__incl.map b/docs/ead_2parse_8hpp__incl.map deleted file mode 100644 index c8f592caf..000000000 --- a/docs/ead_2parse_8hpp__incl.map +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ead_2parse_8hpp__incl.md5 b/docs/ead_2parse_8hpp__incl.md5 deleted file mode 100644 index a37df2927..000000000 --- a/docs/ead_2parse_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -93b650621455cb4b2a80e0c4bfdd85e3 \ No newline at end of file diff --git a/docs/ead_2parse_8hpp__incl.png b/docs/ead_2parse_8hpp__incl.png deleted file mode 100644 index 1614d9634..000000000 Binary files a/docs/ead_2parse_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2parse_8hpp_source.html b/docs/ead_2parse_8hpp_source.html deleted file mode 100644 index ac59142ca..000000000 --- a/docs/ead_2parse_8hpp_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -Tenncor: ead/parse.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
parse.hpp
-
-
-Go to the documentation of this file.
1 #include "opt/parse.hpp"
2 
3 #include "ead/ead.hpp"
4 
5 #ifndef EAD_PARSE_HPP
6 #define EAD_PARSE_HPP
7 
8 namespace ead
9 {
10 
11 static std::vector<double> vectorize (::NumList* list)
12 {
13  std::vector<double> arr;
14  for (auto it = list->head_; nullptr != it; it = it->next_)
15  {
16  arr.push_back(it->val_);
17  }
18  return arr;
19 }
20 
21 static CoordptrT coorderize (::NumList* list)
22 {
23  CoordptrT out = nullptr;
24  if (nullptr == list)
25  {
26  return out;
27  }
28  std::vector<double> clist = vectorize(list);
29  if (clist.size() > 0)
30  {
31  ade::CoordT carr;
32  std::copy(clist.begin(), clist.end(), carr.begin());
33  out = std::make_shared<CoordMap>(carr, false); // todo: figure out bijectivity
34  }
35  return out;
36 }
37 
38 template <typename T>
39 struct ScalarConvr final : public opt::iConverter
40 {
41  ScalarConvr (double scalar) : scalar_(scalar) {}
42 
44  ade::Shape outshape) const override
45  {
47  outshape)->get_tensor();
48  }
49 
50  std::string to_string (void) const override
51  {
52  return fmts::to_string(scalar_);
53  }
54 
55  double scalar_;
56 };
57 
58 template <typename T>
59 struct AnyConvr final : public opt::iConverter
60 {
61  AnyConvr (std::string any_id) : any_id_(any_id) {}
62 
64  ade::Shape outshape) const override
65  {
66  const opt::CtxValT& val = estd::must_getf(ctx, any_id_,
67  "cannot find any id %s in conversion", any_id_.c_str());
68  if (val.size() != 1)
69  {
70  logs::fatal("context value is not any");
71  }
72  return *(val.begin());
73  }
74 
75  std::string to_string (void) const override
76  {
77  return any_id_;
78  }
79 
80  std::string any_id_;
81 };
82 
83 struct BuilderArg final
84 {
86  ade::CoordptrT shaper, CoordptrT coorder) :
87  arg_(arg), shaper_(shaper), coorder_(coorder)
88  {
89  if (nullptr == arg)
90  {
91  logs::fatal("created a rule argument with null argument");
92  }
93  }
94 
96 
98 
100 };
101 
102 using BuilderArgsT = std::vector<BuilderArg>;
103 
104 template <typename T>
105 struct FuncConvr final : public opt::iConverter
106 {
107  FuncConvr (std::string op, BuilderArgsT args) :
108  opcode_({op, age::get_op(op)}), args_(args) {}
109 
111  ade::Shape outshape) const override
112  {
113  ArgsT<T> args;
114  for (auto& arg : args_)
115  {
116  ade::Shape childshape = outshape;
117  if (ade::is_identity(arg.shaper_.get()))
118  {
119  childshape = ade::apply_shaper(arg.shaper_, childshape);
120  }
121  auto tens = arg.arg_->build(ctx, childshape);
122  args.push_back(FuncArg<T>(
124  arg.shaper_, arg.coorder_));
125  }
126  return make_functor(opcode_, args)->get_tensor();
127  }
128 
129  std::string to_string (void) const override
130  {
131  std::vector<std::string> args;
132  args.reserve(args_.size());
133  std::transform(args_.begin(), args_.end(),
134  std::back_inserter(args),
135  [](const BuilderArg& arg)
136  {
137  return arg.arg_->to_string();
138  });
139  return opcode_.name_ + fmts::sprintf("(%s)", fmts::join(",",
140  args.begin(), args.end()).c_str());
141  }
142 
144 
146 };
147 
148 template <typename T>
149 struct GroupConvr final : public opt::iConverter
150 {
151  GroupConvr (std::string group, BuilderArgsT args, std::string variadic) :
152  group_(group), args_(args), variadic_(variadic)
153  {
154  assert(group_ == "sum" || group_ == "prod"); // todo: generalize this for ordered-groups
155  }
156 
158  ade::Shape outshape) const override
159  {
161  for (auto& arg : args_)
162  {
163  ade::Shape childshape = outshape;
164  if (ade::is_identity(arg.shaper_.get()))
165  {
166  childshape = ade::apply_shaper(arg.shaper_, childshape);
167  }
168  args.push_back(arg.arg_->build(ctx, childshape));
169  }
170 
171  if (variadic_.size() > 0)
172  {
173  opt::CtxValT varargs = estd::try_get(
174  ctx, variadic_, opt::CtxValT());
175  args.insert(args.end(), varargs.begin(), varargs.end());
176  }
177  ead::NodesT<T> outs;
178  outs.reserve(args.size());
179  std::transform(args.begin(), args.end(),
180  std::back_inserter(outs),
181  [](ade::TensptrT tens)
182  {
183  return NodeConverters<T>::to_node(tens);
184  });
185  if (group_ == "sum")
186  {
187  return tenncor::sum(outs)->get_tensor();
188  }
189  return tenncor::prod(outs)->get_tensor();
190  }
191 
192  std::string to_string (void) const override
193  {
194  std::vector<std::string> args;
195  args.reserve(args_.size());
196  std::transform(args_.begin(), args_.end(),
197  std::back_inserter(args),
198  [](const BuilderArg& arg)
199  {
200  return arg.arg_->to_string();
201  });
202  if (variadic_.size() > 0)
203  {
204  args.push_back(".." + variadic_);
205  }
206  return fmts::sprintf("group:%s(%s)", group_.c_str(),
207  fmts::join(",", args.begin(), args.end()).c_str());
208  }
209 
210  std::string group_;
211 
213 
214  std::string variadic_;
215 };
216 
217 template <typename T>
219 {
220  opt::CstConvertF build_cconv (void) const override
221  {
222  return [](ade::iTensor* tens)
223  {
224  ade::TensptrT out = nullptr;
225  if (auto f = dynamic_cast<ade::iOperableFunc*>(tens))
226  {
227  f->update();
228  T* data = (T*) f->data();
229  out = ead::make_constant(data, tens->shape())->get_tensor();
230  }
231  return out;
232  };
233  }
234 
235  opt::ConvptrT build (const ::Subgraph* sg,
236  const opt::RulesContext& ctx) const override
237  {
238  if (NULL == sg)
239  {
240  logs::fatal("cannot make builder with null subgraph");
241  }
242  opt::ConvptrT out;
243  switch (sg->type_)
244  {
245  case SCALAR:
246  out = std::make_shared<ScalarConvr<T>>(sg->val_.scalar_);
247  break;
248  case ANY:
249  {
250  std::string symbol(sg->val_.any_);
251  if (false == estd::has(ctx.symbols_, symbol))
252  {
253  logs::fatalf("undeclared symbol '%s'", symbol.c_str());
254  }
255  out = std::make_shared<AnyConvr<T>>(symbol);
256  }
257  break;
258  case BRANCH:
259  {
260  ::Branch* branch = sg->val_.branch_;
261  if (nullptr == branch)
262  {
263  logs::fatal("subgraph ended at nullptr branch");
264  }
266  for (auto it = branch->args_->head_; nullptr != it; it = it->next_)
267  {
268  ::Arg* arg = (::Arg*) it->val_;
269  opt::ConvptrT warg = build(arg->subgraph_, ctx);
270  ade::CoordptrT shaper = this->shaperize(arg->shaper_);
271  CoordptrT coorder = ead::coorderize(arg->coorder_);
272  args.push_back(BuilderArg(warg, shaper, coorder));
273  }
274  std::string label(branch->label_);
275  if (branch->is_group_)
276  {
277  std::string variadic(branch->variadic_);
278  if (variadic.size() > 0 && false == estd::has(ctx.symbols_, variadic))
279  {
280  logs::warnf("unknown variadic %s", variadic.c_str());
281  variadic = "";
282  }
283  out = std::make_shared<GroupConvr<T>>(
284  label, args, variadic);
285  }
286  else
287  {
288  out = std::make_shared<FuncConvr<T>>(label, args);
289  }
290  }
291  break;
292  default:
293  logs::fatalf("unknown subgraph node type %d", sg->type_);
294  }
295  return out;
296  }
297 
298  ade::CoordptrT shaperize (::NumList* list) const override
299  {
300  ade::CoordptrT out = nullptr;
301  if (nullptr == list)
302  {
303  return out;
304  }
305  std::vector<double> slist = vectorize(list);
306  if (slist.size() > 0)
307  {
308  out = std::make_shared<ade::CoordMap>(
309  [&slist](ade::MatrixT m)
310  {
311  for (size_t i = 0; i < ade::mat_dim; ++i)
312  {
313  for (size_t j = 0; j < ade::mat_dim; ++j)
314  {
315  size_t index = i * ade::mat_dim + j;
316  if (index < slist.size())
317  {
318  m[i][j] = slist[index];
319  }
320  }
321  }
322  });
323  }
324  return out;
325  }
326 
327  ade::CoordptrT coorderize (::NumList* list) const override
328  {
329  return ead::coorderize(list);
330  }
331 };
332 
333 template <typename T>
334 opt::OptCtx parse (std::string content)
335 {
336  static ConverterBuilder<T> builder;
337  return opt::parse(content, builder);
338 }
339 
340 template <typename T>
341 opt::OptCtx parse_file (std::string filename)
342 {
343  static ConverterBuilder<T> builder;
344  return opt::parse_file(filename, builder);
345 }
346 
347 }
348 
349 #endif // EAD_PARSE_HPP
std::set< ade::TensptrT > CtxValT
Definition: candidate.hpp:14
-
std::unordered_set< std::string > symbols_
Definition: parse.hpp:12
-
Definition: inode.hpp:40
-
FuncConvr(std::string op, BuilderArgsT args)
Definition: parse.hpp:107
-
args
Definition: csv_to_png.py:105
-
AnyConvr(std::string any_id)
Definition: parse.hpp:61
-
static CoordptrT coorderize(::NumList *list)
Definition: parse.hpp:21
-
Encoding of operation.
Definition: ifunctor.hpp:18
-
NodeptrT< T > make_constant_scalar(T scalar, ade::Shape shape)
Definition: constant.hpp:111
-
opt::ConvptrT build(const ::Subgraph *sg, const opt::RulesContext &ctx) const override
Definition: parse.hpp:235
-
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
std::vector< FuncArg< T > > ArgsT
Definition: funcarg.hpp:74
-
Definition: def.h:36
-
CoordptrT coorder_
Definition: parse.hpp:99
-
struct NumNode * head_
Definition: list.h:15
-
int is_group_
Definition: def.h:10
-
std::string group_
Definition: parse.hpp:210
-
ade::CoordptrT shaperize(::NumList *list) const override
Definition: parse.hpp:298
-
std::string to_string(void) const override
Definition: parse.hpp:75
-
ade::TensptrT build(const opt::ContexT &ctx, ade::Shape outshape) const override
Definition: parse.hpp:110
-
Definition: constant.hpp:9
-
struct NumNode * next_
Definition: list.h:9
-
opt::OptCtx parse(std::string content)
Definition: parse.hpp:334
-
opt::CstConvertF build_cconv(void) const override
Definition: parse.hpp:220
-
GroupConvr(std::string group, BuilderArgsT args, std::string variadic)
Definition: parse.hpp:151
-
Definition: list.h:13
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Definition: def.h:20
-
Definition: parse.hpp:19
-
std::string variadic_
Definition: parse.hpp:214
-
std::function< ade::TensptrT(ade::iTensor *)> CstConvertF
Definition: optimize.hpp:10
-
struct NumList * shaper_
Definition: def.h:39
-
struct PtrList * args_
Definition: def.h:11
-
Definition: funcarg.hpp:13
-
static NodeptrT< T > to_node(ade::TensptrT tens)
Definition: inode.hpp:44
-
Definition: optimize.hpp:12
-
BuilderArgsT args_
Definition: parse.hpp:145
-
std::vector< BuilderArg > BuilderArgsT
Definition: parse.hpp:102
-
Definition: def.h:8
-
std::map< std::string, CtxValT > ContexT
Definition: candidate.hpp:16
-
Definition: parse.hpp:59
-
ade::TensptrT build(const opt::ContexT &ctx, ade::Shape outshape) const override
Definition: parse.hpp:43
-
ade::TensptrT build(const opt::ContexT &ctx, ade::Shape outshape) const override
Definition: parse.hpp:157
-
struct NumList * coorder_
Definition: def.h:40
-
ade::TensptrT build(const opt::ContexT &ctx, ade::Shape outshape) const override
Definition: parse.hpp:63
-
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Definition: def.h:19
-
NodeptrT< T > make_constant(T *data, ade::Shape shape)
Definition: constant.hpp:121
-
ade::Opcode opcode_
Definition: parse.hpp:143
-
std::shared_ptr< iConverter > ConvptrT
Definition: iconverter.hpp:23
-
char variadic_[32]
Definition: def.h:13
-
OptCtx parse(std::string content, const iConverterBuilder &builder)
-
Definition: parse.hpp:39
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
ade::CoordptrT coorderize(::NumList *list) const override
Definition: parse.hpp:327
-
Definition: parse.hpp:9
-
Shape apply_shaper(const CoordptrT &shaper, Shape inshape)
-
BuilderArg(opt::ConvptrT arg, ade::CoordptrT shaper, CoordptrT coorder)
Definition: parse.hpp:85
-
const RankT mat_dim
Number of rows and columns for the homogeneous matrix.
Definition: matops.hpp:22
- -
Definition: parse.hpp:83
-
BuilderArgsT args_
Definition: parse.hpp:212
-
opt::ConvptrT arg_
Definition: parse.hpp:95
-
NElemT index(Shape shape, CoordT coord)
-
ade::CoordptrT shaper_
Definition: parse.hpp:97
-
Definition: shape.hpp:60
-
std::string any_id_
Definition: parse.hpp:80
-
std::array< CDimT, rank_cap > CoordT
Definition: shape.hpp:54
-
OptCtx parse_file(std::string filename, const iConverterBuilder &builder)
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
-
double scalar_
Definition: parse.hpp:55
-
std::string to_string(void) const override
Definition: parse.hpp:50
-
ScalarConvr(double scalar)
Definition: parse.hpp:41
- -
Definition: iconverter.hpp:13
-
Definition: parse.hpp:149
-
struct PtrNode * head_
Definition: list.h:37
-
NodeptrT< T > make_functor(ade::Opcode opcode, ArgsT< T > args)
Definition: functor.hpp:237
-
char label_[32]
Definition: def.h:12
-
static std::vector< double > vectorize(::NumList *list)
Definition: parse.hpp:11
-
struct Subgraph * subgraph_
Definition: def.h:38
-
Definition: parse.hpp:105
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:49
-
Definition: parse.hpp:218
-
opt::OptCtx parse_file(std::string filename)
Definition: parse.hpp:341
-
struct PtrNode * next_
Definition: list.h:31
-
Definition: def.h:18
-
std::string to_string(void) const override
Definition: parse.hpp:129
-
std::string to_string(void) const override
Definition: parse.hpp:192
-
std::vector< NodeptrT< T > > NodesT
Definition: inode.hpp:34
-
bool is_identity(iCoordMap *coorder)
Checks if the coord mapper is an identity mapper.
-
- - - - diff --git a/docs/ead_2session_8hpp.html b/docs/ead_2session_8hpp.html deleted file mode 100644 index 990feea8a..000000000 --- a/docs/ead_2session_8hpp.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -Tenncor: ead/session.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
session.hpp File Reference
-
-
-
#include <list>
-#include <unordered_set>
-#include "ade/traveler.hpp"
-#include "opt/optimize.hpp"
-#include "ead/constant.hpp"
-#include "ead/functor.hpp"
-
-Include dependency graph for session.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  ead::iSession
 
struct  ead::SizeT
 
struct  ead::Session
 
- - - -

-Namespaces

 ead
 
- - - -

-Typedefs

using ead::TensSetT = std::unordered_set< ade::iTensor * >
 
-
- - - - diff --git a/docs/ead_2session_8hpp__dep__incl.map b/docs/ead_2session_8hpp__dep__incl.map deleted file mode 100644 index 3653dad5a..000000000 --- a/docs/ead_2session_8hpp__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/ead_2session_8hpp__dep__incl.md5 b/docs/ead_2session_8hpp__dep__incl.md5 deleted file mode 100644 index adf9bd3e3..000000000 --- a/docs/ead_2session_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -560ec1eb12cde2a07919602c6192315c \ No newline at end of file diff --git a/docs/ead_2session_8hpp__dep__incl.png b/docs/ead_2session_8hpp__dep__incl.png deleted file mode 100644 index 2c3a037a5..000000000 Binary files a/docs/ead_2session_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_2session_8hpp__incl.map b/docs/ead_2session_8hpp__incl.map deleted file mode 100644 index 440c6925d..000000000 --- a/docs/ead_2session_8hpp__incl.map +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ead_2session_8hpp__incl.md5 b/docs/ead_2session_8hpp__incl.md5 deleted file mode 100644 index 079db7b5a..000000000 --- a/docs/ead_2session_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -613ada3454bc57aeb3a598227910ca7b \ No newline at end of file diff --git a/docs/ead_2session_8hpp__incl.png b/docs/ead_2session_8hpp__incl.png deleted file mode 100644 index a45540363..000000000 Binary files a/docs/ead_2session_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_2session_8hpp_source.html b/docs/ead_2session_8hpp_source.html deleted file mode 100644 index 4f7c90dff..000000000 --- a/docs/ead_2session_8hpp_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Tenncor: ead/session.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
session.hpp
-
-
-Go to the documentation of this file.
1 #include <list>
2 #include <unordered_set>
3 
4 #include "ade/traveler.hpp"
5 
6 #include "opt/optimize.hpp"
7 
8 #include "ead/constant.hpp"
9 #include "ead/functor.hpp"
10 
11 #ifndef EAD_SESSION_HPP
12 #define EAD_SESSION_HPP
13 
14 namespace ead
15 {
16 
17 using TensSetT = std::unordered_set<ade::iTensor*>;
18 
19 struct iSession
20 {
21  virtual ~iSession (void) = default;
22 
23  virtual void track (ade::TensT roots) = 0;
24 
28  virtual void update (TensSetT updated = {}, TensSetT ignores = {}) = 0;
29 
30  virtual void update_target (TensSetT target, TensSetT updated = {}) = 0;
31 };
32 
33 struct SizeT
34 {
35  size_t d = 0;
36 
37  operator size_t() const { return d; }
38 };
39 
40 // for each leaf node, iteratively update the parents
41 // don't update parent node if it is part of ignored set
42 struct Session final : public iSession
43 {
44  void track (ade::TensT roots) override
45  {
46  tracked_.insert(roots.begin(), roots.end());
47  ade::ParentFinder pfinder;
48  for (ade::TensptrT& root : roots)
49  {
50  root->accept(pfinder);
51  root->accept(stat_);
52  }
53  auto& statmap = stat_.graphsize_;
54 
55  std::list<ade::iOperableFunc*> all_ops;
56  for (auto& statpair : statmap)
57  {
58  if (0 < statpair.second.upper_)
59  {
60  // ensure we only track operable functors
61  auto op = dynamic_cast<ade::iOperableFunc*>(statpair.first);
62  if (nullptr == op)
63  {
64  logs::fatalf("cannot track non-operable functor %s",
65  statpair.first->to_string().c_str());
66  }
67  all_ops.push_back(op);
68  }
69  }
70  all_ops.sort(
71  [&statmap](ade::iOperableFunc* a, ade::iOperableFunc* b)
72  {
73  return statmap[a].upper_ < statmap[b].upper_;
74  });
75  requirements_.clear();
76  for (ade::iOperableFunc* op : all_ops)
77  {
78  auto& args = op->get_children();
79  TensSetT unique_children;
80  for (const ade::FuncArg& arg : args)
81  {
82  auto tens = arg.get_tensor().get();
83  if (0 < statmap[tens].upper_) // ignore leaves
84  {
85  unique_children.emplace(tens);
86  }
87  }
88  requirements_.push_back({op, unique_children.size()});
89  }
90 
91  for (auto& assocs : pfinder.parents_)
92  {
93  for (auto& parent_pair : assocs.second)
94  {
95  parents_[assocs.first].emplace(
96  static_cast<ade::iOperableFunc*>(parent_pair.first));
97  }
98  }
99  }
100 
101  void update (TensSetT updated = {}, TensSetT ignores = {}) override
102  {
103  std::unordered_map<ade::iOperableFunc*,SizeT> fulfilments;
104  for (ade::iTensor* unodes : updated)
105  {
106  auto& node_parents = parents_[unodes];
107  for (auto& node_parent : node_parents)
108  {
109  ++fulfilments[node_parent].d;
110  }
111  }
112  // ignored nodes and its dependers will never fulfill requirement
113  for (auto& op : requirements_)
114  {
115  // fulfilled and not ignored
116  if (fulfilments[op.first].d >= op.second &&
117  false == estd::has(ignores, op.first))
118  {
119  op.first->update();
120  auto& op_parents = parents_[op.first];
121  for (auto& op_parent : op_parents)
122  {
123  ++fulfilments[op_parent].d;
124  }
125  }
126  }
127  }
128 
129  void update_target (TensSetT target, TensSetT updated = {}) override
130  {
131  ade::OnceTraveler targetted;
132  for (auto& tens : target)
133  {
134  tens->accept(targetted);
135  }
136  std::unordered_map<ade::iOperableFunc*,SizeT> fulfilments;
137  for (ade::iTensor* unodes : updated)
138  {
139  auto& node_parents = parents_[unodes];
140  for (auto& node_parent : node_parents)
141  {
142  ++fulfilments[node_parent].d;
143  }
144  }
145  // ignored nodes and its dependers will never fulfill requirement
146  for (auto& op : requirements_)
147  {
148  // is relevant to target, is fulfilled and not ignored
149  if (estd::has(targetted.visited_, op.first) &&
150  fulfilments[op.first].d >= op.second)
151  {
152  op.first->update();
153  auto& op_parents = parents_[op.first];
154  for (auto& op_parent : op_parents)
155  {
156  ++fulfilments[op_parent].d;
157  }
158  }
159  }
160  }
161 
162  void optimize (const opt::OptCtx& rules)
163  {
164  ade::TensT tracked(tracked_.begin(), tracked_.end());
165  opt::optimize(tracked, rules);
166  stat_.graphsize_.clear();
167  parents_.clear();
168  track(tracked);
169  }
170 
171  std::unordered_set<ade::TensptrT> tracked_;
172 
174 
175  std::unordered_map<ade::iTensor*,
176  std::unordered_set<ade::iOperableFunc*>> parents_;
177 
178  std::vector<std::pair<ade::iOperableFunc*,size_t>> requirements_; // todo: test minimal requirements
179 };
180 
181 }
182 
183 #endif // EAD_SESSION_HPP
std::unordered_map< ade::iTensor *, std::unordered_set< ade::iOperableFunc * > > parents_
Definition: session.hpp:176
-
Definition: session.hpp:42
-
args
Definition: csv_to_png.py:105
-
void optimize(const opt::OptCtx &rules)
Definition: session.hpp:162
-
void update(TensSetT updated={}, TensSetT ignores={}) override
Definition: session.hpp:101
-
Extremely generic traveler that visits every node in the graph once.
Definition: traveler.hpp:22
- -
virtual void update_target(TensSetT target, TensSetT updated={})=0
-
std::unordered_set< iTensor * > visited_
Definition: traveler.hpp:57
-
std::unordered_set< ade::iTensor * > TensSetT
Definition: session.hpp:17
-
Definition: session.hpp:19
-
Definition: constant.hpp:9
- -
Traveler that maps each tensor to its subtree&#39;s maximum depth.
Definition: traveler.hpp:61
-
Definition: optimize.hpp:12
-
virtual void update(TensSetT updated={}, TensSetT ignores={})=0
-
std::unordered_map< iTensor *, ParentMapT > parents_
Tracks child to parents relationship.
Definition: traveler.hpp:194
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
std::unordered_set< ade::TensptrT > tracked_
Definition: session.hpp:171
-
virtual void track(ade::TensT roots)=0
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
A functor node with direct access to evaluated data.
Definition: iopfunc.hpp:20
-
void track(ade::TensT roots) override
Definition: session.hpp:44
- -
std::vector< std::pair< ade::iOperableFunc *, size_t > > requirements_
Definition: session.hpp:178
-
Definition: session.hpp:33
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
-
Traveler that for each child tracks the relationship to all parents.
Definition: traveler.hpp:166
-
std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
Definition: traveler.hpp:109
-
ade::TensT optimize(ade::TensT roots, const OptCtx &opts)
-
ade::GraphStat stat_
Definition: session.hpp:173
-
void update_target(TensSetT target, TensSetT updated={}) override
Definition: session.hpp:129
-
size_t d
Definition: session.hpp:35
-
virtual ~iSession(void)=default
- -
- - - - diff --git a/docs/ead_2src_2coord_8cpp.html b/docs/ead_2src_2coord_8cpp.html deleted file mode 100644 index 951380770..000000000 --- a/docs/ead_2src_2coord_8cpp.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: ead/src/coord.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
coord.cpp File Reference
-
-
-
#include "ead/coord.hpp"
-
-Include dependency graph for coord.cpp:
-
-
- - - - - - -
-
- - - - diff --git a/docs/ead_2src_2coord_8cpp__incl.map b/docs/ead_2src_2coord_8cpp__incl.map deleted file mode 100644 index 744e8ed6e..000000000 --- a/docs/ead_2src_2coord_8cpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/ead_2src_2coord_8cpp__incl.md5 b/docs/ead_2src_2coord_8cpp__incl.md5 deleted file mode 100644 index f02474d0d..000000000 --- a/docs/ead_2src_2coord_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -293c3455d00a8b42615f9bf7c921da26 \ No newline at end of file diff --git a/docs/ead_2src_2coord_8cpp__incl.png b/docs/ead_2src_2coord_8cpp__incl.png deleted file mode 100644 index eb8d26207..000000000 Binary files a/docs/ead_2src_2coord_8cpp__incl.png and /dev/null differ diff --git a/docs/ead_8cpp.html b/docs/ead_8cpp.html deleted file mode 100644 index dc6bdd164..000000000 --- a/docs/ead_8cpp.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - -Tenncor: ead/python/ead.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ead.cpp File Reference
-
-
-
#include "pybind11/pybind11.h"
-#include "pybind11/numpy.h"
-#include "pybind11/stl.h"
-#include "ade/ade.hpp"
-#include "ead/generated/api.hpp"
-#include "ead/generated/pyapi.hpp"
-#include "ead/grader.hpp"
-#include "ead/constant.hpp"
-#include "ead/variable.hpp"
-#include "ead/functor.hpp"
-#include "ead/session.hpp"
-#include "ead/random.hpp"
-#include "ead/parse.hpp"
-
-Include dependency graph for ead.cpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -

-Namespaces

 pyead
 
- - - - - - - - - - - - -

-Functions

ade::Shape pyead::p2cshape (std::vector< py::ssize_t > &pyshape)
 
std::vector< ade::DimTpyead::c2pshape (const ade::Shape &cshape)
 
template<typename T >
py::array pyead::typedata_to_array (ead::iNode< PybindT > *tnode, py::dtype dtype)
 
std::vector< PybindT > pyead::arr2vec (ade::Shape &outshape, py::array data)
 
 PYBIND11_MODULE (ead, m)
 
-

Function Documentation

- -

◆ PYBIND11_MODULE()

- -
-
- - - - - - - - - - - - - - - - - - -
PYBIND11_MODULE (ead ,
 
)
-
- -
-
-
- - - - diff --git a/docs/ead_8cpp__incl.map b/docs/ead_8cpp__incl.map deleted file mode 100644 index 31b281b5c..000000000 --- a/docs/ead_8cpp__incl.map +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ead_8cpp__incl.md5 b/docs/ead_8cpp__incl.md5 deleted file mode 100644 index f33ba89f3..000000000 --- a/docs/ead_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b7be189cdc651eca9da73afb0c269aa4 \ No newline at end of file diff --git a/docs/ead_8cpp__incl.png b/docs/ead_8cpp__incl.png deleted file mode 100644 index c7bfe8552..000000000 Binary files a/docs/ead_8cpp__incl.png and /dev/null differ diff --git a/docs/ead_8hpp.html b/docs/ead_8hpp.html deleted file mode 100644 index 4b6c494b5..000000000 --- a/docs/ead_8hpp.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -Tenncor: ead/ead.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ead.hpp File Reference
-
-
-
#include "ead/grader.hpp"
-#include "ead/serialize.hpp"
-#include "ead/session.hpp"
-
-Include dependency graph for ead.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - -
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/ead_8hpp__dep__incl.map b/docs/ead_8hpp__dep__incl.map deleted file mode 100644 index 5672f99fe..000000000 --- a/docs/ead_8hpp__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/ead_8hpp__dep__incl.md5 b/docs/ead_8hpp__dep__incl.md5 deleted file mode 100644 index 0d878ab68..000000000 --- a/docs/ead_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -bcc35090db420c1371565b5aefcdb360 \ No newline at end of file diff --git a/docs/ead_8hpp__dep__incl.png b/docs/ead_8hpp__dep__incl.png deleted file mode 100644 index 5b9bcd2c8..000000000 Binary files a/docs/ead_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ead_8hpp__incl.map b/docs/ead_8hpp__incl.map deleted file mode 100644 index 5cdddbed0..000000000 --- a/docs/ead_8hpp__incl.map +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ead_8hpp__incl.md5 b/docs/ead_8hpp__incl.md5 deleted file mode 100644 index dfd88872f..000000000 --- a/docs/ead_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -73691998a4cdecf4a9804754bd6d8e21 \ No newline at end of file diff --git a/docs/ead_8hpp__incl.png b/docs/ead_8hpp__incl.png deleted file mode 100644 index abacf065b..000000000 Binary files a/docs/ead_8hpp__incl.png and /dev/null differ diff --git a/docs/ead_8hpp_source.html b/docs/ead_8hpp_source.html deleted file mode 100644 index cd075cb40..000000000 --- a/docs/ead_8hpp_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Tenncor: ead/ead.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ead.hpp
-
- - - - - diff --git a/docs/eigen_8cpp.html b/docs/eigen_8cpp.html deleted file mode 100644 index a92a57737..000000000 --- a/docs/eigen_8cpp.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: ead/src/eigen.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
eigen.cpp File Reference
-
-
-
#include "ead/eigen.hpp"
-
-Include dependency graph for eigen.cpp:
-
-
- - - - -
-
- - - - diff --git a/docs/eigen_8cpp__incl.map b/docs/eigen_8cpp__incl.map deleted file mode 100644 index e60511ba2..000000000 --- a/docs/eigen_8cpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/eigen_8cpp__incl.md5 b/docs/eigen_8cpp__incl.md5 deleted file mode 100644 index 688c88705..000000000 --- a/docs/eigen_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9f9a31ae32e30e960a9b03aaea352c04 \ No newline at end of file diff --git a/docs/eigen_8cpp__incl.png b/docs/eigen_8cpp__incl.png deleted file mode 100644 index 6fa5e3822..000000000 Binary files a/docs/eigen_8cpp__incl.png and /dev/null differ diff --git a/docs/eigen_8hpp.html b/docs/eigen_8hpp.html deleted file mode 100644 index ffec4af43..000000000 --- a/docs/eigen_8hpp.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - -Tenncor: ead/eigen.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
eigen.hpp File Reference
-
-
-
#include "Eigen/Core"
-#include "unsupported/Eigen/CXX11/Tensor"
-#include "ade/shape.hpp"
-#include "ead/generated/dtype.hpp"
-
-Include dependency graph for eigen.hpp:
-
-
- - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  ead::iEigen< T >
 
struct  ead::EigenTensOp< T, EigenSource, EigenArgs >
 
struct  ead::EigenMatOp< T, EigenSource, EigenArgs >
 
- - - -

-Namespaces

 ead
 
- - - - - - - - - - - - - - - - - - -

-Typedefs

using ead::DimensionsT = std::array< Eigen::Index, 8 >
 
template<typename T >
using ead::MatrixT = Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >
 
template<typename T >
using ead::TensorT = Eigen::Tensor< T, 8 >
 
template<typename T >
using ead::TensMapT = Eigen::TensorMap< TensorT< T > >
 
template<typename T >
using ead::MatMapT = Eigen::Map< MatrixT< T > >
 
template<typename T >
using ead::EigenptrT = std::shared_ptr< iEigen< T > >
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
MatMapT< T > ead::tens_to_matmap (TensorT< T > &tens)
 
template<typename T >
MatMapT< T > ead::mat_to_matmap (MatrixT< T > &mat)
 
template<typename T >
MatMapT< T > ead::tensmap_to_matmap (TensMapT< T > &tens)
 
template<typename T >
TensMapT< T > ead::mat_to_tensmap (MatrixT< T > &mat)
 
template<typename T >
TensMapT< T > ead::tens_to_tensmap (TensorT< T > &tens)
 
template<typename T , typename EigenSource , typename EigenArgs >
EigenptrT< T > ead::make_eigentensor (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
 
template<typename T , typename EigenSource , typename EigenArgs >
EigenptrT< T > ead::make_eigenmatrix (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
 
template<typename T >
TensorT< T > ead::make_tensor (const ade::Shape &shape)
 
template<typename T >
MatMapT< T > ead::make_matmap (T *data, const ade::Shape &shape)
 
template<typename T >
TensMapT< T > ead::make_tensmap (T *data, const ade::Shape &shape)
 
template<typename T >
ade::Shape ead::get_shape (const TensorT< T > &tens)
 
template<typename T >
ade::Shape ead::get_shape (const TensMapT< T > &tens)
 
DimensionsT ead::shape_convert (ade::Shape shape)
 
-
- - - - diff --git a/docs/eigen_8hpp__dep__incl.map b/docs/eigen_8hpp__dep__incl.map deleted file mode 100644 index f96124965..000000000 --- a/docs/eigen_8hpp__dep__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/eigen_8hpp__dep__incl.md5 b/docs/eigen_8hpp__dep__incl.md5 deleted file mode 100644 index 0716507fc..000000000 --- a/docs/eigen_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a7e339a4cf59c98c4bd4aa510e194597 \ No newline at end of file diff --git a/docs/eigen_8hpp__dep__incl.png b/docs/eigen_8hpp__dep__incl.png deleted file mode 100644 index 4e2797011..000000000 Binary files a/docs/eigen_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/eigen_8hpp__incl.map b/docs/eigen_8hpp__incl.map deleted file mode 100644 index 1cc243606..000000000 --- a/docs/eigen_8hpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/eigen_8hpp__incl.md5 b/docs/eigen_8hpp__incl.md5 deleted file mode 100644 index f0c7b4b37..000000000 --- a/docs/eigen_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -cb49852022efd349a6fbe93217171a04 \ No newline at end of file diff --git a/docs/eigen_8hpp__incl.png b/docs/eigen_8hpp__incl.png deleted file mode 100644 index 406bd5aba..000000000 Binary files a/docs/eigen_8hpp__incl.png and /dev/null differ diff --git a/docs/eigen_8hpp_source.html b/docs/eigen_8hpp_source.html deleted file mode 100644 index 077fa2f2a..000000000 --- a/docs/eigen_8hpp_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Tenncor: ead/eigen.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
eigen.hpp
-
-
-Go to the documentation of this file.
1 #include "Eigen/Core"
2 #include "unsupported/Eigen/CXX11/Tensor"
3 
4 #include "ade/shape.hpp"
5 
6 #include "ead/generated/dtype.hpp"
7 
8 #ifndef EAD_EIGEN_HPP
9 #define EAD_EIGEN_HPP
10 
11 namespace ead
12 {
13 
14 // eigen shape
15 using DimensionsT = std::array<Eigen::Index,8>;
16 
17 // 4 base eigen types
18 template <typename T>
19 using MatrixT = Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor>;
20 
21 template <typename T>
22 using TensorT = Eigen::Tensor<T,8>;
23 
24 template <typename T>
25 using TensMapT = Eigen::TensorMap<TensorT<T>>;
26 
27 template <typename T>
28 using MatMapT = Eigen::Map<MatrixT<T>>;
29 
30 // conversions between 4 base eigen types
31 template <typename T>
33 {
34  return MatMapT<T>(tens.data(),
35  tens.dimension(1), tens.dimension(0));
36 }
37 
38 template <typename T>
40 {
41  return MatMapT<T>(mat.data(), mat.rows(), mat.cols());
42 }
43 
44 template <typename T>
46 {
47  return MatMapT<T>(tens.data(),
48  tens.dimension(1), tens.dimension(0));
49 }
50 
51 template <typename T>
53 {
54  return TensMapT<T>(mat.data(),
55  mat.cols(), mat.rows(), 1,1,1,1,1,1);
56 }
57 
58 template <typename T>
60 {
61  return TensMapT<T>(tens.data(), tens.dimensions());
62 }
63 
64 // generic eigen bridge wrapper
65 template <typename T>
66 struct iEigen
67 {
68  virtual ~iEigen (void) = default;
69 
70  virtual void assign (void) = 0;
71 
72  virtual T* get_ptr (void) = 0;
73 };
74 
75 template <typename T>
76 using EigenptrT = std::shared_ptr<iEigen<T>>;
77 
78 template <typename T, typename EigenSource, typename EigenArgs>
79 struct EigenTensOp final : public iEigen<T>
80 {
82  std::function<EigenSource(EigenArgs&)> make_base, EigenArgs args) :
83  args_(args), tensorbase_(make_base(args_)), data_(dims) {}
84 
85  void assign (void) override
86  {
87  data_ = tensorbase_.reshape(data_.dimensions());
88  }
89 
90  T* get_ptr (void) override
91  {
92  return data_.data();
93  }
94 
95  EigenArgs args_;
96 
97  EigenSource tensorbase_;
98 
100 };
101 
102 template <typename T, typename EigenSource, typename EigenArgs>
103 struct EigenMatOp final : public iEigen<T>
104 {
106  std::function<EigenSource(EigenArgs&)> make_base, EigenArgs args) :
107  args_(args), matrixbase_(make_base(args_)),
108  data_(dims.at(1), dims.at(0)) {}
109 
110  void assign (void) override
111  {
112  data_ = matrixbase_;
113  }
114 
115  T* get_ptr (void) override
116  {
117  return data_.data();
118  }
119 
120  EigenArgs args_;
121 
122  EigenSource matrixbase_;
123 
125 };
126 
127 template <typename T, typename EigenSource, typename EigenArgs>
129  std::function<EigenSource(EigenArgs&)> make_base, EigenArgs args)
130 {
131  return std::make_shared<EigenTensOp<T,EigenSource,EigenArgs>>(
132  dims, make_base, args);
133 }
134 
135 template <typename T, typename EigenSource, typename EigenArgs>
137  std::function<EigenSource(EigenArgs&)> make_base, EigenArgs args)
138 {
139  return std::make_shared<EigenMatOp<T,EigenSource,EigenArgs>>(
140  dims, make_base, args);
141 }
142 
143 template <typename T>
144 inline TensorT<T> make_tensor (const ade::Shape& shape)
145 {
146  std::array<Eigen::Index,ade::rank_cap> slist;
147  std::copy(shape.begin(), shape.end(), slist.begin());
148  TensorT<T> out(slist);
149  out.setZero();
150  return out;
151 }
152 
153 template <typename T>
154 inline MatMapT<T> make_matmap (T* data, const ade::Shape& shape)
155 {
156  if (nullptr == data)
157  {
158  logs::fatal("cannot get matmap from nullptr");;
159  }
160  return MatMapT<T>(data, shape.at(1), shape.at(0));
161 }
162 
163 template <typename T>
164 inline TensMapT<T> make_tensmap (T* data, const ade::Shape& shape)
165 {
166  std::array<Eigen::Index,ade::rank_cap> slist;
167  std::copy(shape.begin(), shape.end(), slist.begin());
168  if (nullptr == data)
169  {
170  logs::fatal("cannot get tensmap from nullptr");;
171  }
172  return TensMapT<T>(data, slist);
173 }
174 
175 template <typename T>
177 {
178  auto slist = tens.dimensions();
179  return ade::Shape(std::vector<ade::DimT>(slist.begin(), slist.end()));
180 }
181 
182 template <typename T>
184 {
185  auto slist = tens.dimensions();
186  return ade::Shape(std::vector<ade::DimT>(slist.begin(), slist.end()));
187 }
188 
190 
191 }
192 
193 #endif // EAD_EIGEN_HPP
TensMapT< T > tens_to_tensmap(TensorT< T > &tens)
Definition: eigen.hpp:59
-
EigenMatOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:105
-
ade::Shape get_shape(const TensorT< T > &tens)
Definition: eigen.hpp:176
-
args
Definition: csv_to_png.py:105
-
T * get_ptr(void) override
Definition: eigen.hpp:90
-
DimT at(RankT idx) const
Return DimT element at idx for any index in range [0:rank_cap)
Definition: shape.hpp:106
-
TensMapT< T > make_tensmap(T *data, const ade::Shape &shape)
Definition: eigen.hpp:164
-
void assign(void) override
Definition: eigen.hpp:85
-
EigenptrT< T > make_eigentensor(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:128
-
Definition: constant.hpp:9
-
virtual ~iEigen(void)=default
-
std::array< Eigen::Index, 8 > DimensionsT
Definition: eigen.hpp:15
-
iterator end(void)
Return end iterator of internal array.
Definition: shape.hpp:160
-
EigenTensOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:81
-
TensMapT< T > mat_to_tensmap(MatrixT< T > &mat)
Definition: eigen.hpp:52
-
MatMapT< T > mat_to_matmap(MatrixT< T > &mat)
Definition: eigen.hpp:39
-
Eigen::TensorMap< TensorT< T > > TensMapT
Definition: eigen.hpp:25
-
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixT
Definition: eigen.hpp:19
-
Eigen::Tensor< T, 8 > TensorT
Definition: eigen.hpp:22
-
virtual void assign(void)=0
-
iterator begin(void)
Return begin iterator of internal array.
Definition: shape.hpp:154
-
MatMapT< T > make_matmap(T *data, const ade::Shape &shape)
Definition: eigen.hpp:154
-
std::shared_ptr< iEigen< T > > EigenptrT
Definition: eigen.hpp:76
- -
Definition: eigen.hpp:66
-
Definition: eigen.hpp:103
-
DimensionsT shape_convert(ade::Shape shape)
-
MatrixT< T > data_
Definition: eigen.hpp:124
-
T * get_ptr(void) override
Definition: eigen.hpp:115
-
Definition: shape.hpp:60
-
EigenSource tensorbase_
Definition: eigen.hpp:97
-
MatMapT< T > tens_to_matmap(TensorT< T > &tens)
Definition: eigen.hpp:32
-
EigenArgs args_
Definition: eigen.hpp:95
-
void assign(void) override
Definition: eigen.hpp:110
-
MatMapT< T > tensmap_to_matmap(TensMapT< T > &tens)
Definition: eigen.hpp:45
-
TensorT< T > make_tensor(const ade::Shape &shape)
Definition: eigen.hpp:144
-
EigenArgs args_
Definition: eigen.hpp:120
-
EigenSource matrixbase_
Definition: eigen.hpp:122
-
Definition: eigen.hpp:79
-
TensorT< T > data_
Definition: eigen.hpp:99
-
virtual T * get_ptr(void)=0
-
Eigen::Map< MatrixT< T > > MatMapT
Definition: eigen.hpp:28
-
EigenptrT< T > make_eigenmatrix(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
Definition: eigen.hpp:136
-
- - - - diff --git a/docs/files.html b/docs/files.html deleted file mode 100644 index 3695535a2..000000000 --- a/docs/files.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Tenncor: File List - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
File List
-
- - - - - diff --git a/docs/folderclosed.png b/docs/folderclosed.png deleted file mode 100644 index bb8ab35ed..000000000 Binary files a/docs/folderclosed.png and /dev/null differ diff --git a/docs/folderopen.png b/docs/folderopen.png deleted file mode 100644 index d6c7f676a..000000000 Binary files a/docs/folderopen.png and /dev/null differ diff --git a/docs/funcarg_8cpp.html b/docs/funcarg_8cpp.html deleted file mode 100644 index d35e2bedd..000000000 --- a/docs/funcarg_8cpp.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Tenncor: ade/src/funcarg.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
funcarg.cpp File Reference
-
-
-
#include "ade/funcarg.hpp"
-
-Include dependency graph for funcarg.cpp:
-
-
- - - - - - - -
-
- - - - diff --git a/docs/funcarg_8cpp__incl.map b/docs/funcarg_8cpp__incl.map deleted file mode 100644 index 3f8548e3a..000000000 --- a/docs/funcarg_8cpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/funcarg_8cpp__incl.md5 b/docs/funcarg_8cpp__incl.md5 deleted file mode 100644 index 875de5b2a..000000000 --- a/docs/funcarg_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e43c38270135a551b2d8dd0812e30cfd \ No newline at end of file diff --git a/docs/funcarg_8cpp__incl.png b/docs/funcarg_8cpp__incl.png deleted file mode 100644 index f6452922d..000000000 Binary files a/docs/funcarg_8cpp__incl.png and /dev/null differ diff --git a/docs/functions.html b/docs/functions.html deleted file mode 100644 index 76d75d06c..000000000 --- a/docs/functions.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/functions_0x7e.html b/docs/functions_0x7e.html deleted file mode 100644 index d8d2c2cb3..000000000 --- a/docs/functions_0x7e.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- ~ -

-
- - - - diff --git a/docs/functions_b.html b/docs/functions_b.html deleted file mode 100644 index bb0e2c0e4..000000000 --- a/docs/functions_b.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- b -

-
- - - - diff --git a/docs/functions_c.html b/docs/functions_c.html deleted file mode 100644 index 052c9476e..000000000 --- a/docs/functions_c.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- c -

-
- - - - diff --git a/docs/functions_d.html b/docs/functions_d.html deleted file mode 100644 index 583d8127f..000000000 --- a/docs/functions_d.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- d -

-
- - - - diff --git a/docs/functions_e.html b/docs/functions_e.html deleted file mode 100644 index 38d52140b..000000000 --- a/docs/functions_e.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- e -

-
- - - - diff --git a/docs/functions_f.html b/docs/functions_f.html deleted file mode 100644 index d5feecf49..000000000 --- a/docs/functions_f.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- f -

-
- - - - diff --git a/docs/functions_func.html b/docs/functions_func.html deleted file mode 100644 index 8521c3258..000000000 --- a/docs/functions_func.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/functions_func_0x7e.html b/docs/functions_func_0x7e.html deleted file mode 100644 index 5df1d391f..000000000 --- a/docs/functions_func_0x7e.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- ~ -

-
- - - - diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html deleted file mode 100644 index e5026715f..000000000 --- a/docs/functions_func_b.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html deleted file mode 100644 index c88fb69a5..000000000 --- a/docs/functions_func_c.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- c -

-
- - - - diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html deleted file mode 100644 index 90131b3b7..000000000 --- a/docs/functions_func_d.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html deleted file mode 100644 index 2f02ac398..000000000 --- a/docs/functions_func_e.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- e -

-
- - - - diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html deleted file mode 100644 index 85fa33443..000000000 --- a/docs/functions_func_f.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- f -

-
- - - - diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html deleted file mode 100644 index c09d56704..000000000 --- a/docs/functions_func_g.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- g -

-
- - - - diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html deleted file mode 100644 index 0e430b7f8..000000000 --- a/docs/functions_func_h.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- h -

-
- - - - diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html deleted file mode 100644 index 4fd098fde..000000000 --- a/docs/functions_func_i.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- i -

-
- - - - diff --git a/docs/functions_func_j.html b/docs/functions_func_j.html deleted file mode 100644 index ffc1d91e2..000000000 --- a/docs/functions_func_j.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- j -

-
- - - - diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html deleted file mode 100644 index aa97e5a7f..000000000 --- a/docs/functions_func_l.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- l -

-
- - - - diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html deleted file mode 100644 index 12d63962b..000000000 --- a/docs/functions_func_m.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- m -

-
- - - - diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html deleted file mode 100644 index 4bb504ca3..000000000 --- a/docs/functions_func_n.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- n -

-
- - - - diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html deleted file mode 100644 index fae5ebdf1..000000000 --- a/docs/functions_func_o.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- o -

-
- - - - diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html deleted file mode 100644 index 67c5e73ab..000000000 --- a/docs/functions_func_p.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- p -

-
- - - - diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html deleted file mode 100644 index a9ff6cc10..000000000 --- a/docs/functions_func_r.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- r -

-
- - - - diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html deleted file mode 100644 index 11b7eb4df..000000000 --- a/docs/functions_func_s.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- s -

-
- - - - diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html deleted file mode 100644 index 1480beb75..000000000 --- a/docs/functions_func_t.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html deleted file mode 100644 index d186a7f61..000000000 --- a/docs/functions_func_u.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- u -

-
- - - - diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html deleted file mode 100644 index a01c24065..000000000 --- a/docs/functions_func_v.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Tenncor: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- v -

-
- - - - diff --git a/docs/functions_g.html b/docs/functions_g.html deleted file mode 100644 index 3b53ece31..000000000 --- a/docs/functions_g.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- g -

-
- - - - diff --git a/docs/functions_h.html b/docs/functions_h.html deleted file mode 100644 index 17d086682..000000000 --- a/docs/functions_h.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- h -

-
- - - - diff --git a/docs/functions_i.html b/docs/functions_i.html deleted file mode 100644 index ed4963c62..000000000 --- a/docs/functions_i.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- i -

-
- - - - diff --git a/docs/functions_j.html b/docs/functions_j.html deleted file mode 100644 index f3fea2d20..000000000 --- a/docs/functions_j.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- j -

-
- - - - diff --git a/docs/functions_l.html b/docs/functions_l.html deleted file mode 100644 index 39cb9d0fc..000000000 --- a/docs/functions_l.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- l -

-
- - - - diff --git a/docs/functions_m.html b/docs/functions_m.html deleted file mode 100644 index 14539cb28..000000000 --- a/docs/functions_m.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- m -

-
- - - - diff --git a/docs/functions_n.html b/docs/functions_n.html deleted file mode 100644 index 43448a5d4..000000000 --- a/docs/functions_n.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- n -

-
- - - - diff --git a/docs/functions_o.html b/docs/functions_o.html deleted file mode 100644 index ed60ade2b..000000000 --- a/docs/functions_o.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- o -

-
- - - - diff --git a/docs/functions_p.html b/docs/functions_p.html deleted file mode 100644 index 9e285892e..000000000 --- a/docs/functions_p.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- p -

-
- - - - diff --git a/docs/functions_r.html b/docs/functions_r.html deleted file mode 100644 index 3d9818c1e..000000000 --- a/docs/functions_r.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- r -

-
- - - - diff --git a/docs/functions_s.html b/docs/functions_s.html deleted file mode 100644 index 26fa5dcb7..000000000 --- a/docs/functions_s.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- s -

-
- - - - diff --git a/docs/functions_t.html b/docs/functions_t.html deleted file mode 100644 index 81ea90b79..000000000 --- a/docs/functions_t.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- t -

-
- - - - diff --git a/docs/functions_type.html b/docs/functions_type.html deleted file mode 100644 index 0fda99744..000000000 --- a/docs/functions_type.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Class Members - Typedefs - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/functions_u.html b/docs/functions_u.html deleted file mode 100644 index dbe310319..000000000 --- a/docs/functions_u.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- u -

-
- - - - diff --git a/docs/functions_v.html b/docs/functions_v.html deleted file mode 100644 index 377145589..000000000 --- a/docs/functions_v.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Tenncor: Class Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- v -

-
- - - - diff --git a/docs/functions_vars.html b/docs/functions_vars.html deleted file mode 100644 index 28e258730..000000000 --- a/docs/functions_vars.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - - - -Tenncor: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- v -

-
- - - - diff --git a/docs/globals.html b/docs/globals.html deleted file mode 100644 index 3bd56990d..000000000 --- a/docs/globals.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- _ -

- - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- f -

- - -

- g -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- p -

- - -

- s -

    -
  • SCALAR -: def.h -
  • -
  • STATEMENT -: def.h -
  • -
  • statement_recursive_free() -: def.h -
  • -
  • statements_free() -: def.h -
  • -
  • STMT_TYPE -: def.h -
  • -
  • subgraph_recursive_free() -: def.h -
  • -
  • SUBGRAPH_TYPE -: def.h -
  • -
  • SYMBOL_DEF -: def.h -
  • -
- - -

- v -

-
- - - - diff --git a/docs/globals_defs.html b/docs/globals_defs.html deleted file mode 100644 index ea06dfb3f..000000000 --- a/docs/globals_defs.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/globals_enum.html b/docs/globals_enum.html deleted file mode 100644 index f1186b9c1..000000000 --- a/docs/globals_enum.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/globals_eval.html b/docs/globals_eval.html deleted file mode 100644 index 8f33b90c6..000000000 --- a/docs/globals_eval.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/globals_func.html b/docs/globals_func.html deleted file mode 100644 index 36f0a827c..000000000 --- a/docs/globals_func.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/globals_type.html b/docs/globals_type.html deleted file mode 100644 index 1217d19a6..000000000 --- a/docs/globals_type.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/globals_vars.html b/docs/globals_vars.html deleted file mode 100644 index 7e100d555..000000000 --- a/docs/globals_vars.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -Tenncor: File Members - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/grad__def_8hpp.html b/docs/grad__def_8hpp.html deleted file mode 100644 index 81985337a..000000000 --- a/docs/grad__def_8hpp.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: ade/grad_def.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
grad_def.hpp File Reference
-
-
-
#include <list>
-#include "ade/traveler.hpp"
-
-Include dependency graph for grad_def.hpp:
-
-
- - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  ade::iGradientBuilder
 
- - - -

-Namespaces

 ade
 
-
- - - - diff --git a/docs/grad__def_8hpp__dep__incl.map b/docs/grad__def_8hpp__dep__incl.map deleted file mode 100644 index 423684004..000000000 --- a/docs/grad__def_8hpp__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/grad__def_8hpp__dep__incl.md5 b/docs/grad__def_8hpp__dep__incl.md5 deleted file mode 100644 index 36904b788..000000000 --- a/docs/grad__def_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a0754ef8df4eb2d99d9bd70df4f00fb3 \ No newline at end of file diff --git a/docs/grad__def_8hpp__dep__incl.png b/docs/grad__def_8hpp__dep__incl.png deleted file mode 100644 index 4f8b41de6..000000000 Binary files a/docs/grad__def_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/grad__def_8hpp__incl.map b/docs/grad__def_8hpp__incl.map deleted file mode 100644 index c15947cfa..000000000 --- a/docs/grad__def_8hpp__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/grad__def_8hpp__incl.md5 b/docs/grad__def_8hpp__incl.md5 deleted file mode 100644 index f8739c5cd..000000000 --- a/docs/grad__def_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -66075be9442b34bf491009abbd1bd85a \ No newline at end of file diff --git a/docs/grad__def_8hpp__incl.png b/docs/grad__def_8hpp__incl.png deleted file mode 100644 index 1e4809730..000000000 Binary files a/docs/grad__def_8hpp__incl.png and /dev/null differ diff --git a/docs/grad__def_8hpp_source.html b/docs/grad__def_8hpp_source.html deleted file mode 100644 index 2c9bd027f..000000000 --- a/docs/grad__def_8hpp_source.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Tenncor: ade/grad_def.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
grad_def.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <list>
10 
11 #include "ade/traveler.hpp"
12 
13 #ifndef ADE_GRAD_DEF_HPP
14 #define ADE_GRAD_DEF_HPP
15 
16 namespace ade
17 {
18 
29 {
30  virtual ~iGradientBuilder (void) = default;
31 
34  virtual TensptrT local_derivative (FuncptrT op, size_t arg_idx) const = 0;
35 
41  virtual TensptrT chain_rule (FuncptrT op, const TensptrT& local_der,
42  TensptrT supcomp_grad, size_t arg_idx) const = 0;
43 
45  virtual TensptrT get_const_one (Shape shape) const = 0;
46 
48  virtual TensptrT get_const_zero (Shape shape) const = 0;
49 
51  virtual TensptrT add (TensptrT& lhs, TensptrT& rhs) const = 0;
52 
54  TensptrT derive (TensptrT root, TensptrT target) const
55  {
56  if (root == target)
57  {
58  return get_const_one(target->shape());
59  }
60 
61  PathFinder finder(target.get());
62  root->accept(finder);
63 
64  auto& pathmap = finder.parents_;
65  // no path to wrt
66  if (pathmap.empty())
67  {
68  return get_const_zero(target->shape());
69  }
70  // else there exists a path to wrt
71  // using pathfinder, breadth first traverse from this to wrt
72  GraphStat stat;
73  root->accept(stat);
74  auto owners = track_owners({root});
75 
76  std::list<iFunctor*> parents;
77  std::transform(pathmap.begin(), pathmap.end(),
78  std::back_inserter(parents),
79  [](std::pair<iTensor*,std::unordered_set<size_t>> parent)
80  {
81  return static_cast<iFunctor*>(parent.first);
82  });
83  parents.sort(
84  [&](iFunctor* a, iFunctor* b)
85  {
86  size_t aheight = stat.graphsize_[a].upper_;
87  size_t bheight = stat.graphsize_[b].upper_;
88  if (aheight == bheight) // make traversal more deterministic
89  {
90  return a->to_string() > b->to_string();
91  }
92  return aheight > bheight;
93  });
94 
95  // map functor to its respective super composite derivative
96  // let L = root, F = key functor, value of F in grads is dL/dF
97  std::unordered_map<const iTensor*,TensT> grads = {
98  {root.get(), {get_const_one(root->shape())}}
99  };
100  for (iFunctor* parent : parents)
101  {
102  TensT& gargs = grads[parent];
103  TensptrT bwd = gargs[0];
104  for (size_t i = 1, n = gargs.size(); i < n; ++i)
105  {
106  bwd = add(bwd, gargs[i]);
107  }
108 
109  auto& grad_indices = pathmap[parent];
110  ArgsT children = parent->get_children();
111  size_t nchildren = children.size();
112  // assert: all nnary-children use identity mapping,
113  // so no children-arg is direct mapping
114  TensT args(nchildren);
115  std::transform(children.begin(), children.end(), args.begin(),
116  [](FuncArg& arg)
117  {
118  return arg.get_tensor();
119  });
120  // for each painted child, calculate dThis/dChild
121  // go through grads in order
122  std::list<size_t> ordered(grad_indices.begin(), grad_indices.end());
123  ordered.sort();
124  for (size_t i : ordered)
125  {
126  auto parent_ptr = std::static_pointer_cast<iFunctor>(
127  owners[parent].lock());
128  auto local = local_derivative(parent_ptr, i);
129  auto grad_step = chain_rule(parent_ptr, local, bwd, i);
130  grads[args[i].get()].push_back(grad_step);
131  }
132  }
133  TensT& outargs = grads[target.get()];
134  TensptrT out = outargs[0];
135  for (size_t i = 1, n = outargs.size(); i < n; ++i)
136  {
137  out = add(out, outargs[i]);
138  }
139  return out;
140  }
141 };
142 
143 }
144 
145 #endif // ADE_GRAD_DEF_HPP
std::shared_ptr< iFunctor > FuncptrT
Functor smart pointer.
Definition: ifunctor.hpp:49
-
Definition: grad_def.hpp:28
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
args
Definition: csv_to_png.py:105
-
virtual TensptrT chain_rule(FuncptrT op, const TensptrT &local_der, TensptrT supcomp_grad, size_t arg_idx) const =0
- -
virtual ~iGradientBuilder(void)=default
-
virtual TensptrT get_const_one(Shape shape) const =0
Return tensor representing 1 constant.
-
Traveler that maps each tensor to its subtree&#39;s maximum depth.
Definition: traveler.hpp:61
-
ParentMapT parents_
Map of parent nodes in path.
Definition: traveler.hpp:162
-
virtual std::string to_string(void) const =0
Return the string representation of the tensor.
-
virtual TensptrT local_derivative(FuncptrT op, size_t arg_idx) const =0
-
Definition: traveler.hpp:117
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Definition: coord.hpp:16
-
virtual TensptrT get_const_zero(Shape shape) const =0
Return tensor representing 0 constant.
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
Definition: shape.hpp:60
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
-
std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
Definition: traveler.hpp:109
-
virtual TensptrT add(TensptrT &lhs, TensptrT &rhs) const =0
Return functor representing lhs + rhs.
-
TensptrT derive(TensptrT root, TensptrT target) const
Return derivative of root with respect to target.
Definition: grad_def.hpp:54
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
OwnerMapT track_owners(TensT roots)
-
- - - - diff --git a/docs/grader_8hpp.html b/docs/grader_8hpp.html deleted file mode 100644 index b86860152..000000000 --- a/docs/grader_8hpp.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - -Tenncor: ead/grader.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
grader.hpp File Reference
-
-
-
#include <list>
-#include "ade/grad_def.hpp"
-#include "ead/generated/api.hpp"
-#include "ead/constant.hpp"
-
-Include dependency graph for grader.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  ead::GradientBuilder< T >
 
- - - -

-Namespaces

 ead
 
- - - - - - - - - - - - - - -

-Functions

template<typename T >
NodeptrT< T > ead::reduce_grad (const ade::FuncArg &child, NodeptrT< T > bwd, size_t idx)
 
template<typename T >
NodeptrT< T > ead::permute_grad (ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
 
template<typename T >
NodeptrT< T > ead::extend_grad (ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
 
template<typename T >
NodeptrT< T > ead::derive (NodeptrT< T > root, NodeptrT< T > target)
 Derive root with respect to target and optimized. More...
 
-
- - - - diff --git a/docs/grader_8hpp__dep__incl.map b/docs/grader_8hpp__dep__incl.map deleted file mode 100644 index f517adb80..000000000 --- a/docs/grader_8hpp__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/grader_8hpp__dep__incl.md5 b/docs/grader_8hpp__dep__incl.md5 deleted file mode 100644 index 0d84134a3..000000000 --- a/docs/grader_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -32c34616b40f76d3acfd1bf87d438fc3 \ No newline at end of file diff --git a/docs/grader_8hpp__dep__incl.png b/docs/grader_8hpp__dep__incl.png deleted file mode 100644 index 106e03057..000000000 Binary files a/docs/grader_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/grader_8hpp__incl.map b/docs/grader_8hpp__incl.map deleted file mode 100644 index 39da6e7ab..000000000 --- a/docs/grader_8hpp__incl.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/grader_8hpp__incl.md5 b/docs/grader_8hpp__incl.md5 deleted file mode 100644 index 39485a9e7..000000000 --- a/docs/grader_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -fc0fcbe7a3df0acbd7ef47e9978c66d8 \ No newline at end of file diff --git a/docs/grader_8hpp__incl.png b/docs/grader_8hpp__incl.png deleted file mode 100644 index 50160aac4..000000000 Binary files a/docs/grader_8hpp__incl.png and /dev/null differ diff --git a/docs/grader_8hpp_source.html b/docs/grader_8hpp_source.html deleted file mode 100644 index 887862b99..000000000 --- a/docs/grader_8hpp_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Tenncor: ead/grader.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
grader.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <list>
10 
11 #include "ade/grad_def.hpp"
12 
13 #include "ead/generated/api.hpp"
14 
15 #include "ead/constant.hpp"
16 
17 #ifndef EAD_GRADER_HPP
18 #define EAD_GRADER_HPP
19 
20 namespace ead
21 {
22 
23 template <typename T>
25  NodeptrT<T> bwd, size_t idx)
26 {
27  const ade::Shape& shape = child.get_tensor()->shape();
28  ade::CoordptrT revshaper(child.get_shaper()->reverse());
29  CoordptrT revcoord;
30  {
31  auto coorder = child.get_coorder();
32  assert(nullptr != coorder);
33  ade::CoordT dims;
34  coorder->forward(dims.begin(), dims.begin());
35  ade::CoordT bcast;
36  std::fill(bcast.begin(), bcast.end(), 1);
37  for (ade::RankT d : dims)
38  {
39  if (d < ade::rank_cap)
40  {
41  bcast[d] = shape.at(d);
42  }
43  }
44  revcoord = std::make_shared<CoordMap>(bcast, false);
45  }
46  return make_functor<T>(ade::Opcode{"EXTEND",age::EXTEND}, {
47  FuncArg<T>(bwd, revshaper, revcoord)
48  });
49 }
50 
51 template <typename T>
53  NodeptrT<T> bwd, size_t idx)
54 {
55  const auto& child = fwd->get_children()[0];
56  ade::CoordptrT revshaper(child.get_shaper()->reverse());
57  CoordptrT revcoord;
58  {
59  auto coorder = child.get_coorder();
60  assert(nullptr != coorder);
61  ade::CoordT dims;
62  coorder->forward(dims.begin(), dims.begin());
63 
64  ade::CoordT order;
65  for (ade::RankT i = 0; i < ade::rank_cap; ++i)
66  {
67  order[dims[i]] = i;
68  }
69  revcoord = std::make_shared<CoordMap>(order, true);
70  }
71  return make_functor<T>(ade::Opcode{"PERMUTE",age::PERMUTE},{
72  FuncArg<T>(bwd, revshaper, revcoord)
73  });
74 }
75 
76 template <typename T>
78  NodeptrT<T> bwd, size_t idx)
79 {
80  const auto& child = fwd->get_children()[0];
81  ade::CoordptrT revshaper(child.get_shaper()->reverse());
82  CoordptrT revcoord;
83  {
84  auto coorder = child.get_coorder();
85  assert(nullptr != coorder);
86  ade::CoordT dims;
87  coorder->forward(dims.begin(), dims.begin());
88  std::vector<ade::RankT> red_dims;
89  for (ade::RankT i = 0; i < ade::rank_cap; ++i)
90  {
91  if (dims[i] > 1)
92  {
93  red_dims.push_back(i);
94  }
95  }
96  revcoord = reduce(red_dims);
97  }
98  return make_functor<T>(ade::Opcode{"REDUCE_SUM",age::REDUCE_SUM},{
99  FuncArg<T>(bwd, revshaper, revcoord)
100  });
101 }
102 
103 template <typename T>
105 {
108  size_t arg_idx) const override
109  {
110  const ade::ArgsT& args = op->get_children();
111  ade::TensptrT out;
112  ade::Opcode opcode = op->get_opcode();
113  switch ((age::_GENERATED_OPCODE) opcode.code_)
114  {
115  case age::ABS:
116  out = tenncor::div(NodeConverters<T>::to_node(args[0].get_tensor()),
117  NodeConverters<T>::to_node(op))->get_tensor();
118  break;
119  case age::NEG:
120  out = make_constant_scalar<T>(
121  -1, args[0].get_tensor()->shape())->get_tensor();
122  break;
123  case age::SIN:
124  out = tenncor::cos(NodeConverters<T>::to_node(args[0].get_tensor()))->get_tensor();
125  break;
126  case age::COS:
128  NodeConverters<T>::to_node(args[0].get_tensor())))->get_tensor();
129  break;
130  case age::TAN:
131  out = tenncor::div(make_constant_scalar<T>(1,
132  args[0].get_tensor()->shape()),
133  tenncor::pow(
134  tenncor::cos(NodeConverters<T>::to_node(args[0].get_tensor())),
135  make_constant_scalar<T>(2, args[0].get_tensor()->shape())
136  )
137  )->get_tensor();
138  break;
139  case age::EXP:
140  out = op;
141  break;
142  case age::LOG:
143  out = tenncor::div(
144  make_constant_scalar<T>(1,args[0].get_tensor()->shape()),
145  NodeConverters<T>::to_node(args[0].get_tensor())
146  )->get_tensor();
147  break;
148  case age::SQRT:
149  out = tenncor::div(
150  make_constant_scalar<T>(1,args[0].get_tensor()->shape()),
151  tenncor::mul(
152  make_constant_scalar<T>(2,
153  args[0].get_tensor()->shape()),
155  )
156  )->get_tensor();
157  break;
158  case age::SQUARE:
159  out = tenncor::mul(
160  make_constant_scalar<T>(2, args[0].get_tensor()->shape()),
161  NodeConverters<T>::to_node(args[0].get_tensor())
162  )->get_tensor();
163  break;
164  case age::CUBE:
165  out = tenncor::mul(
166  make_constant_scalar<T>(3, args[0].get_tensor()->shape()),
168  )->get_tensor();
169  break;
170  case age::SIGMOID:
171  out = tenncor::sigmoid_grad(
172  NodeConverters<T>::to_node(args[0].get_tensor()))->get_tensor();
173  break;
174  case age::SIGMOID_GRAD:
175  out = tenncor::mul(
177  tenncor::sub(
178  make_constant_scalar<T>(1,
179  args[0].get_tensor()->shape()),
180  tenncor::mul(
181  make_constant_scalar<T>(2,
182  args[0].get_tensor()->shape()),
184  )
185  )
186  )->get_tensor();
187  break;
188  case age::TANH:
189  out = tenncor::sub(
190  make_constant_scalar<T>(1,args[0].get_tensor()->shape()),
192  )->get_tensor();
193  break;
194  case age::ROUND:
195  case age::REDUCE_SUM:
196  case age::EXTEND:
197  case age::PERMUTE:
198  case age::ADD:
199  case age::SLICE:
200  case age::PAD:
201  out = get_const_one(args[0].get_tensor()->shape());
202  break;
203  case age::MUL:
204  case age::CONV:
205  out = args[(size_t)(arg_idx==0)].get_tensor();
206  break;
207  case age::MAX:
208  case age::MIN:
210  NodeConverters<T>::to_node(args[arg_idx].get_tensor()))->get_tensor();;
211  break;
212  case age::POW:
213  out = (arg_idx==0 ?
214  tenncor::mul(
215  NodeConverters<T>::to_node(args[1].get_tensor()),
216  tenncor::pow(
217  NodeConverters<T>::to_node(args[0].get_tensor()),
218  tenncor::sub(
219  NodeConverters<T>::to_node(args[1].get_tensor()),
220  make_constant_scalar<T>(1,
221  args[0].get_tensor()->shape())
222  )
223  )
224  ) :
227  )->get_tensor();;
228  break;
229  case age::SUB:
230  out = make_constant_scalar<T>(arg_idx == 0 ?
231  1 : -1, args[0].get_tensor()->shape())->get_tensor();
232  break;
233  case age::DIV:
234  {
235  auto denom = NodeConverters<T>::to_node(args[1].get_tensor());
236  out = (arg_idx==0 ?
237  tenncor::div(
238  make_constant_scalar<T>(1,
239  args[0].get_tensor()->shape()),
240  denom
241  ) :
242  tenncor::div(
243  tenncor::div(
244  tenncor::neg(NodeConverters<T>::to_node(args[0].get_tensor())),
245  denom),
246  denom
247  ))->get_tensor();
248  }
249  break;
250  case age::EQ:
251  case age::NEQ:
252  case age::GT:
253  case age::LT:
254  case age::RAND_UNIF:
255  case age::SELECT:
256  out = get_const_zero(args[0].get_tensor()->shape());
257  break;
258  case age::REDUCE_PROD: // todo: prevent divide by zero
259  out = tenncor::div(
260  reduce_grad(args[0], NodeConverters<T>::to_node(op), arg_idx),
261  NodeConverters<T>::to_node(args[0].get_tensor())
262  )->get_tensor();
263  break;
264  case age::REDUCE_MAX:
265  case age::REDUCE_MIN:
266  out = tenncor::eq(
267  reduce_grad(args[0], NodeConverters<T>::to_node(op), arg_idx),
268  NodeConverters<T>::to_node(args[0].get_tensor())
269  )->get_tensor();
270  break;
271  case age::MATMUL:
272  {
273  NodeptrT<T> lhs = NodeConverters<T>::to_node(args[0].get_tensor());
274  NodeptrT<T> rhs = NodeConverters<T>::to_node(args[1].get_tensor());
275  out = (0 == arg_idx ?
276  // ext_rhs
278  lhs->shape().at(1)}), {0,2,1}) :
279  // ext_lhs
281  rhs->shape().at(0)}), {2,1,0})
282  )->get_tensor();
283  }
284  break;
285  case age::CONV_IMG_GRAD:
286  logs::fatal("cannot derive CONV_IMG_GRAD");
287  break;
288  case age::CONV_KRN_GRAD:
289  logs::fatal("cannot derive CONV_KRN_GRAD");
290  break;
291  default:
292  logs::fatalf("Unknown op %s", opcode.name_.c_str());
293  }
294  return out;
295  }
296 
299  ade::TensptrT supcomp_grad, size_t arg_idx) const override
300  {
301  NodeptrT<T> out;
302  ade::Opcode opcode = op->get_opcode();
303  switch (opcode.code_)
304  {
305  case age::ABS:
306  case age::NEG:
307  case age::SIN:
308  case age::COS:
309  case age::TAN:
310  case age::EXP:
311  case age::LOG:
312  case age::SQRT:
313  case age::SQUARE:
314  case age::CUBE:
315  case age::ROUND:
316  case age::SIGMOID:
317  case age::SIGMOID_GRAD:
318  case age::TANH:
319  case age::ADD:
320  case age::MUL:
321  case age::MAX:
322  case age::MIN:
323  case age::POW:
324  case age::SUB:
325  case age::DIV:
326  case age::EQ:
327  case age::NEQ:
328  case age::GT:
329  case age::LT:
330  case age::RAND_UNIF:
331  out = tenncor::mul(NodeConverters<T>::to_node(local_der),
332  NodeConverters<T>::to_node(supcomp_grad));
333  break;
334  case age::REDUCE_MAX:
335  case age::REDUCE_MIN:
336  case age::REDUCE_PROD:
337  case age::REDUCE_SUM:
339  op->get_children()[0], NodeConverters<T>::to_node(supcomp_grad), arg_idx));
340  break;
341  case age::EXTEND:
343  op.get(), NodeConverters<T>::to_node(supcomp_grad), arg_idx));
344  break;
345  case age::PERMUTE:
347  op.get(), NodeConverters<T>::to_node(supcomp_grad), arg_idx));
348  break;
349  case age::MATMUL:
350  out = tenncor::reduce_sum(
353  tenncor::extend(NodeConverters<T>::to_node(supcomp_grad), 2, {
354  op->get_children()[0].
355  get_tensor()->shape().at(0)
356  })),
357  0 == arg_idx ?
358  std::vector<ade::RankT>{2, 1, 0} :
359  std::vector<ade::RankT>{0, 2, 1}), 2, 1);
360  break;
361  case age::CONV:
362  {
363  ade::Opcode opcode;
364  auto args = op->get_children();
365  ade::CoordptrT fwd_shaper =
366  args[(size_t)(0 == arg_idx)].get_shaper();
367  ade::CoordptrT rev_shaper(
368  args[arg_idx].get_shaper()->reverse());
369  if (arg_idx == 0)
370  {
371  opcode = ade::Opcode{"CONV_IMG_GRAD",
372  age::CONV_IMG_GRAD};
373  }
374  else
375  {
376  opcode = ade::Opcode{"CONV_KRN_GRAD",
377  age::CONV_KRN_GRAD};
378  }
379  ade::CoordptrT full_shaper(
380  fwd_shaper->connect(*rev_shaper));
381  out = make_functor<T>(opcode, {
382  FuncArg<T>(NodeConverters<T>::to_node(local_der), full_shaper, nullptr),
383  FuncArg<T>(NodeConverters<T>::to_node(supcomp_grad), rev_shaper, nullptr),
384  });
385  }
386  break;
387  case age::SLICE:
388  {
389  ade::CoordT slicings;
390  auto& child = op->get_children()[0];
391  child.get_coorder()->forward(
392  slicings.begin(), slicings.begin());
393  ade::DimT dimension = slicings[2];
394  ade::DimT dim = child.get_tensor()->shape().at(dimension);
395  ade::DimT left_pad = slicings[0];
396  ade::DimT right_pad = dim - (left_pad + slicings[1]);
397  out = tenncor::mul(NodeConverters<T>::to_node(local_der),
399  std::pair<ade::DimT,ade::DimT>{
400  left_pad, right_pad}, dimension));
401  }
402  break;
403  case age::PAD:
404  {
405  ade::CoordT paddings;
406  auto& child = op->get_children()[0];
407  child.get_coorder()->forward(
408  paddings.begin(), paddings.begin());
409  ade::DimT dimension = paddings[2];
410  ade::DimT dim = op->shape().at(dimension);
411  ade::DimT offset = paddings[0];
412  ade::DimT extent = dim - paddings[1] - offset;
413  out = tenncor::mul(NodeConverters<T>::to_node(local_der),
415  offset, extent, dimension));
416  }
417  case age::SELECT:
418  {
419  if (0 == arg_idx)
420  {
421  out = NodeConverters<T>::to_node(local_der);
422  break;
423  }
424  auto condition = NodeConverters<T>::to_node(
425  op->get_children()[0].get_tensor());
426  auto then = NodeConverters<T>::to_node(supcomp_grad);
427  auto otherwise = make_constant_scalar<T>(0, op->shape());
428  if (1 < arg_idx)
429  {
430  std::swap(then, otherwise);
431  }
432  out = tenncor::if_then_else(condition, then, otherwise);
433  }
434  break;
435  case age::CONV_IMG_GRAD:
436  logs::fatal("cannot derive CONV_IMG_GRAD");
437  break;
438  case age::CONV_KRN_GRAD:
439  logs::fatal("cannot derive CONV_KRN_GRAD");
440  break;
441  default:
442  logs::fatalf("Unknown op %s", opcode.name_.c_str());
443  }
444  return out->get_tensor();
445  }
446 
448  ade::TensptrT get_const_one (ade::Shape shape) const override
449  {
450  return make_constant_scalar<T>(1, shape)->get_tensor();
451  }
452 
454  ade::TensptrT get_const_zero (ade::Shape shape) const override
455  {
456  return make_constant_scalar<T>(0, shape)->get_tensor();
457  }
458 
460  ade::TensptrT add (ade::TensptrT& lhs, ade::TensptrT& rhs) const override
461  {
462  return ade::TensptrT(Functor<T>::get(ade::Opcode{"ADD", age::ADD}, {
465  }));
466  }
467 };
468 
470 template <typename T>
472 {
473  GradientBuilder<T> builder;
474  ade::TensptrT derivative = builder.derive(
475  root->get_tensor(), target->get_tensor());
476  return NodeConverters<T>::to_node(derivative);
477 }
478 
479 }
480 
481 #endif // EAD_GRADER_HPP
EigenptrT< T > neg(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:209
-
EigenptrT< T > sub(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:633
-
std::shared_ptr< iFunctor > FuncptrT
Functor smart pointer.
Definition: ifunctor.hpp:49
-
EigenptrT< T > log(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:356
-
Definition: inode.hpp:40
-
EigenptrT< T > mul(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:662
-
Definition: grad_def.hpp:28
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
EigenptrT< T > square(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:513
-
args
Definition: csv_to_png.py:105
-
CoordptrT reduce(std::vector< ade::RankT > red_dims)
-
EigenptrT< T > eq(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:726
-
Encoding of operation.
Definition: ifunctor.hpp:18
-
CoordptrT extend(RankT rank, std::vector< DimT > ext)
-
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
std::shared_ptr< iNode< T > > NodeptrT
Definition: inode.hpp:31
-
ade::TensptrT get_const_one(ade::Shape shape) const override
Implementation of iGradientBuilder.
Definition: grader.hpp:448
-
EigenptrT< T > sin(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:234
-
DimT at(RankT idx) const
Return DimT element at idx for any index in range [0:rank_cap)
Definition: shape.hpp:106
-
Definition: constant.hpp:9
- -
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
EigenptrT< T > div(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:694
-
uint16_t DimT
Definition: shape.hpp:29
-
EigenptrT< T > reduce_sum(ade::Shape &outshape, const OpArg< T > &in) template< typename T > EigenptrT< T > reduce_prod(ade
Definition: operator.hpp:87
-
ade::TensptrT add(ade::TensptrT &lhs, ade::TensptrT &rhs) const override
Implementation of iGradientBuilder.
Definition: grader.hpp:460
-
NodeptrT< T > extend_grad(ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
Definition: grader.hpp:77
-
Definition: funcarg.hpp:13
-
static NodeptrT< T > to_node(ade::TensptrT tens)
Definition: inode.hpp:44
-
EigenptrT< T > slice(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:133
- -
CoordptrT get_coorder(void) const
Return coord map for coordinates.
Definition: funcarg.hpp:80
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
ade::TensptrT local_derivative(ade::FuncptrT op, size_t arg_idx) const override
Implementation of iGradientBuilder.
Definition: grader.hpp:107
-
NodeptrT< T > derive(NodeptrT< T > root, NodeptrT< T > target)
Derive root with respect to target and optimized.
Definition: grader.hpp:471
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
EigenptrT< T > pad(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:158
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
FuncArg< T > identity_map(NodeptrT< T > node)
Definition: funcarg.hpp:77
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
Definition: shape.hpp:60
-
size_t code_
Numerical encoding of operation.
Definition: ifunctor.hpp:24
-
std::array< CDimT, rank_cap > CoordT
Definition: shape.hpp:54
-
EigenptrT< T > cos(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:268
-
CoordptrT permute(std::vector< RankT > order)
-
Definition: functor.hpp:16
-
CoordptrT get_shaper(void) const
Return shaper coord map.
Definition: funcarg.hpp:67
-
NodeptrT< T > permute_grad(ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
Definition: grader.hpp:52
-
TensptrT get_tensor(void) const
Return tensor being mapped.
Definition: funcarg.hpp:61
-
EigenptrT< T > sigmoid(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:429
-
Definition: grader.hpp:104
-
const RankT rank_cap
Number of dimsensions in a shape/coordinate.
Definition: shape.hpp:45
-
EigenptrT< T > pow(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
Definition: operator.hpp:562
-
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:49
-
ade::TensptrT get_const_zero(ade::Shape shape) const override
Implementation of iGradientBuilder.
Definition: grader.hpp:454
-
NodeptrT< T > reduce_grad(const ade::FuncArg &child, NodeptrT< T > bwd, size_t idx)
Definition: grader.hpp:24
-
TensptrT derive(TensptrT root, TensptrT target) const
Return derivative of root with respect to target.
Definition: grad_def.hpp:54
-
ade::TensptrT chain_rule(ade::FuncptrT op, const ade::TensptrT &local_der, ade::TensptrT supcomp_grad, size_t arg_idx) const override
Implementation of iGradientBuilder.
Definition: grader.hpp:298
-
EigenptrT< T > sigmoid_grad(ade::Shape &outshape, const OpArg< T > &in)
Definition: operator.hpp:452
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/graph_legend.html b/docs/graph_legend.html deleted file mode 100644 index 6dedc8566..000000000 --- a/docs/graph_legend.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Tenncor: Graph Legend - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
class Invisible { };
/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible { };
/* Class not documented with doxygen comments */
class Undocumented { };
/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated { };
/*! A template class */
template<class T> class Templ { };
/*! Class that is inherited using protected inheritance */
class ProtectedBase { };
/*! Class that is inherited using private inheritance */
class PrivateBase { };
/*! Class that is used by the Inherited class */
class Used { };
/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
protected ProtectedBase,
private PrivateBase,
public Undocumented,
public Templ<int>
{
private:
Used *m_usedClass;
};

This will result in the following graph:

-
- -
-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
- - - - diff --git a/docs/graph_legend.md5 b/docs/graph_legend.md5 deleted file mode 100644 index a06ed050c..000000000 --- a/docs/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -387ff8eb65306fa251338d3c9bd7bfff \ No newline at end of file diff --git a/docs/graph_legend.png b/docs/graph_legend.png deleted file mode 100644 index d1fdf389c..000000000 Binary files a/docs/graph_legend.png and /dev/null differ diff --git a/docs/group_8cpp.html b/docs/group_8cpp.html deleted file mode 100644 index 49333912d..000000000 --- a/docs/group_8cpp.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: tag/src/group.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
group.cpp File Reference
-
-
-
#include "tag/group.hpp"
-
-Include dependency graph for group.cpp:
-
-
- - - - - - - - - - - - - - - - -
-
- - - - diff --git a/docs/group_8cpp__incl.map b/docs/group_8cpp__incl.map deleted file mode 100644 index c105ade8c..000000000 --- a/docs/group_8cpp__incl.map +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/group_8cpp__incl.md5 b/docs/group_8cpp__incl.md5 deleted file mode 100644 index 0fdfd46b8..000000000 --- a/docs/group_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -28c7684d556686607a61ae7f50632cad \ No newline at end of file diff --git a/docs/group_8cpp__incl.png b/docs/group_8cpp__incl.png deleted file mode 100644 index 72a526e01..000000000 Binary files a/docs/group_8cpp__incl.png and /dev/null differ diff --git a/docs/group_8hpp.html b/docs/group_8hpp.html deleted file mode 100644 index 6e71f90e4..000000000 --- a/docs/group_8hpp.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Tenncor: tag/group.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
group.hpp File Reference
-
-
-
#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
-#include "tag/tag.hpp"
-
-Include dependency graph for group.hpp:
-
-
- - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  tag::GroupTag
 
struct  tag::GroupRegistry
 
struct  tag::Subgraph
 
- - - -

-Namespaces

 tag
 
- - - - - - - - - - - - - -

-Typedefs

using tag::TensSetT = std::unordered_set< TensKey, TensKeyHash >
 
using tag::AGroupsT = std::map< std::string, std::unordered_set< std::string > >
 
using tag::AdjMapT = std::unordered_map< ade::iTensor *, AGroupsT >
 
using tag::SgraphptrT = std::shared_ptr< Subgraph >
 
using tag::SubgraphsT = std::unordered_set< SgraphptrT >
 
using tag::SubgraphAssocsT = std::unordered_map< ade::iTensor *, SubgraphsT >
 
- - - - - - - - - - - -

-Functions

GroupRegistry & tag::get_group_reg (void)
 
void tag::recursive_group_tag (ade::TensrefT tens, std::string group, std::unordered_set< ade::iTensor *> stops, GroupRegistry &registry=get_group_reg())
 
void tag::adjacencies (AdjMapT &out, ade::TensT roots, GroupRegistry &registry=get_group_reg())
 
void tag::beautify_groups (SubgraphAssocsT &out, const AdjMapT &adjs)
 
void tag::filter_head (SubgraphAssocsT &out, const SubgraphAssocsT &assocs)
 
- - - -

-Variables

const std::string tag::groups_key = "groups"
 
-
- - - - diff --git a/docs/group_8hpp__dep__incl.map b/docs/group_8hpp__dep__incl.map deleted file mode 100644 index dae35f574..000000000 --- a/docs/group_8hpp__dep__incl.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/group_8hpp__dep__incl.md5 b/docs/group_8hpp__dep__incl.md5 deleted file mode 100644 index 7aaca33af..000000000 --- a/docs/group_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7ad76ef3c0290a9fee5951579658fe0d \ No newline at end of file diff --git a/docs/group_8hpp__dep__incl.png b/docs/group_8hpp__dep__incl.png deleted file mode 100644 index bd6194ac6..000000000 Binary files a/docs/group_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/group_8hpp__incl.map b/docs/group_8hpp__incl.map deleted file mode 100644 index 73bf5c2cd..000000000 --- a/docs/group_8hpp__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/group_8hpp__incl.md5 b/docs/group_8hpp__incl.md5 deleted file mode 100644 index 7ab67c9bc..000000000 --- a/docs/group_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -735f7203df8376b3ef49fdaee33d8783 \ No newline at end of file diff --git a/docs/group_8hpp__incl.png b/docs/group_8hpp__incl.png deleted file mode 100644 index 8fe9829ad..000000000 Binary files a/docs/group_8hpp__incl.png and /dev/null differ diff --git a/docs/group_8hpp_source.html b/docs/group_8hpp_source.html deleted file mode 100644 index 371fc3f44..000000000 --- a/docs/group_8hpp_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: tag/group.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
group.hpp
-
-
-Go to the documentation of this file.
1 #include <boost/uuid/uuid.hpp>
2 #include <boost/uuid/uuid_generators.hpp>
3 #include <boost/uuid/uuid_io.hpp>
4 
5 #include "tag/tag.hpp"
6 
7 #ifndef TAG_GROUP_HPP
8 #define TAG_GROUP_HPP
9 
10 namespace tag
11 {
12 
13 using TensSetT = std::unordered_set<TensKey,TensKeyHash>;
14 
15 const std::string groups_key = "groups";
16 
23 struct GroupTag final : public iTag
24 {
25  GroupTag (std::string init_label) : labels_({init_label}) {}
26 
27  size_t tag_id (void) const override
28  {
29  return tag_id_;
30  }
31 
32  void absorb (TagptrT&& other) override
33  {
34  std::set<std::string>& olabels =
35  static_cast<GroupTag*>(other.get())->labels_;
36  labels_.insert(olabels.begin(), olabels.end());
37  }
38 
39  TagRepsT get_tags (void) const override
40  {
41  TagRepsT out;
42  out.emplace(groups_key,
43  std::vector<std::string>(labels_.begin(), labels_.end()));
44  return out;
45  }
46 
47 private:
48  std::set<std::string> labels_;
49 
50  static size_t tag_id_;
51 };
52 
53 struct GroupRegistry final
54 {
55  GroupRegistry (TagRegistry& registry = get_reg()) : tag_reg_(registry) {}
56 
57  void group_tag (ade::TensrefT tens, std::string tag)
58  {
59  tag_reg_.add_tag(tens, TagptrT(new GroupTag(tag)));
60 
61  auto& gtens = groups_[tag];
62  auto it = gtens.find(TensKey(tens.lock().get()));
63  // clear out previous entry that is expired
64  if (gtens.end() != it && it->expired())
65  {
66  gtens.erase(tens.lock().get());
67  }
68  gtens.emplace(tens);
69  }
70 
71  std::unordered_map<std::string,TensSetT> groups_;
72 
74 };
75 
77 
78 void recursive_group_tag (ade::TensrefT tens, std::string group,
79  std::unordered_set<ade::iTensor*> stops,
80  GroupRegistry& registry = get_group_reg());
81 
82 using AGroupsT = std::map<std::string,std::unordered_set<std::string>>;
83 
84 using AdjMapT = std::unordered_map<ade::iTensor*,AGroupsT>;
85 
86 void adjacencies (AdjMapT& out, ade::TensT roots,
87  GroupRegistry& registry = get_group_reg());
88 
89 struct Subgraph final : public ade::iTraveler
90 {
91  Subgraph (std::string group) : group_(group) {}
92 
94  void visit (ade::iLeaf* leaf) override
95  {
96  if (false == estd::has(content_, leaf))
97  {
98  content_.emplace(leaf);
99  children_.erase(leaf);
100  }
101  }
102 
104  void visit (ade::iFunctor* func) override
105  {
106  if (false == estd::has(content_, func))
107  {
108  content_.emplace(func);
109  children_.erase(func);
110 
111  auto& children = func->get_children();
112  for (auto& child : children)
113  {
114  auto tens = child.get_tensor();
115  if (false == estd::has(content_, tens.get()))
116  {
117  children_.emplace(tens.get(), tens);
118  }
119  }
120  }
121  }
122 
123  std::string group_;
124 
125  std::unordered_set<ade::iTensor*> content_;
126 
127  // todo: order subgraphs children somehow
128  std::unordered_map<ade::iTensor*,ade::TensptrT> children_;
129 };
130 
131 using SgraphptrT = std::shared_ptr<Subgraph>;
132 
133 using SubgraphsT = std::unordered_set<SgraphptrT>;
134 
135 using SubgraphAssocsT = std::unordered_map<ade::iTensor*,SubgraphsT>;
136 
137 void beautify_groups (SubgraphAssocsT& out, const AdjMapT& adjs);
138 
139 // look for associations where the tensor key is the
140 // max height tensor of the mapped subgraph
141 // dump filtered associations in out
142 void filter_head (SubgraphAssocsT& out, const SubgraphAssocsT& assocs);
143 
144 }
145 
146 #endif // TAG_GROUP_HPP
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
void beautify_groups(SubgraphAssocsT &out, const AdjMapT &adjs)
-
void absorb(TagptrT &&other) override
Definition: group.hpp:32
-
void group_tag(ade::TensrefT tens, std::string tag)
Definition: group.hpp:57
-
void add_tag(ade::TensrefT tens, TagptrT tag)
Definition: tag.hpp:137
-
void recursive_group_tag(ade::TensrefT tens, std::string group, std::unordered_set< ade::iTensor *> stops, GroupRegistry &registry=get_group_reg())
-
const std::string groups_key
Definition: group.hpp:15
-
Definition: tag.hpp:16
-
Subgraph(std::string group)
Definition: group.hpp:91
-
Definition: tag.hpp:135
-
GroupTag(std::string init_label)
Definition: group.hpp:25
-
std::unordered_map< ade::iTensor *, AGroupsT > AdjMapT
Definition: group.hpp:84
-
GroupRegistry(TagRegistry &registry=get_reg())
Definition: group.hpp:55
-
Definition: group.hpp:10
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
std::unique_ptr< iTag > TagptrT
Definition: tag.hpp:27
-
std::map< std::string, std::vector< std::string > > TagRepsT
Definition: tag.hpp:12
-
Definition: group.hpp:89
- -
std::string group_
Definition: group.hpp:123
-
void visit(ade::iLeaf *leaf) override
Implementation of iTraveler.
Definition: group.hpp:94
-
void visit(ade::iFunctor *func) override
Implementation of iTraveler.
Definition: group.hpp:104
-
size_t tag_id(void) const override
Definition: group.hpp:27
-
std::unordered_set< SgraphptrT > SubgraphsT
Definition: group.hpp:133
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
TagRegistry & tag_reg_
Definition: group.hpp:73
-
Definition: tag.hpp:95
-
TagRegistry & get_reg(void)
-
std::map< std::string, std::unordered_set< std::string > > AGroupsT
Definition: group.hpp:82
-
std::unordered_map< ade::iTensor *, ade::TensptrT > children_
Definition: group.hpp:128
-
Definition: group.hpp:53
-
std::weak_ptr< iTensor > TensrefT
Tensor weak pointers.
Definition: itensor.hpp:52
-
std::vector< TensptrT > TensT
Vector representation of ade tensor pointers.
Definition: funcarg.hpp:104
-
void filter_head(SubgraphAssocsT &out, const SubgraphAssocsT &assocs)
-
GroupRegistry & get_group_reg(void)
-
void adjacencies(AdjMapT &out, ade::TensT roots, GroupRegistry &registry=get_group_reg())
-
std::unordered_set< TensKey, TensKeyHash > TensSetT
Definition: group.hpp:13
-
std::unordered_set< ade::iTensor * > content_
Definition: group.hpp:125
-
std::shared_ptr< Subgraph > SgraphptrT
Definition: group.hpp:131
-
std::unordered_map< ade::iTensor *, SubgraphsT > SubgraphAssocsT
Definition: group.hpp:135
-
TagRepsT get_tags(void) const override
Definition: group.hpp:39
-
Definition: group.hpp:23
-
std::unordered_map< std::string, TensSetT > groups_
Definition: group.hpp:71
-
static size_t tag_id_
Definition: group.hpp:50
-
std::set< std::string > labels_
Definition: group.hpp:48
-
- - - - diff --git a/docs/grpc_8cpp.html b/docs/grpc_8cpp.html deleted file mode 100644 index 85de06679..000000000 --- a/docs/grpc_8cpp.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Tenncor: dbg/python/grpc.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
grpc.cpp File Reference
-
-
-
#include "pybind11/pybind11.h"
-#include "pybind11/stl.h"
-#include "ead/generated/pyapi.hpp"
-#include "ead/ead.hpp"
-#include "ead/parse.hpp"
-#include "dbg/grpc/session.hpp"
-
-Include dependency graph for grpc.cpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -

-Functions

 PYBIND11_MODULE (grpc_dbg, m)
 
-

Function Documentation

- -

◆ PYBIND11_MODULE()

- -
-
- - - - - - - - - - - - - - - - - - -
PYBIND11_MODULE (grpc_dbg ,
 
)
-
- -
-
-
- - - - diff --git a/docs/grpc_8cpp__incl.map b/docs/grpc_8cpp__incl.map deleted file mode 100644 index 0dc9fa3ae..000000000 --- a/docs/grpc_8cpp__incl.map +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/grpc_8cpp__incl.md5 b/docs/grpc_8cpp__incl.md5 deleted file mode 100644 index 4656334f2..000000000 --- a/docs/grpc_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -85e06c3ffc120497609eadd1b3f973a5 \ No newline at end of file diff --git a/docs/grpc_8cpp__incl.png b/docs/grpc_8cpp__incl.png deleted file mode 100644 index ffb152ba4..000000000 Binary files a/docs/grpc_8cpp__incl.png and /dev/null differ diff --git a/docs/hierarchy.html b/docs/hierarchy.html deleted file mode 100644 index 9d128c205..000000000 --- a/docs/hierarchy.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - -Tenncor: Class Hierarchy - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
-
-

Go to the graphical class hierarchy

-This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 1234]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Capis.APIsPlugin
 CArg
 CBranch
 Cead::BuilderArg
 Copt::CandArg
 Cdbg::ClientConfig
 Copt::CommHasher
 CConversion
 Cdtypes.DTypesPlugin
 CGraphEmitterImpl::Edge
 CCSVEquation::Edge
 Cdbg::EdgeInfo
 Cdbg::EdgeInfoHash
 Cead::FuncArg< T >
 Cade::FuncArgCoordinate mapper and tensor pair
 Cdbg::GraphEmitterClient
 Cpbm::GraphInfoContains all information necessary to recreate labelled ADE graph
 CGroup
 Ctag::GroupRegistry
 Cade::HeightMatrix
 Copt::iConverter
 Copt::iConverterBuilder
 Cade::iCoordMapInterface for transforming coordinates and reversing the coordinate
 Cade::iDataInterface for unveiling data
 Cead::iEigen< T >
 Cade::iGradientBuilder
 Cpbm::iLoader
 Cead::iNode< T >
 Cpbm::iSaver
 Cead::iSession
 Ctag::iTag
 Cade::iTensorInterface of traversible and differentiable nodes with shape information
 Cade::iTravelerInterface to travel through graph, treating iLeaf and iFunctor differently
 Copt::iVoter
 CGraphEmitterImpl::Node
 CCSVEquation::Node
 Cead::NodeConverters< T >
 CNumList
 CNumNode
 Cead::OpArg< T >
 Cade::OpcodeEncoding of operation
 Copcodes.OpcodesPlugin
 Copt::OptCtx
 Copt::OrdrHasher
 Cpbm::PathedTensTree node for labeling Tensptrs
 CPrettyEquationUse PrettyTree to render ade::TensptrT graph as an ascii art
 CPrettyTensor< T >Draw data as a multi-dimension array (similar to python) according to shape
 CPrettyTree< T >
 CPrettyTree< ade::iTensor *>
 CProperty
 Ctag::PropertyRegistry
 CPtrList
 CPtrNode
 Cpyapis.PyAPIsPlugin
 Copt::RulesContext
 Copt::SegVArgs
 CService
 Cade::Shape
 Cead::SizeT
 CStatement
 CSubgraph
 Copt::Symbol
 Copt::SymbolHash
 Ctag::TagCollective
 Ctag::TagRegistry
 Ctag::TensKey
 Ctag::TensKeyHash
 Copt::VoterArg
 Copt::VoterPool
-
-
- - - - diff --git a/docs/iconverter_8hpp.html b/docs/iconverter_8hpp.html deleted file mode 100644 index 466a545a5..000000000 --- a/docs/iconverter_8hpp.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -Tenncor: opt/iconverter.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
iconverter.hpp File Reference
-
-
-
#include "opt/parse/def.h"
-#include "opt/candidate.hpp"
-
-Include dependency graph for iconverter.hpp:
-
-
- - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  opt::iConverter
 
- - - -

-Namespaces

 opt
 
- - - -

-Typedefs

using opt::ConvptrT = std::shared_ptr< iConverter >
 
-
- - - - diff --git a/docs/iconverter_8hpp__dep__incl.map b/docs/iconverter_8hpp__dep__incl.map deleted file mode 100644 index ca118d298..000000000 --- a/docs/iconverter_8hpp__dep__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/iconverter_8hpp__dep__incl.md5 b/docs/iconverter_8hpp__dep__incl.md5 deleted file mode 100644 index ed8a28f4d..000000000 --- a/docs/iconverter_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a057404f0d34daddff35a198d3cb7a75 \ No newline at end of file diff --git a/docs/iconverter_8hpp__dep__incl.png b/docs/iconverter_8hpp__dep__incl.png deleted file mode 100644 index 815ad524c..000000000 Binary files a/docs/iconverter_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/iconverter_8hpp__incl.map b/docs/iconverter_8hpp__incl.map deleted file mode 100644 index 3ff973245..000000000 --- a/docs/iconverter_8hpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/iconverter_8hpp__incl.md5 b/docs/iconverter_8hpp__incl.md5 deleted file mode 100644 index 5a148aff3..000000000 --- a/docs/iconverter_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9e3207649b03a59b8aa10315c614c3b5 \ No newline at end of file diff --git a/docs/iconverter_8hpp__incl.png b/docs/iconverter_8hpp__incl.png deleted file mode 100644 index d335a5480..000000000 Binary files a/docs/iconverter_8hpp__incl.png and /dev/null differ diff --git a/docs/iconverter_8hpp_source.html b/docs/iconverter_8hpp_source.html deleted file mode 100644 index 5ca58c8ca..000000000 --- a/docs/iconverter_8hpp_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: opt/iconverter.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
iconverter.hpp
-
-
-Go to the documentation of this file.
1 extern "C" {
2 #include "opt/parse/def.h"
3 }
4 
5 #include "opt/candidate.hpp"
6 
7 #ifndef OPT_ICONVERTER_HPP
8 #define OPT_ICONVERTER_HPP
9 
10 namespace opt
11 {
12 
13 struct iConverter
14 {
15  virtual ~iConverter (void) = default;
16 
17  virtual ade::TensptrT build (
18  const ContexT& ctx, ade::Shape outshape) const = 0;
19 
20  virtual std::string to_string (void) const = 0;
21 };
22 
23 using ConvptrT = std::shared_ptr<iConverter>;
24 
25 }
26 
27 #endif // OPT_ICONVERTER_HPP
- -
virtual ~iConverter(void)=default
-
Definition: candidate.hpp:11
-
virtual std::string to_string(void) const =0
-
std::map< std::string, CtxValT > ContexT
Definition: candidate.hpp:16
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
std::shared_ptr< iConverter > ConvptrT
Definition: iconverter.hpp:23
-
virtual ade::TensptrT build(const ContexT &ctx, ade::Shape outshape) const =0
-
Definition: shape.hpp:60
-
Definition: iconverter.hpp:13
-
- - - - diff --git a/docs/idata_8hpp.html b/docs/idata_8hpp.html deleted file mode 100644 index eac91066c..000000000 --- a/docs/idata_8hpp.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -Tenncor: ade/idata.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
idata.hpp File Reference
-
-
-
#include <cstdlib>
-#include <string>
-
-Include dependency graph for idata.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ade::iData
 Interface for unveiling data. More...
 
- - - -

-Namespaces

 ade
 
-
- - - - diff --git a/docs/idata_8hpp__dep__incl.map b/docs/idata_8hpp__dep__incl.map deleted file mode 100644 index 342d3d5b0..000000000 --- a/docs/idata_8hpp__dep__incl.map +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/idata_8hpp__dep__incl.md5 b/docs/idata_8hpp__dep__incl.md5 deleted file mode 100644 index d18cb4be8..000000000 --- a/docs/idata_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0bf8d591af386043b81ec2990440ab38 \ No newline at end of file diff --git a/docs/idata_8hpp__dep__incl.png b/docs/idata_8hpp__dep__incl.png deleted file mode 100644 index 5ea43bea4..000000000 Binary files a/docs/idata_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/idata_8hpp__incl.map b/docs/idata_8hpp__incl.map deleted file mode 100644 index 267e0eb1c..000000000 --- a/docs/idata_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/idata_8hpp__incl.md5 b/docs/idata_8hpp__incl.md5 deleted file mode 100644 index 09689bd6c..000000000 --- a/docs/idata_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b7bf4b50c1ad4336b5934ebaa6d9698f \ No newline at end of file diff --git a/docs/idata_8hpp__incl.png b/docs/idata_8hpp__incl.png deleted file mode 100644 index 49e7c9e59..000000000 Binary files a/docs/idata_8hpp__incl.png and /dev/null differ diff --git a/docs/idata_8hpp_source.html b/docs/idata_8hpp_source.html deleted file mode 100644 index 137ba1643..000000000 --- a/docs/idata_8hpp_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: ade/idata.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
idata.hpp
-
-
-Go to the documentation of this file.
1 
9 #include <cstdlib>
10 #include <string>
11 
12 #ifndef ADE_IDATA_HPP
13 #define ADE_IDATA_HPP
14 
15 namespace ade
16 {
17 
19 struct iData
20 {
21  virtual ~iData (void) = default;
22 
24  virtual void* data (void) = 0;
25 
27  virtual const void* data (void) const = 0;
28 
30  virtual size_t type_code (void) const = 0;
31 
33  virtual std::string type_label (void) const = 0;
34 
36  virtual size_t nbytes (void) const = 0;
37 };
38 
39 }
40 
41 #endif // ADE_IDATA_HPP
virtual ~iData(void)=default
-
virtual size_t nbytes(void) const =0
Return number of bytes in the data.
-
Interface for unveiling data.
Definition: idata.hpp:19
-
Definition: coord.hpp:16
-
virtual std::string type_label(void) const =0
Return data type label (for better readability)
-
virtual void * data(void)=0
Return pointer to internal data.
-
virtual size_t type_code(void) const =0
Return data type encoding.
-
- - - - diff --git a/docs/ifunctor_8hpp.html b/docs/ifunctor_8hpp.html deleted file mode 100644 index 66ce8dc47..000000000 --- a/docs/ifunctor_8hpp.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -Tenncor: ade/ifunctor.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ifunctor.hpp File Reference
-
-
-
#include "ade/funcarg.hpp"
-
-Include dependency graph for ifunctor.hpp:
-
-
- - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  ade::Opcode
 Encoding of operation. More...
 
struct  ade::iFunctor
 Interface of iOperation-defined operation node. More...
 
- - - -

-Namespaces

 ade
 
- - - - -

-Typedefs

using ade::FuncptrT = std::shared_ptr< iFunctor >
 Functor smart pointer. More...
 
-
- - - - diff --git a/docs/ifunctor_8hpp__dep__incl.map b/docs/ifunctor_8hpp__dep__incl.map deleted file mode 100644 index ed54ada09..000000000 --- a/docs/ifunctor_8hpp__dep__incl.map +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ifunctor_8hpp__dep__incl.md5 b/docs/ifunctor_8hpp__dep__incl.md5 deleted file mode 100644 index e5d7c20d4..000000000 --- a/docs/ifunctor_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4e1dcdf25f658939ea202fe67207f727 \ No newline at end of file diff --git a/docs/ifunctor_8hpp__dep__incl.png b/docs/ifunctor_8hpp__dep__incl.png deleted file mode 100644 index 1a43cc543..000000000 Binary files a/docs/ifunctor_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ifunctor_8hpp__incl.map b/docs/ifunctor_8hpp__incl.map deleted file mode 100644 index cc6507bbb..000000000 --- a/docs/ifunctor_8hpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/ifunctor_8hpp__incl.md5 b/docs/ifunctor_8hpp__incl.md5 deleted file mode 100644 index fc1344472..000000000 --- a/docs/ifunctor_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -08eed63d92f4299dea6234404abc0ca6 \ No newline at end of file diff --git a/docs/ifunctor_8hpp__incl.png b/docs/ifunctor_8hpp__incl.png deleted file mode 100644 index f8f3cd96d..000000000 Binary files a/docs/ifunctor_8hpp__incl.png and /dev/null differ diff --git a/docs/ifunctor_8hpp_source.html b/docs/ifunctor_8hpp_source.html deleted file mode 100644 index 5e8a4070f..000000000 --- a/docs/ifunctor_8hpp_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Tenncor: ade/ifunctor.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ifunctor.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/funcarg.hpp"
10 
11 #ifndef ADE_IFUNCTOR_HPP
12 #define ADE_IFUNCTOR_HPP
13 
14 namespace ade
15 {
16 
18 struct Opcode final
19 {
21  std::string name_;
22 
24  size_t code_;
25 };
26 
28 struct iFunctor : public iTensor
29 {
30  virtual ~iFunctor (void) = default;
31 
33  void accept (iTraveler& visiter) override
34  {
35  visiter.visit(this);
36  }
37 
39  virtual Opcode get_opcode (void) const = 0;
40 
42  virtual const ArgsT& get_children (void) const = 0;
43 
45  virtual void update_child (FuncArg arg, size_t index) = 0;
46 };
47 
49 using FuncptrT = std::shared_ptr<iFunctor>;
50 
51 }
52 
53 #endif // ADE_IFUNCTOR_HPP
std::shared_ptr< iFunctor > FuncptrT
Functor smart pointer.
Definition: ifunctor.hpp:49
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
virtual ~iFunctor(void)=default
-
virtual void update_child(FuncArg arg, size_t index)=0
Update child at specified index.
-
Encoding of operation.
Definition: ifunctor.hpp:18
-
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
void accept(iTraveler &visiter) override
Implementation of iTensor.
Definition: ifunctor.hpp:33
- -
virtual Opcode get_opcode(void) const =0
Return operation encoding.
-
Definition: coord.hpp:16
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
NElemT index(Shape shape, CoordT coord)
-
size_t code_
Numerical encoding of operation.
Definition: ifunctor.hpp:24
-
virtual void visit(iLeaf *leaf)=0
Visit leaf node.
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
- - - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 9f4c82717..000000000 --- a/docs/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Tenncor: Tenncor - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Tenncor
-
-
-

-

Synopsis

-

Tenncor libraries help developers build and evaluate tensor equations and its derivatives. A tensor is an N-dimensional container that organizes its content by some shape. An M by N matrix for instance, is a 2-dimensional tensor with a shape of [N, M] (according to Tenncor's x-y-z-... coordinate notation).

-

High-level diagram available: https://drive.google.com/file/d/1PrsFa7Duj4Whlu_m0lmFr5JGikGnU3gC/view?usp=sharing

-

Components

- -

This module supplies syntax tree for equation and generates derivative. Constraints to the equation is limited to each tensor's shape.

-
    -
  • DBG (Debug)
  • -
-

This module is contains debug libraries for ADE Graphs.

- -

This module is implements basic operations for Tenncor's ADE Tensor objects generated through pybinder. Additionally, ead also defines data format and (de)serialization methods required by PBM.

-
    -
  • OPT (Optimizer)
  • -
-

This module specifies graph optimization through ADE's visitor pattern.

- -

This module marshals any ADE graph, but requires data serialization functors when saving and loading.

-
    -
  • TAG (Tagger)
  • -
-

This module tags ADE tensors with labels.

-

Tools and utility

-
    -
  • DBG (Debugger)
  • -
-

Building

-

Tenncor uses bazel 0.28+.

-

Download bazel: https://docs.bazel.build/versions/master/install.html

-
- - - - diff --git a/docs/inherit_graph_0.map b/docs/inherit_graph_0.map deleted file mode 100644 index ae8b3b145..000000000 --- a/docs/inherit_graph_0.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_0.md5 b/docs/inherit_graph_0.md5 deleted file mode 100644 index b8610a271..000000000 --- a/docs/inherit_graph_0.md5 +++ /dev/null @@ -1 +0,0 @@ -ec4ac5edf48fa1b386d602761d42a0a2 \ No newline at end of file diff --git a/docs/inherit_graph_0.png b/docs/inherit_graph_0.png deleted file mode 100644 index a75a94cd1..000000000 Binary files a/docs/inherit_graph_0.png and /dev/null differ diff --git a/docs/inherit_graph_1.map b/docs/inherit_graph_1.map deleted file mode 100644 index af940f167..000000000 --- a/docs/inherit_graph_1.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_1.md5 b/docs/inherit_graph_1.md5 deleted file mode 100644 index 4ea1680af..000000000 --- a/docs/inherit_graph_1.md5 +++ /dev/null @@ -1 +0,0 @@ -681886438b583dfe92c7823f1bb634c3 \ No newline at end of file diff --git a/docs/inherit_graph_1.png b/docs/inherit_graph_1.png deleted file mode 100644 index ccf1c4e98..000000000 Binary files a/docs/inherit_graph_1.png and /dev/null differ diff --git a/docs/inherit_graph_10.map b/docs/inherit_graph_10.map deleted file mode 100644 index fdf5c54e3..000000000 --- a/docs/inherit_graph_10.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_10.md5 b/docs/inherit_graph_10.md5 deleted file mode 100644 index b76636624..000000000 --- a/docs/inherit_graph_10.md5 +++ /dev/null @@ -1 +0,0 @@ -b73e2d6ec74a93e30a2eacc8272b0499 \ No newline at end of file diff --git a/docs/inherit_graph_10.png b/docs/inherit_graph_10.png deleted file mode 100644 index 9956d5c6e..000000000 Binary files a/docs/inherit_graph_10.png and /dev/null differ diff --git a/docs/inherit_graph_11.map b/docs/inherit_graph_11.map deleted file mode 100644 index e915f4cbc..000000000 --- a/docs/inherit_graph_11.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_11.md5 b/docs/inherit_graph_11.md5 deleted file mode 100644 index dd65e0e79..000000000 --- a/docs/inherit_graph_11.md5 +++ /dev/null @@ -1 +0,0 @@ -5957f551b028cc235265ef0a20597d8a \ No newline at end of file diff --git a/docs/inherit_graph_11.png b/docs/inherit_graph_11.png deleted file mode 100644 index 0e74f16ea..000000000 Binary files a/docs/inherit_graph_11.png and /dev/null differ diff --git a/docs/inherit_graph_12.map b/docs/inherit_graph_12.map deleted file mode 100644 index f43d4b745..000000000 --- a/docs/inherit_graph_12.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_12.md5 b/docs/inherit_graph_12.md5 deleted file mode 100644 index efb0485ba..000000000 --- a/docs/inherit_graph_12.md5 +++ /dev/null @@ -1 +0,0 @@ -67ceb57a580163c11b5f57bf9f8acb09 \ No newline at end of file diff --git a/docs/inherit_graph_12.png b/docs/inherit_graph_12.png deleted file mode 100644 index d69e267e5..000000000 Binary files a/docs/inherit_graph_12.png and /dev/null differ diff --git a/docs/inherit_graph_13.map b/docs/inherit_graph_13.map deleted file mode 100644 index b0641240d..000000000 --- a/docs/inherit_graph_13.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_13.md5 b/docs/inherit_graph_13.md5 deleted file mode 100644 index d0c669c3f..000000000 --- a/docs/inherit_graph_13.md5 +++ /dev/null @@ -1 +0,0 @@ -b61de973c7e46ac47d1a02c522b42ad8 \ No newline at end of file diff --git a/docs/inherit_graph_13.png b/docs/inherit_graph_13.png deleted file mode 100644 index 6d30f53f6..000000000 Binary files a/docs/inherit_graph_13.png and /dev/null differ diff --git a/docs/inherit_graph_14.map b/docs/inherit_graph_14.map deleted file mode 100644 index 8dd1f545e..000000000 --- a/docs/inherit_graph_14.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_14.md5 b/docs/inherit_graph_14.md5 deleted file mode 100644 index 77ff7ffca..000000000 --- a/docs/inherit_graph_14.md5 +++ /dev/null @@ -1 +0,0 @@ -f31297d891609fd43ef48b2f07a16fc5 \ No newline at end of file diff --git a/docs/inherit_graph_14.png b/docs/inherit_graph_14.png deleted file mode 100644 index 875ccb29a..000000000 Binary files a/docs/inherit_graph_14.png and /dev/null differ diff --git a/docs/inherit_graph_15.map b/docs/inherit_graph_15.map deleted file mode 100644 index 4bfd9ebc9..000000000 --- a/docs/inherit_graph_15.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_15.md5 b/docs/inherit_graph_15.md5 deleted file mode 100644 index 7b0643cef..000000000 --- a/docs/inherit_graph_15.md5 +++ /dev/null @@ -1 +0,0 @@ -69f877d55cd5db67f9702ae53ec8ff2f \ No newline at end of file diff --git a/docs/inherit_graph_15.png b/docs/inherit_graph_15.png deleted file mode 100644 index 043a361ac..000000000 Binary files a/docs/inherit_graph_15.png and /dev/null differ diff --git a/docs/inherit_graph_16.map b/docs/inherit_graph_16.map deleted file mode 100644 index 76871bd3d..000000000 --- a/docs/inherit_graph_16.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_16.md5 b/docs/inherit_graph_16.md5 deleted file mode 100644 index 087ff5915..000000000 --- a/docs/inherit_graph_16.md5 +++ /dev/null @@ -1 +0,0 @@ -5a831c87995f18a284a8ab0b2648052d \ No newline at end of file diff --git a/docs/inherit_graph_16.png b/docs/inherit_graph_16.png deleted file mode 100644 index b129ca0bd..000000000 Binary files a/docs/inherit_graph_16.png and /dev/null differ diff --git a/docs/inherit_graph_17.map b/docs/inherit_graph_17.map deleted file mode 100644 index 98ca10449..000000000 --- a/docs/inherit_graph_17.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_17.md5 b/docs/inherit_graph_17.md5 deleted file mode 100644 index 5ab0b6a11..000000000 --- a/docs/inherit_graph_17.md5 +++ /dev/null @@ -1 +0,0 @@ -34c798406aa8a899b3f6ea3ea326ba80 \ No newline at end of file diff --git a/docs/inherit_graph_17.png b/docs/inherit_graph_17.png deleted file mode 100644 index 6afbd2fa8..000000000 Binary files a/docs/inherit_graph_17.png and /dev/null differ diff --git a/docs/inherit_graph_18.map b/docs/inherit_graph_18.map deleted file mode 100644 index d798c3f44..000000000 --- a/docs/inherit_graph_18.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_18.md5 b/docs/inherit_graph_18.md5 deleted file mode 100644 index f66da780f..000000000 --- a/docs/inherit_graph_18.md5 +++ /dev/null @@ -1 +0,0 @@ -150ca1b177c104c2c00f89aebfc09c70 \ No newline at end of file diff --git a/docs/inherit_graph_18.png b/docs/inherit_graph_18.png deleted file mode 100644 index d5e1f092f..000000000 Binary files a/docs/inherit_graph_18.png and /dev/null differ diff --git a/docs/inherit_graph_19.map b/docs/inherit_graph_19.map deleted file mode 100644 index ab80eacdd..000000000 --- a/docs/inherit_graph_19.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_19.md5 b/docs/inherit_graph_19.md5 deleted file mode 100644 index 888edbcce..000000000 --- a/docs/inherit_graph_19.md5 +++ /dev/null @@ -1 +0,0 @@ -b82400e392554bfcd7c9b89e84723a41 \ No newline at end of file diff --git a/docs/inherit_graph_19.png b/docs/inherit_graph_19.png deleted file mode 100644 index aa514502f..000000000 Binary files a/docs/inherit_graph_19.png and /dev/null differ diff --git a/docs/inherit_graph_2.map b/docs/inherit_graph_2.map deleted file mode 100644 index 341a3e340..000000000 --- a/docs/inherit_graph_2.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/inherit_graph_2.md5 b/docs/inherit_graph_2.md5 deleted file mode 100644 index 83d7f9689..000000000 --- a/docs/inherit_graph_2.md5 +++ /dev/null @@ -1 +0,0 @@ -0c614da49c4692fcec6b6146689e390d \ No newline at end of file diff --git a/docs/inherit_graph_2.png b/docs/inherit_graph_2.png deleted file mode 100644 index 0c4c5e94b..000000000 Binary files a/docs/inherit_graph_2.png and /dev/null differ diff --git a/docs/inherit_graph_20.map b/docs/inherit_graph_20.map deleted file mode 100644 index cad236e60..000000000 --- a/docs/inherit_graph_20.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_20.md5 b/docs/inherit_graph_20.md5 deleted file mode 100644 index 33c529c0b..000000000 --- a/docs/inherit_graph_20.md5 +++ /dev/null @@ -1 +0,0 @@ -28aa716213ee6f4de81c36fb0852c122 \ No newline at end of file diff --git a/docs/inherit_graph_20.png b/docs/inherit_graph_20.png deleted file mode 100644 index 7dd715a89..000000000 Binary files a/docs/inherit_graph_20.png and /dev/null differ diff --git a/docs/inherit_graph_21.map b/docs/inherit_graph_21.map deleted file mode 100644 index 1a78f8d5d..000000000 --- a/docs/inherit_graph_21.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/inherit_graph_21.md5 b/docs/inherit_graph_21.md5 deleted file mode 100644 index 4664f41d5..000000000 --- a/docs/inherit_graph_21.md5 +++ /dev/null @@ -1 +0,0 @@ -b1e78db38d3e24b9da32742c7eebae8a \ No newline at end of file diff --git a/docs/inherit_graph_21.png b/docs/inherit_graph_21.png deleted file mode 100644 index db9c7b983..000000000 Binary files a/docs/inherit_graph_21.png and /dev/null differ diff --git a/docs/inherit_graph_22.map b/docs/inherit_graph_22.map deleted file mode 100644 index 3480b572f..000000000 --- a/docs/inherit_graph_22.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/inherit_graph_22.md5 b/docs/inherit_graph_22.md5 deleted file mode 100644 index d66e5ae55..000000000 --- a/docs/inherit_graph_22.md5 +++ /dev/null @@ -1 +0,0 @@ -a0fd1337c33cec14052b110d8b55fa91 \ No newline at end of file diff --git a/docs/inherit_graph_22.png b/docs/inherit_graph_22.png deleted file mode 100644 index 08ea8aa47..000000000 Binary files a/docs/inherit_graph_22.png and /dev/null differ diff --git a/docs/inherit_graph_23.map b/docs/inherit_graph_23.map deleted file mode 100644 index b8040ab0a..000000000 --- a/docs/inherit_graph_23.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/inherit_graph_23.md5 b/docs/inherit_graph_23.md5 deleted file mode 100644 index 53e39d08a..000000000 --- a/docs/inherit_graph_23.md5 +++ /dev/null @@ -1 +0,0 @@ -83a1dee7131d0ee2e8c64d124747bfb8 \ No newline at end of file diff --git a/docs/inherit_graph_23.png b/docs/inherit_graph_23.png deleted file mode 100644 index 22447a89c..000000000 Binary files a/docs/inherit_graph_23.png and /dev/null differ diff --git a/docs/inherit_graph_24.map b/docs/inherit_graph_24.map deleted file mode 100644 index d5834ba38..000000000 --- a/docs/inherit_graph_24.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_24.md5 b/docs/inherit_graph_24.md5 deleted file mode 100644 index 3a1093adf..000000000 --- a/docs/inherit_graph_24.md5 +++ /dev/null @@ -1 +0,0 @@ -f61cfa38207f1c7c5b5769a713fe429e \ No newline at end of file diff --git a/docs/inherit_graph_24.png b/docs/inherit_graph_24.png deleted file mode 100644 index 9ba18970b..000000000 Binary files a/docs/inherit_graph_24.png and /dev/null differ diff --git a/docs/inherit_graph_25.map b/docs/inherit_graph_25.map deleted file mode 100644 index aec7261dc..000000000 --- a/docs/inherit_graph_25.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_25.md5 b/docs/inherit_graph_25.md5 deleted file mode 100644 index 4dbe0fe55..000000000 --- a/docs/inherit_graph_25.md5 +++ /dev/null @@ -1 +0,0 @@ -d343b057418298268335fa2d9060cf8e \ No newline at end of file diff --git a/docs/inherit_graph_25.png b/docs/inherit_graph_25.png deleted file mode 100644 index 476562eb7..000000000 Binary files a/docs/inherit_graph_25.png and /dev/null differ diff --git a/docs/inherit_graph_26.map b/docs/inherit_graph_26.map deleted file mode 100644 index 80352382d..000000000 --- a/docs/inherit_graph_26.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_26.md5 b/docs/inherit_graph_26.md5 deleted file mode 100644 index da4856d10..000000000 --- a/docs/inherit_graph_26.md5 +++ /dev/null @@ -1 +0,0 @@ -128f49185309148e9aacccdf8821db48 \ No newline at end of file diff --git a/docs/inherit_graph_26.png b/docs/inherit_graph_26.png deleted file mode 100644 index d5abb5e08..000000000 Binary files a/docs/inherit_graph_26.png and /dev/null differ diff --git a/docs/inherit_graph_27.map b/docs/inherit_graph_27.map deleted file mode 100644 index a9193c9f4..000000000 --- a/docs/inherit_graph_27.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_27.md5 b/docs/inherit_graph_27.md5 deleted file mode 100644 index 35ef3f6a5..000000000 --- a/docs/inherit_graph_27.md5 +++ /dev/null @@ -1 +0,0 @@ -8171f72f1e99c14f9e2ac3b0d5c6cef3 \ No newline at end of file diff --git a/docs/inherit_graph_27.png b/docs/inherit_graph_27.png deleted file mode 100644 index 95810fd63..000000000 Binary files a/docs/inherit_graph_27.png and /dev/null differ diff --git a/docs/inherit_graph_28.map b/docs/inherit_graph_28.map deleted file mode 100644 index b4225590e..000000000 --- a/docs/inherit_graph_28.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_28.md5 b/docs/inherit_graph_28.md5 deleted file mode 100644 index 4a4dcf913..000000000 --- a/docs/inherit_graph_28.md5 +++ /dev/null @@ -1 +0,0 @@ -f83640f1eafca9c1feb6b0953f19b11d \ No newline at end of file diff --git a/docs/inherit_graph_28.png b/docs/inherit_graph_28.png deleted file mode 100644 index edf6937f4..000000000 Binary files a/docs/inherit_graph_28.png and /dev/null differ diff --git a/docs/inherit_graph_29.map b/docs/inherit_graph_29.map deleted file mode 100644 index 7780ffc32..000000000 --- a/docs/inherit_graph_29.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_29.md5 b/docs/inherit_graph_29.md5 deleted file mode 100644 index a136d3ccc..000000000 --- a/docs/inherit_graph_29.md5 +++ /dev/null @@ -1 +0,0 @@ -ee991640ffb52a7dc2b9b2e3279d70d5 \ No newline at end of file diff --git a/docs/inherit_graph_29.png b/docs/inherit_graph_29.png deleted file mode 100644 index b5bf5ce6d..000000000 Binary files a/docs/inherit_graph_29.png and /dev/null differ diff --git a/docs/inherit_graph_3.map b/docs/inherit_graph_3.map deleted file mode 100644 index 1e9f445f6..000000000 --- a/docs/inherit_graph_3.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/inherit_graph_3.md5 b/docs/inherit_graph_3.md5 deleted file mode 100644 index bb9601fe3..000000000 --- a/docs/inherit_graph_3.md5 +++ /dev/null @@ -1 +0,0 @@ -7150a8e67c2fb16ff1d051a8da9d6ec0 \ No newline at end of file diff --git a/docs/inherit_graph_3.png b/docs/inherit_graph_3.png deleted file mode 100644 index dc85f9a05..000000000 Binary files a/docs/inherit_graph_3.png and /dev/null differ diff --git a/docs/inherit_graph_30.map b/docs/inherit_graph_30.map deleted file mode 100644 index b353c6c0a..000000000 --- a/docs/inherit_graph_30.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_30.md5 b/docs/inherit_graph_30.md5 deleted file mode 100644 index bfeb43c15..000000000 --- a/docs/inherit_graph_30.md5 +++ /dev/null @@ -1 +0,0 @@ -df508d54561111bbae3c7a0f2400a695 \ No newline at end of file diff --git a/docs/inherit_graph_30.png b/docs/inherit_graph_30.png deleted file mode 100644 index 12bbbdb48..000000000 Binary files a/docs/inherit_graph_30.png and /dev/null differ diff --git a/docs/inherit_graph_31.map b/docs/inherit_graph_31.map deleted file mode 100644 index b961e7de2..000000000 --- a/docs/inherit_graph_31.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_31.md5 b/docs/inherit_graph_31.md5 deleted file mode 100644 index 401871674..000000000 --- a/docs/inherit_graph_31.md5 +++ /dev/null @@ -1 +0,0 @@ -e46af9ea8ec18394be097612605e63d5 \ No newline at end of file diff --git a/docs/inherit_graph_31.png b/docs/inherit_graph_31.png deleted file mode 100644 index 8a29c6ab5..000000000 Binary files a/docs/inherit_graph_31.png and /dev/null differ diff --git a/docs/inherit_graph_32.map b/docs/inherit_graph_32.map deleted file mode 100644 index 7c073cde1..000000000 --- a/docs/inherit_graph_32.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_32.md5 b/docs/inherit_graph_32.md5 deleted file mode 100644 index 76284e562..000000000 --- a/docs/inherit_graph_32.md5 +++ /dev/null @@ -1 +0,0 @@ -eab6bcd6b94ee2c9f680ef0ca1cb34f4 \ No newline at end of file diff --git a/docs/inherit_graph_32.png b/docs/inherit_graph_32.png deleted file mode 100644 index 01d725a44..000000000 Binary files a/docs/inherit_graph_32.png and /dev/null differ diff --git a/docs/inherit_graph_33.map b/docs/inherit_graph_33.map deleted file mode 100644 index 096fcfc73..000000000 --- a/docs/inherit_graph_33.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_33.md5 b/docs/inherit_graph_33.md5 deleted file mode 100644 index c8a709977..000000000 --- a/docs/inherit_graph_33.md5 +++ /dev/null @@ -1 +0,0 @@ -a232d6bcff0caf205d4d89e0ee97575c \ No newline at end of file diff --git a/docs/inherit_graph_33.png b/docs/inherit_graph_33.png deleted file mode 100644 index 1d477d39c..000000000 Binary files a/docs/inherit_graph_33.png and /dev/null differ diff --git a/docs/inherit_graph_34.map b/docs/inherit_graph_34.map deleted file mode 100644 index 5576b919b..000000000 --- a/docs/inherit_graph_34.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_34.md5 b/docs/inherit_graph_34.md5 deleted file mode 100644 index 4927c476b..000000000 --- a/docs/inherit_graph_34.md5 +++ /dev/null @@ -1 +0,0 @@ -c1a675b5d48427a5d7c855fcff2146a6 \ No newline at end of file diff --git a/docs/inherit_graph_34.png b/docs/inherit_graph_34.png deleted file mode 100644 index cbc00be5a..000000000 Binary files a/docs/inherit_graph_34.png and /dev/null differ diff --git a/docs/inherit_graph_35.map b/docs/inherit_graph_35.map deleted file mode 100644 index 74bf47469..000000000 --- a/docs/inherit_graph_35.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_35.md5 b/docs/inherit_graph_35.md5 deleted file mode 100644 index b0a995c9d..000000000 --- a/docs/inherit_graph_35.md5 +++ /dev/null @@ -1 +0,0 @@ -702d23ea96ea8b24b63310b123294f2b \ No newline at end of file diff --git a/docs/inherit_graph_35.png b/docs/inherit_graph_35.png deleted file mode 100644 index 412acb4cf..000000000 Binary files a/docs/inherit_graph_35.png and /dev/null differ diff --git a/docs/inherit_graph_36.map b/docs/inherit_graph_36.map deleted file mode 100644 index 907a6bbd6..000000000 --- a/docs/inherit_graph_36.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/inherit_graph_36.md5 b/docs/inherit_graph_36.md5 deleted file mode 100644 index 590bc946f..000000000 --- a/docs/inherit_graph_36.md5 +++ /dev/null @@ -1 +0,0 @@ -24f6f3e3c9dc16677fc06b166a6320e2 \ No newline at end of file diff --git a/docs/inherit_graph_36.png b/docs/inherit_graph_36.png deleted file mode 100644 index 30778f6d6..000000000 Binary files a/docs/inherit_graph_36.png and /dev/null differ diff --git a/docs/inherit_graph_37.map b/docs/inherit_graph_37.map deleted file mode 100644 index 6476e665c..000000000 --- a/docs/inherit_graph_37.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/inherit_graph_37.md5 b/docs/inherit_graph_37.md5 deleted file mode 100644 index 7919c2db4..000000000 --- a/docs/inherit_graph_37.md5 +++ /dev/null @@ -1 +0,0 @@ -3227ee6b0e2ddc996d16748cc1c4782a \ No newline at end of file diff --git a/docs/inherit_graph_37.png b/docs/inherit_graph_37.png deleted file mode 100644 index fb2aef429..000000000 Binary files a/docs/inherit_graph_37.png and /dev/null differ diff --git a/docs/inherit_graph_38.map b/docs/inherit_graph_38.map deleted file mode 100644 index e942120bd..000000000 --- a/docs/inherit_graph_38.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/inherit_graph_38.md5 b/docs/inherit_graph_38.md5 deleted file mode 100644 index fc001e133..000000000 --- a/docs/inherit_graph_38.md5 +++ /dev/null @@ -1 +0,0 @@ -4e3d60922c46d66caffd7999e382dad9 \ No newline at end of file diff --git a/docs/inherit_graph_38.png b/docs/inherit_graph_38.png deleted file mode 100644 index cb471861a..000000000 Binary files a/docs/inherit_graph_38.png and /dev/null differ diff --git a/docs/inherit_graph_39.map b/docs/inherit_graph_39.map deleted file mode 100644 index bf6228a37..000000000 --- a/docs/inherit_graph_39.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_39.md5 b/docs/inherit_graph_39.md5 deleted file mode 100644 index a3729c4e4..000000000 --- a/docs/inherit_graph_39.md5 +++ /dev/null @@ -1 +0,0 @@ -6721f4a765f0b1f3dc08c018d1464f40 \ No newline at end of file diff --git a/docs/inherit_graph_39.png b/docs/inherit_graph_39.png deleted file mode 100644 index 99c4b03c7..000000000 Binary files a/docs/inherit_graph_39.png and /dev/null differ diff --git a/docs/inherit_graph_4.map b/docs/inherit_graph_4.map deleted file mode 100644 index c8aa0c0c6..000000000 --- a/docs/inherit_graph_4.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/inherit_graph_4.md5 b/docs/inherit_graph_4.md5 deleted file mode 100644 index 1c4a924d0..000000000 --- a/docs/inherit_graph_4.md5 +++ /dev/null @@ -1 +0,0 @@ -42f2992dc59816ab610eb7e3e90c6acc \ No newline at end of file diff --git a/docs/inherit_graph_4.png b/docs/inherit_graph_4.png deleted file mode 100644 index 32fb91478..000000000 Binary files a/docs/inherit_graph_4.png and /dev/null differ diff --git a/docs/inherit_graph_40.map b/docs/inherit_graph_40.map deleted file mode 100644 index c7f4a847c..000000000 --- a/docs/inherit_graph_40.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_40.md5 b/docs/inherit_graph_40.md5 deleted file mode 100644 index a4223f807..000000000 --- a/docs/inherit_graph_40.md5 +++ /dev/null @@ -1 +0,0 @@ -ef28d35624bcd7af902b7786dcdc8f99 \ No newline at end of file diff --git a/docs/inherit_graph_40.png b/docs/inherit_graph_40.png deleted file mode 100644 index 15e16d532..000000000 Binary files a/docs/inherit_graph_40.png and /dev/null differ diff --git a/docs/inherit_graph_41.map b/docs/inherit_graph_41.map deleted file mode 100644 index 10fa9a794..000000000 --- a/docs/inherit_graph_41.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_41.md5 b/docs/inherit_graph_41.md5 deleted file mode 100644 index 75bbb5af3..000000000 --- a/docs/inherit_graph_41.md5 +++ /dev/null @@ -1 +0,0 @@ -efd74d3e549d1905c25815dacf3f3cca \ No newline at end of file diff --git a/docs/inherit_graph_41.png b/docs/inherit_graph_41.png deleted file mode 100644 index c9e6e7296..000000000 Binary files a/docs/inherit_graph_41.png and /dev/null differ diff --git a/docs/inherit_graph_42.map b/docs/inherit_graph_42.map deleted file mode 100644 index de2c0e725..000000000 --- a/docs/inherit_graph_42.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_42.md5 b/docs/inherit_graph_42.md5 deleted file mode 100644 index 562c6b00e..000000000 --- a/docs/inherit_graph_42.md5 +++ /dev/null @@ -1 +0,0 @@ -d781fe9b2980d9265bc5999aeec5201b \ No newline at end of file diff --git a/docs/inherit_graph_42.png b/docs/inherit_graph_42.png deleted file mode 100644 index 6a2bc0cbc..000000000 Binary files a/docs/inherit_graph_42.png and /dev/null differ diff --git a/docs/inherit_graph_43.map b/docs/inherit_graph_43.map deleted file mode 100644 index 2fc45c011..000000000 --- a/docs/inherit_graph_43.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_43.md5 b/docs/inherit_graph_43.md5 deleted file mode 100644 index cd1def674..000000000 --- a/docs/inherit_graph_43.md5 +++ /dev/null @@ -1 +0,0 @@ -a7ebd1a82d1691be691c9d4706ea9d67 \ No newline at end of file diff --git a/docs/inherit_graph_43.png b/docs/inherit_graph_43.png deleted file mode 100644 index c42924443..000000000 Binary files a/docs/inherit_graph_43.png and /dev/null differ diff --git a/docs/inherit_graph_44.map b/docs/inherit_graph_44.map deleted file mode 100644 index c2f142aaa..000000000 --- a/docs/inherit_graph_44.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_44.md5 b/docs/inherit_graph_44.md5 deleted file mode 100644 index c70efc9fa..000000000 --- a/docs/inherit_graph_44.md5 +++ /dev/null @@ -1 +0,0 @@ -28c78246d31f6f2b460602718ea145cb \ No newline at end of file diff --git a/docs/inherit_graph_44.png b/docs/inherit_graph_44.png deleted file mode 100644 index 70842f534..000000000 Binary files a/docs/inherit_graph_44.png and /dev/null differ diff --git a/docs/inherit_graph_45.map b/docs/inherit_graph_45.map deleted file mode 100644 index 3d36f897e..000000000 --- a/docs/inherit_graph_45.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_45.md5 b/docs/inherit_graph_45.md5 deleted file mode 100644 index 46bd4af4f..000000000 --- a/docs/inherit_graph_45.md5 +++ /dev/null @@ -1 +0,0 @@ -7a1eaba1dc0a470bae88df669752995b \ No newline at end of file diff --git a/docs/inherit_graph_45.png b/docs/inherit_graph_45.png deleted file mode 100644 index 2fff232bb..000000000 Binary files a/docs/inherit_graph_45.png and /dev/null differ diff --git a/docs/inherit_graph_46.map b/docs/inherit_graph_46.map deleted file mode 100644 index e349b8dcc..000000000 --- a/docs/inherit_graph_46.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_46.md5 b/docs/inherit_graph_46.md5 deleted file mode 100644 index 94cd498bd..000000000 --- a/docs/inherit_graph_46.md5 +++ /dev/null @@ -1 +0,0 @@ -6e7d97a3301204812f1006b3ce873c9a \ No newline at end of file diff --git a/docs/inherit_graph_46.png b/docs/inherit_graph_46.png deleted file mode 100644 index 4cf2aa71b..000000000 Binary files a/docs/inherit_graph_46.png and /dev/null differ diff --git a/docs/inherit_graph_47.map b/docs/inherit_graph_47.map deleted file mode 100644 index 3353b2932..000000000 --- a/docs/inherit_graph_47.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_47.md5 b/docs/inherit_graph_47.md5 deleted file mode 100644 index b87e755d3..000000000 --- a/docs/inherit_graph_47.md5 +++ /dev/null @@ -1 +0,0 @@ -51973aee3848b3ed8f1cb891a7ce2960 \ No newline at end of file diff --git a/docs/inherit_graph_47.png b/docs/inherit_graph_47.png deleted file mode 100644 index 7fc536565..000000000 Binary files a/docs/inherit_graph_47.png and /dev/null differ diff --git a/docs/inherit_graph_48.map b/docs/inherit_graph_48.map deleted file mode 100644 index 0fec25538..000000000 --- a/docs/inherit_graph_48.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/inherit_graph_48.md5 b/docs/inherit_graph_48.md5 deleted file mode 100644 index 4a2a5b7f7..000000000 --- a/docs/inherit_graph_48.md5 +++ /dev/null @@ -1 +0,0 @@ -0799bfb6cd56c62c54ab230c5c9a09de \ No newline at end of file diff --git a/docs/inherit_graph_48.png b/docs/inherit_graph_48.png deleted file mode 100644 index 5d90518aa..000000000 Binary files a/docs/inherit_graph_48.png and /dev/null differ diff --git a/docs/inherit_graph_49.map b/docs/inherit_graph_49.map deleted file mode 100644 index 19e7123d6..000000000 --- a/docs/inherit_graph_49.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/inherit_graph_49.md5 b/docs/inherit_graph_49.md5 deleted file mode 100644 index 68d32d394..000000000 --- a/docs/inherit_graph_49.md5 +++ /dev/null @@ -1 +0,0 @@ -5c86a88de945d6904eb46fc352ccc763 \ No newline at end of file diff --git a/docs/inherit_graph_49.png b/docs/inherit_graph_49.png deleted file mode 100644 index dfaa398e4..000000000 Binary files a/docs/inherit_graph_49.png and /dev/null differ diff --git a/docs/inherit_graph_5.map b/docs/inherit_graph_5.map deleted file mode 100644 index fbb3ef981..000000000 --- a/docs/inherit_graph_5.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/inherit_graph_5.md5 b/docs/inherit_graph_5.md5 deleted file mode 100644 index 297052167..000000000 --- a/docs/inherit_graph_5.md5 +++ /dev/null @@ -1 +0,0 @@ -2707dee6e9a88fec8b65a1a6069f8c6e \ No newline at end of file diff --git a/docs/inherit_graph_5.png b/docs/inherit_graph_5.png deleted file mode 100644 index a0753e35c..000000000 Binary files a/docs/inherit_graph_5.png and /dev/null differ diff --git a/docs/inherit_graph_50.map b/docs/inherit_graph_50.map deleted file mode 100644 index 256b6bff6..000000000 --- a/docs/inherit_graph_50.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_50.md5 b/docs/inherit_graph_50.md5 deleted file mode 100644 index 440a42d22..000000000 --- a/docs/inherit_graph_50.md5 +++ /dev/null @@ -1 +0,0 @@ -4c8ad44dcc687ccdff6abfdaba7d9e8d \ No newline at end of file diff --git a/docs/inherit_graph_50.png b/docs/inherit_graph_50.png deleted file mode 100644 index a1e293acd..000000000 Binary files a/docs/inherit_graph_50.png and /dev/null differ diff --git a/docs/inherit_graph_51.map b/docs/inherit_graph_51.map deleted file mode 100644 index c37ac1361..000000000 --- a/docs/inherit_graph_51.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_51.md5 b/docs/inherit_graph_51.md5 deleted file mode 100644 index d3fc874ef..000000000 --- a/docs/inherit_graph_51.md5 +++ /dev/null @@ -1 +0,0 @@ -190e4104231b438aec5f7f097423e402 \ No newline at end of file diff --git a/docs/inherit_graph_51.png b/docs/inherit_graph_51.png deleted file mode 100644 index cccdefb30..000000000 Binary files a/docs/inherit_graph_51.png and /dev/null differ diff --git a/docs/inherit_graph_52.map b/docs/inherit_graph_52.map deleted file mode 100644 index 7353f0a81..000000000 --- a/docs/inherit_graph_52.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_52.md5 b/docs/inherit_graph_52.md5 deleted file mode 100644 index cdf92e74d..000000000 --- a/docs/inherit_graph_52.md5 +++ /dev/null @@ -1 +0,0 @@ -b168ce4b255f42e24c2da8ac9a67ba59 \ No newline at end of file diff --git a/docs/inherit_graph_52.png b/docs/inherit_graph_52.png deleted file mode 100644 index a639e1e9a..000000000 Binary files a/docs/inherit_graph_52.png and /dev/null differ diff --git a/docs/inherit_graph_53.map b/docs/inherit_graph_53.map deleted file mode 100644 index e61aa7e79..000000000 --- a/docs/inherit_graph_53.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_53.md5 b/docs/inherit_graph_53.md5 deleted file mode 100644 index 733c9e03f..000000000 --- a/docs/inherit_graph_53.md5 +++ /dev/null @@ -1 +0,0 @@ -ad38f5a7341c69c7a20717940a41b8bb \ No newline at end of file diff --git a/docs/inherit_graph_53.png b/docs/inherit_graph_53.png deleted file mode 100644 index 15ab15c83..000000000 Binary files a/docs/inherit_graph_53.png and /dev/null differ diff --git a/docs/inherit_graph_54.map b/docs/inherit_graph_54.map deleted file mode 100644 index 646c66d5d..000000000 --- a/docs/inherit_graph_54.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_54.md5 b/docs/inherit_graph_54.md5 deleted file mode 100644 index 3c40d0aac..000000000 --- a/docs/inherit_graph_54.md5 +++ /dev/null @@ -1 +0,0 @@ -d268875cddf69a6fab4ce55614348641 \ No newline at end of file diff --git a/docs/inherit_graph_54.png b/docs/inherit_graph_54.png deleted file mode 100644 index 9e3874f3c..000000000 Binary files a/docs/inherit_graph_54.png and /dev/null differ diff --git a/docs/inherit_graph_55.map b/docs/inherit_graph_55.map deleted file mode 100644 index 25206d167..000000000 --- a/docs/inherit_graph_55.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_55.md5 b/docs/inherit_graph_55.md5 deleted file mode 100644 index 336e43965..000000000 --- a/docs/inherit_graph_55.md5 +++ /dev/null @@ -1 +0,0 @@ -f3058b0d418b21b4648783a263bd74d9 \ No newline at end of file diff --git a/docs/inherit_graph_55.png b/docs/inherit_graph_55.png deleted file mode 100644 index c88cea0de..000000000 Binary files a/docs/inherit_graph_55.png and /dev/null differ diff --git a/docs/inherit_graph_56.map b/docs/inherit_graph_56.map deleted file mode 100644 index 6c56fc33a..000000000 --- a/docs/inherit_graph_56.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_56.md5 b/docs/inherit_graph_56.md5 deleted file mode 100644 index 74236a280..000000000 --- a/docs/inherit_graph_56.md5 +++ /dev/null @@ -1 +0,0 @@ -5068363531f861f33d96958c2e54ef4b \ No newline at end of file diff --git a/docs/inherit_graph_56.png b/docs/inherit_graph_56.png deleted file mode 100644 index f3459424c..000000000 Binary files a/docs/inherit_graph_56.png and /dev/null differ diff --git a/docs/inherit_graph_57.map b/docs/inherit_graph_57.map deleted file mode 100644 index bef784e4f..000000000 --- a/docs/inherit_graph_57.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_57.md5 b/docs/inherit_graph_57.md5 deleted file mode 100644 index 11ffcc711..000000000 --- a/docs/inherit_graph_57.md5 +++ /dev/null @@ -1 +0,0 @@ -f6e60e49dd91c72287ff7054cdba8838 \ No newline at end of file diff --git a/docs/inherit_graph_57.png b/docs/inherit_graph_57.png deleted file mode 100644 index 024dda917..000000000 Binary files a/docs/inherit_graph_57.png and /dev/null differ diff --git a/docs/inherit_graph_58.map b/docs/inherit_graph_58.map deleted file mode 100644 index f4bf8a236..000000000 --- a/docs/inherit_graph_58.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_58.md5 b/docs/inherit_graph_58.md5 deleted file mode 100644 index 62f135ebd..000000000 --- a/docs/inherit_graph_58.md5 +++ /dev/null @@ -1 +0,0 @@ -377e6b107884b2b5b1b644d3c6c295c0 \ No newline at end of file diff --git a/docs/inherit_graph_58.png b/docs/inherit_graph_58.png deleted file mode 100644 index cdd8867f8..000000000 Binary files a/docs/inherit_graph_58.png and /dev/null differ diff --git a/docs/inherit_graph_59.map b/docs/inherit_graph_59.map deleted file mode 100644 index 236105540..000000000 --- a/docs/inherit_graph_59.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_59.md5 b/docs/inherit_graph_59.md5 deleted file mode 100644 index a39d30f21..000000000 --- a/docs/inherit_graph_59.md5 +++ /dev/null @@ -1 +0,0 @@ -1c2da110f936a36a94a360ac2ad5c885 \ No newline at end of file diff --git a/docs/inherit_graph_59.png b/docs/inherit_graph_59.png deleted file mode 100644 index 590e5d168..000000000 Binary files a/docs/inherit_graph_59.png and /dev/null differ diff --git a/docs/inherit_graph_6.map b/docs/inherit_graph_6.map deleted file mode 100644 index 995957c00..000000000 --- a/docs/inherit_graph_6.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_6.md5 b/docs/inherit_graph_6.md5 deleted file mode 100644 index 93f520a6b..000000000 --- a/docs/inherit_graph_6.md5 +++ /dev/null @@ -1 +0,0 @@ -b45b23b7edae9da0331a22d6675e7c95 \ No newline at end of file diff --git a/docs/inherit_graph_6.png b/docs/inherit_graph_6.png deleted file mode 100644 index c4b765007..000000000 Binary files a/docs/inherit_graph_6.png and /dev/null differ diff --git a/docs/inherit_graph_60.map b/docs/inherit_graph_60.map deleted file mode 100644 index ffb829cbe..000000000 --- a/docs/inherit_graph_60.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_60.md5 b/docs/inherit_graph_60.md5 deleted file mode 100644 index aa4f3bc57..000000000 --- a/docs/inherit_graph_60.md5 +++ /dev/null @@ -1 +0,0 @@ -822edde2b2af97c66c82436479c75d84 \ No newline at end of file diff --git a/docs/inherit_graph_60.png b/docs/inherit_graph_60.png deleted file mode 100644 index 852ea915a..000000000 Binary files a/docs/inherit_graph_60.png and /dev/null differ diff --git a/docs/inherit_graph_61.map b/docs/inherit_graph_61.map deleted file mode 100644 index 18361b79c..000000000 --- a/docs/inherit_graph_61.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_61.md5 b/docs/inherit_graph_61.md5 deleted file mode 100644 index 16a9791c7..000000000 --- a/docs/inherit_graph_61.md5 +++ /dev/null @@ -1 +0,0 @@ -d30a784f5ef0db565cd6cb20d754790b \ No newline at end of file diff --git a/docs/inherit_graph_61.png b/docs/inherit_graph_61.png deleted file mode 100644 index e8b4b8daf..000000000 Binary files a/docs/inherit_graph_61.png and /dev/null differ diff --git a/docs/inherit_graph_62.map b/docs/inherit_graph_62.map deleted file mode 100644 index eb9ccde03..000000000 --- a/docs/inherit_graph_62.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/inherit_graph_62.md5 b/docs/inherit_graph_62.md5 deleted file mode 100644 index e403d0a16..000000000 --- a/docs/inherit_graph_62.md5 +++ /dev/null @@ -1 +0,0 @@ -d789a1dc2da8d024378d9d42c1e68925 \ No newline at end of file diff --git a/docs/inherit_graph_62.png b/docs/inherit_graph_62.png deleted file mode 100644 index 612ee3190..000000000 Binary files a/docs/inherit_graph_62.png and /dev/null differ diff --git a/docs/inherit_graph_63.map b/docs/inherit_graph_63.map deleted file mode 100644 index a1043d643..000000000 --- a/docs/inherit_graph_63.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_63.md5 b/docs/inherit_graph_63.md5 deleted file mode 100644 index fad9138af..000000000 --- a/docs/inherit_graph_63.md5 +++ /dev/null @@ -1 +0,0 @@ -6401566f8bfeafe4f4a7b2f641af056b \ No newline at end of file diff --git a/docs/inherit_graph_63.png b/docs/inherit_graph_63.png deleted file mode 100644 index 3a998e96b..000000000 Binary files a/docs/inherit_graph_63.png and /dev/null differ diff --git a/docs/inherit_graph_64.map b/docs/inherit_graph_64.map deleted file mode 100644 index b22d64040..000000000 --- a/docs/inherit_graph_64.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_64.md5 b/docs/inherit_graph_64.md5 deleted file mode 100644 index 5e8a94b4a..000000000 --- a/docs/inherit_graph_64.md5 +++ /dev/null @@ -1 +0,0 @@ -1baf0922a18c23c8ceab04020eb3d1b7 \ No newline at end of file diff --git a/docs/inherit_graph_64.png b/docs/inherit_graph_64.png deleted file mode 100644 index 74ccefca1..000000000 Binary files a/docs/inherit_graph_64.png and /dev/null differ diff --git a/docs/inherit_graph_65.map b/docs/inherit_graph_65.map deleted file mode 100644 index d5290993d..000000000 --- a/docs/inherit_graph_65.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_65.md5 b/docs/inherit_graph_65.md5 deleted file mode 100644 index cd442ce34..000000000 --- a/docs/inherit_graph_65.md5 +++ /dev/null @@ -1 +0,0 @@ -af5f2f86b298089a1ab8fdc6c3789b4c \ No newline at end of file diff --git a/docs/inherit_graph_65.png b/docs/inherit_graph_65.png deleted file mode 100644 index 3b85af19f..000000000 Binary files a/docs/inherit_graph_65.png and /dev/null differ diff --git a/docs/inherit_graph_66.map b/docs/inherit_graph_66.map deleted file mode 100644 index e7a031411..000000000 --- a/docs/inherit_graph_66.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_66.md5 b/docs/inherit_graph_66.md5 deleted file mode 100644 index 3cb49b43d..000000000 --- a/docs/inherit_graph_66.md5 +++ /dev/null @@ -1 +0,0 @@ -7cc5d4710233adf8b9a86c91cc02a229 \ No newline at end of file diff --git a/docs/inherit_graph_66.png b/docs/inherit_graph_66.png deleted file mode 100644 index 1d2a1e555..000000000 Binary files a/docs/inherit_graph_66.png and /dev/null differ diff --git a/docs/inherit_graph_67.map b/docs/inherit_graph_67.map deleted file mode 100644 index ea1d53565..000000000 --- a/docs/inherit_graph_67.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_67.md5 b/docs/inherit_graph_67.md5 deleted file mode 100644 index e9774d950..000000000 --- a/docs/inherit_graph_67.md5 +++ /dev/null @@ -1 +0,0 @@ -434b8b1cfa5cc845697b29d709a038c7 \ No newline at end of file diff --git a/docs/inherit_graph_67.png b/docs/inherit_graph_67.png deleted file mode 100644 index b005f310f..000000000 Binary files a/docs/inherit_graph_67.png and /dev/null differ diff --git a/docs/inherit_graph_68.map b/docs/inherit_graph_68.map deleted file mode 100644 index ea1d53565..000000000 --- a/docs/inherit_graph_68.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_68.md5 b/docs/inherit_graph_68.md5 deleted file mode 100644 index e9774d950..000000000 --- a/docs/inherit_graph_68.md5 +++ /dev/null @@ -1 +0,0 @@ -434b8b1cfa5cc845697b29d709a038c7 \ No newline at end of file diff --git a/docs/inherit_graph_68.png b/docs/inherit_graph_68.png deleted file mode 100644 index b005f310f..000000000 Binary files a/docs/inherit_graph_68.png and /dev/null differ diff --git a/docs/inherit_graph_7.map b/docs/inherit_graph_7.map deleted file mode 100644 index 9e1386343..000000000 --- a/docs/inherit_graph_7.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_7.md5 b/docs/inherit_graph_7.md5 deleted file mode 100644 index c7449a1f3..000000000 --- a/docs/inherit_graph_7.md5 +++ /dev/null @@ -1 +0,0 @@ -e0981d1a98232791a19b350c284dc893 \ No newline at end of file diff --git a/docs/inherit_graph_7.png b/docs/inherit_graph_7.png deleted file mode 100644 index 1d44b3c91..000000000 Binary files a/docs/inherit_graph_7.png and /dev/null differ diff --git a/docs/inherit_graph_8.map b/docs/inherit_graph_8.map deleted file mode 100644 index 742e5f0cc..000000000 --- a/docs/inherit_graph_8.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_8.md5 b/docs/inherit_graph_8.md5 deleted file mode 100644 index 70bcbaedd..000000000 --- a/docs/inherit_graph_8.md5 +++ /dev/null @@ -1 +0,0 @@ -ed2a1826f525bad5bde8fea757ddc759 \ No newline at end of file diff --git a/docs/inherit_graph_8.png b/docs/inherit_graph_8.png deleted file mode 100644 index 8bf426278..000000000 Binary files a/docs/inherit_graph_8.png and /dev/null differ diff --git a/docs/inherit_graph_9.map b/docs/inherit_graph_9.map deleted file mode 100644 index e9e3fac81..000000000 --- a/docs/inherit_graph_9.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/inherit_graph_9.md5 b/docs/inherit_graph_9.md5 deleted file mode 100644 index f3f8d8596..000000000 --- a/docs/inherit_graph_9.md5 +++ /dev/null @@ -1 +0,0 @@ -6fe07c56c6d3d0b176f83024985ff1c3 \ No newline at end of file diff --git a/docs/inherit_graph_9.png b/docs/inherit_graph_9.png deleted file mode 100644 index dbbe5f098..000000000 Binary files a/docs/inherit_graph_9.png and /dev/null differ diff --git a/docs/inherits.html b/docs/inherits.html deleted file mode 100644 index a5ceaae0a..000000000 --- a/docs/inherits.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - -Tenncor: Class Hierarchy - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - - - -
- - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - -
- - - - - - -
- - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - - -
- - - - -
- - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - -
- - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
- - - - diff --git a/docs/inode_8hpp.html b/docs/inode_8hpp.html deleted file mode 100644 index 80494d852..000000000 --- a/docs/inode_8hpp.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Tenncor: ead/inode.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
inode.hpp File Reference
-
-
-
#include "estd/estd.hpp"
-#include "ade/itensor.hpp"
-#include "ead/eigen.hpp"
-
-Include dependency graph for inode.hpp:
-
-
- - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - -

-Classes

struct  ead::iNode< T >
 
struct  ead::NodeConverters< T >
 
- - - -

-Namespaces

 ead
 
- - - - - - - - - - -

-Typedefs

template<typename T >
using ead::NodeptrT = std::shared_ptr< iNode< T > >
 
template<typename T >
using ead::NodesT = std::vector< NodeptrT< T > >
 
template<typename T >
using ead::NodeBuilderF = std::function< NodeptrT< T >(ade::TensptrT)>
 
- - - - -

-Functions

template<typename TensType , typename T >
bool ead::register_builder (NodeBuilderF< T > builder)
 
-
- - - - diff --git a/docs/inode_8hpp__dep__incl.map b/docs/inode_8hpp__dep__incl.map deleted file mode 100644 index c20ba7645..000000000 --- a/docs/inode_8hpp__dep__incl.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/inode_8hpp__dep__incl.md5 b/docs/inode_8hpp__dep__incl.md5 deleted file mode 100644 index a437b7df9..000000000 --- a/docs/inode_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -505a21ed59c99844bd4386f4838b57b3 \ No newline at end of file diff --git a/docs/inode_8hpp__dep__incl.png b/docs/inode_8hpp__dep__incl.png deleted file mode 100644 index 3b48196d9..000000000 Binary files a/docs/inode_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/inode_8hpp__incl.map b/docs/inode_8hpp__incl.map deleted file mode 100644 index 30f9aa862..000000000 --- a/docs/inode_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/inode_8hpp__incl.md5 b/docs/inode_8hpp__incl.md5 deleted file mode 100644 index b6febda09..000000000 --- a/docs/inode_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5172320b7e190cb519af470dffe55faa \ No newline at end of file diff --git a/docs/inode_8hpp__incl.png b/docs/inode_8hpp__incl.png deleted file mode 100644 index 9bbe60734..000000000 Binary files a/docs/inode_8hpp__incl.png and /dev/null differ diff --git a/docs/inode_8hpp_source.html b/docs/inode_8hpp_source.html deleted file mode 100644 index 37b9d3483..000000000 --- a/docs/inode_8hpp_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Tenncor: ead/inode.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
inode.hpp
-
-
-Go to the documentation of this file.
1 #include "estd/estd.hpp"
2 
3 #include "ade/itensor.hpp"
4 
5 #include "ead/eigen.hpp"
6 
7 #ifndef EAD_INODE_HPP
8 #define EAD_INODE_HPP
9 
10 namespace ead
11 {
12 
13 template <typename T>
14 struct iNode
15 {
16  virtual ~iNode (void) = default;
17 
19  {
20  return get_tensor()->shape();
21  }
22 
23  virtual T* data (void) = 0;
24 
25  virtual void update (void) = 0;
26 
27  virtual ade::TensptrT get_tensor (void) = 0;
28 };
29 
30 template <typename T>
31 using NodeptrT = std::shared_ptr<iNode<T>>;
32 
33 template <typename T>
34 using NodesT = std::vector<NodeptrT<T>>;
35 
36 template <typename T>
37 using NodeBuilderF = std::function<NodeptrT<T>(ade::TensptrT)>;
38 
39 template <typename T>
40 struct NodeConverters final
41 {
42  static std::unordered_map<size_t,NodeBuilderF<T>> builders_;
43 
45  {
46  const std::type_info& tp = typeid(*tens);
47  return estd::must_getf(builders_, tp.hash_code(),
48  "unknown tensor type %s with %s dtype",
49  tp.name(), age::name_type(age::get_type<T>()).c_str())(tens);
50  }
51 
52  NodeConverters (void) = delete;
53 };
54 
55 template <typename T>
56 std::unordered_map<size_t,NodeBuilderF<T>> NodeConverters<T>::builders_;
57 
58 template <typename TensType, typename T>
60 {
61  const std::type_info& tp = typeid(TensType);
63  emplace(tp.hash_code(), builder).second;
64 }
65 
66 }
67 
68 #endif // EAD_INODE_HPP
Definition: inode.hpp:40
-
std::shared_ptr< iNode< T > > NodeptrT
Definition: inode.hpp:31
-
bool register_builder(NodeBuilderF< T > builder)
Definition: inode.hpp:59
-
Definition: constant.hpp:9
- -
NodeConverters(void)=delete
-
virtual ~iNode(void)=default
-
virtual ade::TensptrT get_tensor(void)=0
-
static NodeptrT< T > to_node(ade::TensptrT tens)
Definition: inode.hpp:44
-
Definition: inode.hpp:14
-
ade::Shape shape(void)
Definition: inode.hpp:18
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
virtual void update(void)=0
-
Definition: shape.hpp:60
-
std::function< NodeptrT< T >(ade::TensptrT)> NodeBuilderF
Definition: inode.hpp:37
- -
virtual T * data(void)=0
-
static std::unordered_map< size_t, NodeBuilderF< T > > builders_
Definition: inode.hpp:42
-
std::vector< NodeptrT< T > > NodesT
Definition: inode.hpp:34
-
- - - - diff --git a/docs/iopfunc_8hpp.html b/docs/iopfunc_8hpp.html deleted file mode 100644 index 94c4df73a..000000000 --- a/docs/iopfunc_8hpp.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Tenncor: ade/iopfunc.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
iopfunc.hpp File Reference
-
-
-
#include "ade/ifunctor.hpp"
-#include "ade/idata.hpp"
-
-Include dependency graph for iopfunc.hpp:
-
-
- - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ade::iOperableFunc
 A functor node with direct access to evaluated data. More...
 
- - - -

-Namespaces

 ade
 
-
- - - - diff --git a/docs/iopfunc_8hpp__dep__incl.map b/docs/iopfunc_8hpp__dep__incl.map deleted file mode 100644 index 7bb6bc481..000000000 --- a/docs/iopfunc_8hpp__dep__incl.map +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/iopfunc_8hpp__dep__incl.md5 b/docs/iopfunc_8hpp__dep__incl.md5 deleted file mode 100644 index 5a79f167e..000000000 --- a/docs/iopfunc_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e5a8cf2a74b0626edaa361738a6b3c12 \ No newline at end of file diff --git a/docs/iopfunc_8hpp__dep__incl.png b/docs/iopfunc_8hpp__dep__incl.png deleted file mode 100644 index b4431f48e..000000000 Binary files a/docs/iopfunc_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/iopfunc_8hpp__incl.map b/docs/iopfunc_8hpp__incl.map deleted file mode 100644 index b5359ab23..000000000 --- a/docs/iopfunc_8hpp__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/iopfunc_8hpp__incl.md5 b/docs/iopfunc_8hpp__incl.md5 deleted file mode 100644 index f6cb6953b..000000000 --- a/docs/iopfunc_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -93ab375cd8ceea4591bc77bb3397ce30 \ No newline at end of file diff --git a/docs/iopfunc_8hpp__incl.png b/docs/iopfunc_8hpp__incl.png deleted file mode 100644 index b1bf7746f..000000000 Binary files a/docs/iopfunc_8hpp__incl.png and /dev/null differ diff --git a/docs/iopfunc_8hpp_source.html b/docs/iopfunc_8hpp_source.html deleted file mode 100644 index 752ecefac..000000000 --- a/docs/iopfunc_8hpp_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: ade/iopfunc.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
iopfunc.hpp
-
-
-Go to the documentation of this file.
1 
10 #include "ade/ifunctor.hpp"
11 #include "ade/idata.hpp"
12 
13 #ifndef ADE_OPFUNC_HPP
14 #define ADE_OPFUNC_HPP
15 
16 namespace ade
17 {
18 
20 struct iOperableFunc : public iFunctor, public iData
21 {
22  virtual ~iOperableFunc (void) = default;
23 
25  virtual void update (void) = 0;
26 };
27 
28 }
29 
30 #endif // ADE_OPFUNC_HPP
virtual ~iOperableFunc(void)=default
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
virtual void update(void)=0
Update local data-cache using this functor&#39;s operation.
-
Interface for unveiling data.
Definition: idata.hpp:19
-
Definition: coord.hpp:16
-
A functor node with direct access to evaluated data.
Definition: iopfunc.hpp:20
- - -
- - - - diff --git a/docs/itensor_8hpp.html b/docs/itensor_8hpp.html deleted file mode 100644 index eb6eb5af1..000000000 --- a/docs/itensor_8hpp.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - -Tenncor: ade/itensor.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
itensor.hpp File Reference
-
-
-
#include "ade/shape.hpp"
-
-Include dependency graph for itensor.hpp:
-
-
- - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  ade::iTraveler
 Interface to travel through graph, treating iLeaf and iFunctor differently. More...
 
struct  ade::iTensor
 Interface of traversible and differentiable nodes with shape information. More...
 
- - - -

-Namespaces

 ade
 
- - - - - - - -

-Typedefs

using ade::TensptrT = std::shared_ptr< iTensor >
 Tensor smart pointer. More...
 
using ade::TensrefT = std::weak_ptr< iTensor >
 Tensor weak pointers. More...
 
-
- - - - diff --git a/docs/itensor_8hpp__dep__incl.map b/docs/itensor_8hpp__dep__incl.map deleted file mode 100644 index e2ed985e6..000000000 --- a/docs/itensor_8hpp__dep__incl.map +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/itensor_8hpp__dep__incl.md5 b/docs/itensor_8hpp__dep__incl.md5 deleted file mode 100644 index 26527e795..000000000 --- a/docs/itensor_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9ad8d48cbf0a00868288becaf8d5a839 \ No newline at end of file diff --git a/docs/itensor_8hpp__dep__incl.png b/docs/itensor_8hpp__dep__incl.png deleted file mode 100644 index 338b9357d..000000000 Binary files a/docs/itensor_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/itensor_8hpp__incl.map b/docs/itensor_8hpp__incl.map deleted file mode 100644 index 01c4f918b..000000000 --- a/docs/itensor_8hpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/itensor_8hpp__incl.md5 b/docs/itensor_8hpp__incl.md5 deleted file mode 100644 index 9120e38a2..000000000 --- a/docs/itensor_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2d699fda31238e23418257aa0e9f2463 \ No newline at end of file diff --git a/docs/itensor_8hpp__incl.png b/docs/itensor_8hpp__incl.png deleted file mode 100644 index 8e13d3814..000000000 Binary files a/docs/itensor_8hpp__incl.png and /dev/null differ diff --git a/docs/itensor_8hpp_source.html b/docs/itensor_8hpp_source.html deleted file mode 100644 index 5131ca4ce..000000000 --- a/docs/itensor_8hpp_source.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Tenncor: ade/itensor.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
itensor.hpp
-
-
-Go to the documentation of this file.
1 
9 #include "ade/shape.hpp"
10 
11 #ifndef ADE_INTERFACE_HPP
12 #define ADE_INTERFACE_HPP
13 
14 namespace ade
15 {
16 
17 struct iLeaf;
18 
19 struct iFunctor;
20 
22 struct iTraveler
23 {
24  virtual ~iTraveler (void) = default;
25 
27  virtual void visit (iLeaf* leaf) = 0;
28 
30  virtual void visit (iFunctor* func) = 0;
31 };
32 
34 struct iTensor
35 {
36  virtual ~iTensor (void) = default;
37 
39  virtual void accept (iTraveler& visiter) = 0;
40 
42  virtual const Shape& shape (void) const = 0;
43 
45  virtual std::string to_string (void) const = 0;
46 };
47 
49 using TensptrT = std::shared_ptr<iTensor>;
50 
52 using TensrefT = std::weak_ptr<iTensor>;
53 
54 }
55 
56 #endif // ADE_INTERFACE_HPP
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
virtual const Shape & shape(void) const =0
Return the shape held by this tensor.
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
virtual ~iTraveler(void)=default
-
virtual std::string to_string(void) const =0
Return the string representation of the tensor.
-
virtual void accept(iTraveler &visiter)=0
Obtain concrete information on either leaf or functor implementations.
- -
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Definition: coord.hpp:16
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
Interface of traversible and differentiable nodes with shape information.
Definition: itensor.hpp:34
-
Definition: shape.hpp:60
-
std::weak_ptr< iTensor > TensrefT
Tensor weak pointers.
Definition: itensor.hpp:52
-
virtual void visit(iLeaf *leaf)=0
Visit leaf node.
-
virtual ~iTensor(void)=default
-
- - - - diff --git a/docs/ivoter_8cpp.html b/docs/ivoter_8cpp.html deleted file mode 100644 index 7cd189dd1..000000000 --- a/docs/ivoter_8cpp.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: opt/src/ivoter.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ivoter.cpp File Reference
-
-
-
#include "opt/ivoter.hpp"
-
-Include dependency graph for ivoter.cpp:
-
-
- - - - - - - - - - - - - - - - - - - - - -
-
- - - - diff --git a/docs/ivoter_8cpp__incl.map b/docs/ivoter_8cpp__incl.map deleted file mode 100644 index 76f27ba8a..000000000 --- a/docs/ivoter_8cpp__incl.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ivoter_8cpp__incl.md5 b/docs/ivoter_8cpp__incl.md5 deleted file mode 100644 index 40ec68f25..000000000 --- a/docs/ivoter_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -de1b34843312b500538a5ad2f35bf036 \ No newline at end of file diff --git a/docs/ivoter_8cpp__incl.png b/docs/ivoter_8cpp__incl.png deleted file mode 100644 index 61fb70bba..000000000 Binary files a/docs/ivoter_8cpp__incl.png and /dev/null differ diff --git a/docs/ivoter_8hpp.html b/docs/ivoter_8hpp.html deleted file mode 100644 index 432fb06f2..000000000 --- a/docs/ivoter_8hpp.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - -Tenncor: opt/ivoter.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ivoter.hpp File Reference
-
-
-
#include "opt/parse/def.h"
-#include "opt/stats.hpp"
-#include "opt/candidate.hpp"
-
-Include dependency graph for ivoter.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - -

-Classes

struct  opt::VoterArg
 
struct  opt::SegVArgs
 
struct  opt::OrdrHasher
 
struct  opt::CommHasher
 
struct  opt::iVoter
 
struct  opt::VoterPool
 
- - - -

-Namespaces

 opt
 
- - - - - -

-Typedefs

using opt::VoterArgsT = std::vector< VoterArg >
 
using opt::VotptrT = std::shared_ptr< iVoter >
 
- - - - - - - -

-Functions

void opt::sort_vargs (VoterArgsT &args)
 
bool opt::operator== (const VoterArgsT &lhs, const VoterArgsT &rhs)
 
bool opt::operator== (const SegVArgs &lhs, const SegVArgs &rhs)
 
-
- - - - diff --git a/docs/ivoter_8hpp__dep__incl.map b/docs/ivoter_8hpp__dep__incl.map deleted file mode 100644 index 0adedc399..000000000 --- a/docs/ivoter_8hpp__dep__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/ivoter_8hpp__dep__incl.md5 b/docs/ivoter_8hpp__dep__incl.md5 deleted file mode 100644 index 9e9b706f4..000000000 --- a/docs/ivoter_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -78b16b1229e2c887f419aaa7ee52fc5b \ No newline at end of file diff --git a/docs/ivoter_8hpp__dep__incl.png b/docs/ivoter_8hpp__dep__incl.png deleted file mode 100644 index 4e47e8ef7..000000000 Binary files a/docs/ivoter_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/ivoter_8hpp__incl.map b/docs/ivoter_8hpp__incl.map deleted file mode 100644 index 811196867..000000000 --- a/docs/ivoter_8hpp__incl.map +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/docs/ivoter_8hpp__incl.md5 b/docs/ivoter_8hpp__incl.md5 deleted file mode 100644 index 769a29a90..000000000 --- a/docs/ivoter_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -75885b3bc11b34260fa9c3f49ae68cfa \ No newline at end of file diff --git a/docs/ivoter_8hpp__incl.png b/docs/ivoter_8hpp__incl.png deleted file mode 100644 index 5fca3fc18..000000000 Binary files a/docs/ivoter_8hpp__incl.png and /dev/null differ diff --git a/docs/ivoter_8hpp_source.html b/docs/ivoter_8hpp_source.html deleted file mode 100644 index 0fa8c53bd..000000000 --- a/docs/ivoter_8hpp_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -Tenncor: opt/ivoter.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ivoter.hpp
-
-
-Go to the documentation of this file.
1 extern "C" {
2 #include "opt/parse/def.h"
3 }
4 
5 #include "opt/stats.hpp"
6 #include "opt/candidate.hpp"
7 
8 #ifndef OPT_IVOTER_HPP
9 #define OPT_IVOTER_HPP
10 
11 namespace opt
12 {
13 
14 struct VoterArg final
15 {
16  VoterArg (std::string label,
17  ade::CoordptrT shaper,
18  ade::CoordptrT coorder,
19  SUBGRAPH_TYPE type) :
20  label_(label),
21  shaper_(shaper),
22  coorder_(coorder),
23  type_(type) {}
24 
25  // return true if arg matches this
26  // only add to ctxs if matches
27  bool match (CtxsT& ctxs, const CandArg& arg) const
28  {
29  // match arg.shaper_ and arg.coorder_
30  if (false == is_equal(arg.shaper_, shaper_) ||
31  false == is_equal(arg.coorder_, coorder_))
32  {
33  return false;
34  }
35  switch (type_)
36  {
38  // look for scalar candidate in arg.candidates
39  return estd::has(arg.candidates_, Symbol{
40  CAND_TYPE::SCALAR,
41  label_,
42  });
44  {
45  // look for intermediate candidate in arg.candidates
46  auto it = arg.candidates_.find(Symbol{
48  label_,
49  });
50  if (arg.candidates_.end() == it)
51  {
52  return false;
53  }
54  auto& cand_ctxs = it->second;
55  CtxsT matching_ctxs;
56  if (ctxs.empty())
57  {
58  matching_ctxs = cand_ctxs;
59  }
60  for (const ContexT& ctx : ctxs)
61  {
62  for (ContexT cand_tx : cand_ctxs)
63  {
64  // if the cand_tx map and ctx have a
65  // non-conflicting intersection, mark as matched
66  if (std::all_of(ctx.begin(), ctx.end(),
67  [&](const std::pair<std::string,CtxValT>& ctxpair)
68  {
69  auto ait = cand_tx.find(ctxpair.first);
70  if (cand_tx.end() == ait)
71  {
72  return true;
73  }
74  auto& ctens = ctxpair.second;
75  auto& cand_ctens = ait->second;
76  return std::equal(ctens.begin(), ctens.end(),
77  cand_ctens.begin());
78  }))
79  {
80  // merge
81  cand_tx.insert(ctx.begin(), ctx.end());
82  matching_ctxs.emplace(cand_tx);
83  }
84  }
85  }
86  bool has_match = matching_ctxs.size() > 0;
87  if (has_match)
88  {
89  ctxs = matching_ctxs;
90  }
91  return has_match;
92  }
94  {
95  CtxsT matching_ctxs;
96  if (ctxs.empty())
97  {
98  matching_ctxs.emplace(ContexT{{label_, {arg.tensor_}}});
99  }
100  for (ContexT ctx : ctxs)
101  {
102  auto it = ctx.find(label_);
103  if (ctx.end() == it || estd::has(it->second, arg.tensor_))
104  {
105  // matching ANY
106  ctx.emplace(label_, CtxValT{arg.tensor_});
107  matching_ctxs.emplace(ctx);
108  }
109  }
110  bool has_match = matching_ctxs.size() > 0;
111  if (has_match)
112  {
113  ctxs = matching_ctxs;
114  }
115  return has_match;
116  }
117  }
118  return true;
119  }
120 
121  std::string label_;
122 
124 
126 
128 };
129 
130 using VoterArgsT = std::vector<VoterArg>;
131 
132 struct SegVArgs
133 {
134  size_t size (void) const
135  {
136  return scalars_.size() + branches_.size() + anys_.size();
137  }
138 
140 
142 
144 };
145 
146 void sort_vargs (VoterArgsT& args);
147 
148 struct OrdrHasher final
149 {
150  size_t operator() (const VoterArgsT& args) const
151  {
152  size_t seed = 0;
153  hash_combine(seed, args);
154  return seed;
155  }
156 
157  void hash_combine (size_t& seed, const VoterArgsT& args) const
158  {
159  for (const VoterArg& arg : args)
160  {
161  std::tuple<std::string,std::string,std::string,size_t>
162  hash_target = {
163  arg.label_,
164  to_string(arg.shaper_),
165  to_string(arg.coorder_),
166  arg.type_,
167  };
168  boost::hash_combine(seed, hash_target);
169  }
170  }
171 };
172 
173 inline bool operator == (const VoterArgsT& lhs, const VoterArgsT& rhs)
174 {
175  return lhs.size() == rhs.size() &&
176  std::equal(lhs.begin(), lhs.end(), rhs.begin(),
177  [](const VoterArg& l, const VoterArg& r)
178  {
179  return l.label_ == r.label_ &&
180  is_equal(l.shaper_, r.shaper_) &&
181  is_equal(l.coorder_, r.coorder_) &&
182  l.type_ == r.type_;
183  });
184 }
185 
186 struct CommHasher final
187 {
188  size_t operator() (const SegVArgs& args) const
189  {
190  size_t seed = 0;
191  hasher_.hash_combine(seed, args.scalars_);
192  hasher_.hash_combine(seed, args.branches_);
193  hasher_.hash_combine(seed, args.anys_);
194  return seed;
195  }
196 
198 };
199 
200 inline bool operator == (const SegVArgs& lhs, const SegVArgs& rhs)
201 {
202  return lhs.scalars_ == rhs.scalars_ &&
203  lhs.branches_ == rhs.branches_ &&
204  lhs.anys_ == rhs.anys_;
205 }
206 
207 // select candidates
208 struct iVoter
209 {
210  virtual ~iVoter (void) = default;
211 
212  virtual void emplace (VoterArgsT args, Symbol cand) = 0;
213 
214  virtual CandsT inspect (const CandArgsT& args) const = 0;
215 };
216 
217 using VotptrT = std::shared_ptr<iVoter>;
218 
219 struct VoterPool
220 {
221  std::unordered_set<std::string> immutables_;
222 
223  std::unordered_map<std::string,VotptrT> branches_;
224 };
225 
226 }
227 
228 #endif // OPT_IVOTER_HPP
std::set< ade::TensptrT > CtxValT
Definition: candidate.hpp:14
-
CandsT candidates_
Definition: candidate.hpp:60
-
args
Definition: csv_to_png.py:105
-
virtual ~iVoter(void)=default
-
size_t operator()(const SegVArgs &args) const
Definition: ivoter.hpp:188
- -
virtual CandsT inspect(const CandArgsT &args) const =0
- -
VoterArgsT branches_
Definition: ivoter.hpp:141
- -
std::unordered_map< std::string, VotptrT > branches_
Definition: ivoter.hpp:223
-
ade::CoordptrT shaper_
Definition: ivoter.hpp:123
-
bool is_equal(ade::CoordptrT a, ade::CoordptrT b)
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Definition: candidate.hpp:11
-
VoterArgsT anys_
Definition: ivoter.hpp:143
-
Definition: def.h:20
-
std::unordered_set< ContexT, boost::hash< ContexT > > CtxsT
Definition: candidate.hpp:18
-
std::shared_ptr< iVoter > VotptrT
Definition: ivoter.hpp:217
-
std::vector< CandArg > CandArgsT
Definition: candidate.hpp:67
-
std::string label_
Definition: ivoter.hpp:121
-
Definition: ivoter.hpp:132
-
void hash_combine(size_t &seed, const VoterArgsT &args) const
Definition: ivoter.hpp:157
-
std::map< std::string, CtxValT > ContexT
Definition: candidate.hpp:16
-
SUBGRAPH_TYPE type_
Definition: ivoter.hpp:127
-
Definition: ivoter.hpp:148
-
Definition: candidate.hpp:24
-
ade::CoordptrT coorder_
Definition: candidate.hpp:64
-
VoterArg(std::string label, ade::CoordptrT shaper, ade::CoordptrT coorder, SUBGRAPH_TYPE type)
Definition: ivoter.hpp:16
-
Definition: def.h:19
-
std::unordered_map< Symbol, CtxsT, SymbolHash > CandsT
Definition: candidate.hpp:54
-
Definition: candidate.hpp:56
-
VoterArgsT scalars_
Definition: ivoter.hpp:139
-
void sort_vargs(VoterArgsT &args)
-
size_t operator()(const VoterArgsT &args) const
Definition: ivoter.hpp:150
-
Definition: ivoter.hpp:208
-
SUBGRAPH_TYPE
Definition: def.h:16
-
OrdrHasher hasher_
Definition: ivoter.hpp:197
-
ade::CoordptrT coorder_
Definition: ivoter.hpp:125
-
std::string to_string(ade::CoordptrT c)
-
std::unordered_set< std::string > immutables_
Definition: ivoter.hpp:221
-
Definition: ivoter.hpp:186
-
ade::CoordptrT shaper_
Definition: candidate.hpp:62
-
Definition: candidate.hpp:28
-
size_t size(void) const
Definition: ivoter.hpp:134
-
std::vector< VoterArg > VoterArgsT
Definition: ivoter.hpp:130
-
virtual void emplace(VoterArgsT args, Symbol cand)=0
-
Definition: def.h:18
-
Definition: ivoter.hpp:219
-
bool operator==(const Symbol &lhs, const Symbol &rhs)
Definition: candidate.hpp:49
-
ade::TensptrT tensor_
Definition: candidate.hpp:58
-
Definition: ivoter.hpp:14
-
bool match(CtxsT &ctxs, const CandArg &arg) const
Definition: ivoter.hpp:27
-
- - - - diff --git a/docs/jquery.js b/docs/jquery.js deleted file mode 100644 index 2771c749a..000000000 --- a/docs/jquery.js +++ /dev/null @@ -1,115 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' - - - - -
-
-
list.c File Reference
-
-
-
#include <string.h>
-#include "opt/parse/list.h"
-
-Include dependency graph for list.c:
-
-
- - - -
-
- - - - diff --git a/docs/list_8c__incl.map b/docs/list_8c__incl.map deleted file mode 100644 index 1e3405768..000000000 --- a/docs/list_8c__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/list_8c__incl.md5 b/docs/list_8c__incl.md5 deleted file mode 100644 index 738d37535..000000000 --- a/docs/list_8c__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6c9dcd9d36830604aa92fa75cc0768dc \ No newline at end of file diff --git a/docs/list_8c__incl.png b/docs/list_8c__incl.png deleted file mode 100644 index 59f22e0ff..000000000 Binary files a/docs/list_8c__incl.png and /dev/null differ diff --git a/docs/list_8h.html b/docs/list_8h.html deleted file mode 100644 index 6dbf40ab1..000000000 --- a/docs/list_8h.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - - -Tenncor: opt/parse/list.h File Reference - - - - - - - - - -
-
-
- - - - - -
-
Tenncor -
-
- - - - - - - - - -
-
- - -
- -
- - - -
- -
-
list.h File Reference
-
-
-
#include <assert.h>
-#include <stdlib.h>
-
-Include dependency graph for list.h:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - -

-Classes

struct  NumNode
 
struct  NumList
 
struct  PtrNode
 
struct  PtrList
 
- - - - - - - - - - - - - - - - - -

-Functions

struct NumListnew_numlist (void)
 
void numlist_clear (struct NumList *list)
 
void numlist_free (struct NumList *list)
 
void numlist_pushback (struct NumList *list, double val)
 
struct PtrListnew_ptrlist (size_t type)
 
void ptrlist_clear (struct PtrList *list, void(*val_mgr)(void *))
 
void ptrlist_free (struct PtrList *list, void(*val_mgr)(void *))
 
void ptrlist_pushback (struct PtrList *list, void *val)
 
-

Function Documentation

- -

◆ new_numlist()

- -
-
- - - - - - - - -
struct NumList* new_numlist (void )
-
- -
-
- -

◆ new_ptrlist()

- -
-
- - - - - - - - -
struct PtrList* new_ptrlist (size_t type)
-
- -
-
- -

◆ numlist_clear()

- -
-
- - - - - - - - -
void numlist_clear (struct NumListlist)
-
- -
-
- -

◆ numlist_free()

- -
-
- - - - - - - - -
void numlist_free (struct NumListlist)
-
- -
-
- -

◆ numlist_pushback()

- -
-
- - - - - - - - - - - - - - - - - - -
void numlist_pushback (struct NumListlist,
double val 
)
-
- -
-
- -

◆ ptrlist_clear()

- -
-
- - - - - - - - - - - - - - - - - - -
void ptrlist_clear (struct PtrListlist,
void(*)(void *) val_mgr 
)
-
- -
-
- -

◆ ptrlist_free()

- -
-
- - - - - - - - - - - - - - - - - - -
void ptrlist_free (struct PtrListlist,
void(*)(void *) val_mgr 
)
-
- -
-
- -

◆ ptrlist_pushback()

- -
-
- - - - - - - - - - - - - - - - - - -
void ptrlist_pushback (struct PtrListlist,
void * val 
)
-
- -
-
-
- - - - diff --git a/docs/list_8h__dep__incl.map b/docs/list_8h__dep__incl.map deleted file mode 100644 index db48027ac..000000000 --- a/docs/list_8h__dep__incl.map +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/docs/list_8h__dep__incl.md5 b/docs/list_8h__dep__incl.md5 deleted file mode 100644 index 6665d014b..000000000 --- a/docs/list_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2a0325f20f7f3ea2a8c4ea619cc0deb6 \ No newline at end of file diff --git a/docs/list_8h__dep__incl.png b/docs/list_8h__dep__incl.png deleted file mode 100644 index 35928457a..000000000 Binary files a/docs/list_8h__dep__incl.png and /dev/null differ diff --git a/docs/list_8h__incl.map b/docs/list_8h__incl.map deleted file mode 100644 index 9fa2a6bf6..000000000 --- a/docs/list_8h__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/list_8h__incl.md5 b/docs/list_8h__incl.md5 deleted file mode 100644 index dfd9101da..000000000 --- a/docs/list_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8a99144f6ce580f7f7c208d08c59ea49 \ No newline at end of file diff --git a/docs/list_8h__incl.png b/docs/list_8h__incl.png deleted file mode 100644 index 33909dc1d..000000000 Binary files a/docs/list_8h__incl.png and /dev/null differ diff --git a/docs/list_8h_source.html b/docs/list_8h_source.html deleted file mode 100644 index 7b731c322..000000000 --- a/docs/list_8h_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Tenncor: opt/parse/list.h Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
list.h
-
-
-Go to the documentation of this file.
1 #include <assert.h>
2 #include <stdlib.h>
3 
4 #ifndef PARSE_LIST_H
5 #define PARSE_LIST_H
6 
7 struct NumNode
8 {
9  struct NumNode* next_;
10  double val_;
11 };
12 
13 struct NumList
14 {
15  struct NumNode* head_;
16  struct NumNode* tail_;
17 };
18 
19 struct NumList* new_numlist (void);
20 
21 // frees all node in list and reset list head and tail to null
22 void numlist_clear (struct NumList* list);
23 
24 void numlist_free (struct NumList* list);
25 
26 void numlist_pushback (struct NumList* list, double val);
27 
28 
29 struct PtrNode
30 {
31  struct PtrNode* next_;
32  void* val_;
33 };
34 
35 struct PtrList
36 {
37  struct PtrNode* head_;
38  struct PtrNode* tail_;
39  size_t type_;
40 };
41 
42 struct PtrList* new_ptrlist (size_t type);
43 
44 // frees all node in list and reset list head and tail to null
45 // every val pointer in list passes as a parameter of callback val_mgr
46 // for memory management
47 // null val_mgr are ignored (todo: maybe warn?)
48 void ptrlist_clear (struct PtrList* list, void (*val_mgr)(void*));
49 
50 // val_mgr is used to clear list before freeing
51 void ptrlist_free (struct PtrList* list, void (*val_mgr)(void*));
52 
53 void ptrlist_pushback (struct PtrList* list, void* val);
54 
55 #endif // PARSE_LIST_H
struct NumList * new_numlist(void)
-
Definition: list.h:35
-
void numlist_free(struct NumList *list)
-
double val_
Definition: list.h:10
-
void * val_
Definition: list.h:32
-
struct NumNode * head_
Definition: list.h:15
-
struct NumNode * next_
Definition: list.h:9
-
Definition: list.h:13
-
void numlist_clear(struct NumList *list)
-
struct PtrNode * tail_
Definition: list.h:38
-
size_t type_
Definition: list.h:39
-
void ptrlist_clear(struct PtrList *list, void(*val_mgr)(void *))
-
void ptrlist_pushback(struct PtrList *list, void *val)
-
struct PtrList * new_ptrlist(size_t type)
-
Definition: list.h:7
-
Definition: list.h:29
-
struct PtrNode * head_
Definition: list.h:37
-
struct PtrNode * next_
Definition: list.h:31
-
struct NumNode * tail_
Definition: list.h:16
-
void numlist_pushback(struct NumList *list, double val)
-
void ptrlist_free(struct PtrList *list, void(*val_mgr)(void *))
-
- - - - diff --git a/docs/load_8hpp.html b/docs/load_8hpp.html deleted file mode 100644 index 6b89e1c72..000000000 --- a/docs/load_8hpp.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Tenncor: pbm/load.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
load.hpp File Reference
-
-
-
#include "pbm/data.hpp"
-
-Include dependency graph for load.hpp:
-
-
- - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  pbm::PathedTens
 Tree node for labeling Tensptrs. More...
 
struct  pbm::GraphInfo
 Contains all information necessary to recreate labelled ADE graph. More...
 
- - - -

-Namespaces

 pbm
 
- - - - - -

-Functions

template<typename LOAD , typename std::enable_if< std::is_base_of< iLoader, LOAD >::value >::type * = nullptr>
void pbm::load_graph (GraphInfo &out, const cortenn::Graph &in)
 Return graph info through out available from in graph. More...
 
-
- - - - diff --git a/docs/load_8hpp__incl.map b/docs/load_8hpp__incl.map deleted file mode 100644 index f94b5b298..000000000 --- a/docs/load_8hpp__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/load_8hpp__incl.md5 b/docs/load_8hpp__incl.md5 deleted file mode 100644 index 233b1f8d2..000000000 --- a/docs/load_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0598370b30da1cfbd978c78c89c3ce2f \ No newline at end of file diff --git a/docs/load_8hpp__incl.png b/docs/load_8hpp__incl.png deleted file mode 100644 index 5df9de029..000000000 Binary files a/docs/load_8hpp__incl.png and /dev/null differ diff --git a/docs/load_8hpp_source.html b/docs/load_8hpp_source.html deleted file mode 100644 index 14dfbe85e..000000000 --- a/docs/load_8hpp_source.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Tenncor: pbm/load.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
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 struct PathedTens final
19 {
20  ~PathedTens (void)
21  {
22  for (auto& child : children_)
23  {
24  delete child.second;
25  }
26  }
27 
30  void join (PathedTens* other)
31  {
32  {
33  std::vector<std::string> labels;
34  for (auto opair : other->tens_)
35  {
36  if (estd::has(tens_, opair.first))
37  {
38  labels.push_back(opair.first);
39  }
40  }
41  if (tens_.size() > 0)
42  {
43  logs::warnf("duplicate base labels %s",
44  fmts::to_string(labels.begin(), labels.end()).c_str());
45  }
46  }
47 
48  for (auto cpair : other->children_)
49  {
50  std::string label = cpair.first;
51  auto it = children_.find(label);
52  if (children_.end() == it)
53  {
54  children_.emplace(label, cpair.second);
55  }
56  else
57  {
58  it->second->join(cpair.second);
59  }
60  }
61  }
62 
65  {
66  return get_labelled(path.begin(), path.end());
67  }
68 
71  {
72  set_labelled(path.begin(), path.end(), tens);
73  }
74 
78  StringsT::iterator path_begin,
79  StringsT::iterator path_end) const
80  {
81  if (path_begin == path_end)
82  {
83  return nullptr;
84  }
85  auto path_it = path_begin++;
86  if (path_begin == path_end)
87  {
88  auto it = tens_.find(*path_it);
89  if (tens_.end() != it)
90  {
91  return it->second;
92  }
93  }
94  else
95  {
96  auto it = children_.find(*path_it);
97  if (nullptr != it->second)
98  {
99  return it->second->get_labelled(path_begin, path_end);
100  }
101  }
102  return nullptr;
103  }
104 
106  void set_labelled (StringsT::iterator path_begin,
107  StringsT::iterator path_end, ade::TensptrT tens)
108  {
109  if (path_begin == path_end)
110  {
111  return;
112  }
113  std::string label = *(path_begin++);
114  if (path_begin == path_end)
115  {
116  tens_.emplace(label, tens);
117  return;
118  }
119  PathedTens* child;
120  auto it = children_.find(label);
121  if (it == children_.end())
122  {
123  child = new PathedTens();
124  children_.emplace(label, child);
125  }
126  else
127  {
128  assert(nullptr != it->second);
129  child = it->second;
130  }
131  child->set_labelled(path_begin, path_end, tens);
132  }
133 
135  std::unordered_map<std::string,PathedTens*> children_;
136 
138  std::unordered_map<std::string,ade::TensptrT> tens_;
139 };
140 
142 struct GraphInfo final
143 {
145  std::unordered_set<ade::TensptrT> roots_;
146 
149 };
150 
152 template <typename LOAD, typename std::enable_if<
153  std::is_base_of<iLoader,LOAD>::value>::type* = nullptr>
154 void load_graph (GraphInfo& out, const cortenn::Graph& in)
155 {
156  LOAD loader;
157  auto nodes = in.nodes();
158  TensT invec;
159  for (const cortenn::Node& node : nodes)
160  {
161  auto pb_labels = node.labels();
162  if (node.has_source())
163  {
164  std::string src_label;
165  if (pb_labels.size() > 0)
166  {
167  src_label = *(pb_labels.rbegin());
168  }
169  const cortenn::Source& source = node.source();
170  std::string sstr = source.shape();
171  ade::Shape shape(std::vector<ade::DimT>(sstr.begin(), sstr.end()));
172  std::string data = source.data();
173  ade::TensptrT leaf = loader.generate_leaf(data.c_str(),
174  shape, source.typelabel(), src_label, source.is_const());
175  invec.push_back(leaf);
176  if (false == pb_labels.empty())
177  {
178  StringsT labels(pb_labels.begin(), pb_labels.end());
179  out.tens_.set_labelled(labels.begin(), labels.end(), leaf);
180  }
181  out.roots_.emplace(leaf);
182  }
183  else
184  {
185  cortenn::Functor func = node.functor();
186  auto nodeargs = func.args();
187  std::string opname = func.opname();
189  for (auto nodearg : nodeargs)
190  {
191  ade::TensptrT arg = invec[nodearg.idx()];
192  auto shaper_pb = nodearg.shaper();
193  auto coorder_pb = nodearg.coord();
194  std::vector<double> shaper_vec(shaper_pb.begin(), shaper_pb.end());
195  std::vector<double> coord_vec(coorder_pb.begin(), coorder_pb.end());
196  ade::CoordptrT shaper = loader.generate_shaper(shaper_vec);
197  ade::CoordptrT coord = loader.generate_coorder(opname, coord_vec);
198  args.push_back(
199  ade::FuncArg(arg, shaper, nodearg.fwd(), coord));
200  out.roots_.erase(invec[nodearg.idx()]);
201  }
202  ade::TensptrT f = loader.generate_func(opname, args);
203  invec.push_back(f);
204  if (false == pb_labels.empty())
205  {
206  StringsT labels(pb_labels.begin(), pb_labels.end());
207  out.tens_.set_labelled(labels.begin(), labels.end(), f);
208  }
209  out.roots_.emplace(f);
210  }
211  }
212 }
213 
214 }
215 
216 #endif // PBM_GRAPH_HPP
Tree node for labeling Tensptrs.
Definition: load.hpp:18
-
args
Definition: csv_to_png.py:105
-
ade::TensptrT get_labelled(StringsT::iterator path_begin, StringsT::iterator path_end) const
Definition: load.hpp:77
-
void load_graph(GraphInfo &out, const cortenn::Graph &in)
Return graph info through out available from in graph.
Definition: load.hpp:154
-
ade::TensptrT get_labelled(StringsT path) const
Return tensor associated with input path if found otherwise nullptr.
Definition: load.hpp:64
-
~PathedTens(void)
Definition: load.hpp:20
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Contains all information necessary to recreate labelled ADE graph.
Definition: load.hpp:142
-
void set_labelled(StringsT path, ade::TensptrT tens)
Set input path to reference tensor.
Definition: load.hpp:70
-
std::list< fmts::string > StringsT
String list type used for paths.
Definition: data.hpp:25
- -
PathedTens tens_
Labelled tensors.
Definition: load.hpp:148
-
std::shared_ptr< iTensor > TensptrT
Tensor smart pointer.
Definition: itensor.hpp:49
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
std::unordered_map< std::string, PathedTens * > children_
Map of labels to branching nodes.
Definition: load.hpp:135
-
Definition: shape.hpp:60
-
void join(PathedTens *other)
Definition: load.hpp:30
-
std::vector< ade::TensptrT > TensT
Tensptr vector type.
Definition: data.hpp:22
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
std::unordered_set< ade::TensptrT > roots_
Set of all roots (Tensptrs without any parent)
Definition: load.hpp:145
-
Definition: data.hpp:18
-
std::unordered_map< std::string, ade::TensptrT > tens_
Map of labels to tensor leaves.
Definition: load.hpp:138
-
std::vector< FuncArg > ArgsT
Type of functor arguments.
Definition: funcarg.hpp:101
-
void set_labelled(StringsT::iterator path_begin, StringsT::iterator path_end, ade::TensptrT tens)
Set path between iterators begin and end to reference tensor.
Definition: load.hpp:106
-
- - - - diff --git a/docs/matcher_8hpp.html b/docs/matcher_8hpp.html deleted file mode 100644 index 3ee7c91f7..000000000 --- a/docs/matcher_8hpp.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Tenncor: opt/matcher.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
matcher.hpp File Reference
-
-
-
#include "ade/traveler.hpp"
-#include "tag/group.hpp"
-#include "opt/ivoter.hpp"
-
-Include dependency graph for matcher.hpp:
-
-
- - - - - - - - - - - - - - - - - - - - - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  opt::Matcher
 
- - - -

-Namespaces

 opt
 
- - - -

-Variables

const std::string opt::group_prefix = "group:"
 
-
- - - - diff --git a/docs/matcher_8hpp__dep__incl.map b/docs/matcher_8hpp__dep__incl.map deleted file mode 100644 index 6f2185f00..000000000 --- a/docs/matcher_8hpp__dep__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/matcher_8hpp__dep__incl.md5 b/docs/matcher_8hpp__dep__incl.md5 deleted file mode 100644 index e2b8214cd..000000000 --- a/docs/matcher_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f5254a80b2a96fa8390dafd876c630f3 \ No newline at end of file diff --git a/docs/matcher_8hpp__dep__incl.png b/docs/matcher_8hpp__dep__incl.png deleted file mode 100644 index 68d7e2548..000000000 Binary files a/docs/matcher_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/matcher_8hpp__incl.map b/docs/matcher_8hpp__incl.map deleted file mode 100644 index f299434b7..000000000 --- a/docs/matcher_8hpp__incl.map +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/matcher_8hpp__incl.md5 b/docs/matcher_8hpp__incl.md5 deleted file mode 100644 index b01f4f1d8..000000000 --- a/docs/matcher_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -742b2adc5d4feaa2fb1974cd24b41918 \ No newline at end of file diff --git a/docs/matcher_8hpp__incl.png b/docs/matcher_8hpp__incl.png deleted file mode 100644 index 6f1441ff5..000000000 Binary files a/docs/matcher_8hpp__incl.png and /dev/null differ diff --git a/docs/matcher_8hpp_source.html b/docs/matcher_8hpp_source.html deleted file mode 100644 index 2d42c04e9..000000000 --- a/docs/matcher_8hpp_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: opt/matcher.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
matcher.hpp
-
-
-Go to the documentation of this file.
1 #include "ade/traveler.hpp"
2 
3 #include "tag/group.hpp"
4 
5 #include "opt/ivoter.hpp"
6 
7 #ifndef OPT_MATCHER_HPP
8 #define OPT_MATCHER_HPP
9 
10 namespace opt
11 {
12 
13 const std::string group_prefix = "group:";
14 
15 // approach: we have matcher, voters, and candidates
16 // - matchers map:
17 // - functors to voters (by functor's opname)
18 // - leaves to ScalarCand (if it is immutable and scalar)
19 // - anything that is not matched to a voter or candidate has no
20 // candidate and marked as ANY
21 // - voters are created by the parser, and only accept functor arguments
22 // voters generate a list of candidates based on the arguments,
23 // the list of candidates can be empty and marked as ANY
24 // - candidates can be a scalar, an intermediate candidate,
25 // or a convertible candidate. when built:
26 // - scalar candidates take a constant scalar node
27 // - convertible candidates take on it's converted subgraph
28 // - intermediate candidates do nothing
29 // Using the matcher, the optimizer makes a best attempt at
30 // mapping tensor to zero to many candidates.
31 // The optimizer is responsible for selecting the best candidates
32 struct Matcher final : public ade::iTraveler
33 {
34  Matcher (void) = default;
35 
36  Matcher (const VoterPool& voters) : voters_(voters) {}
37 
39  void visit (ade::iLeaf* leaf) override
40  {
41  if (false == estd::has(candidates_, leaf))
42  {
43  if (tag::get_property_reg().has_property(leaf, tag::immutable_tag))
44  {
45  std::string const_str = leaf->to_string();
46  CandsT cands = {
47  {Symbol{CAND_TYPE::CONST, const_str}, CtxsT{}}
48  };
49  if (is_scalar(leaf))
50  {
51  // match against scalar maps
52  if (estd::has(voters_.immutables_, const_str))
53  {
54  cands.emplace(
55  Symbol{CAND_TYPE::SCALAR, const_str}, CtxsT{});
56  }
57  }
58  candidates_.emplace(leaf, cands);
59  }
60  else
61  {
62  candidates_.emplace(leaf, CandsT{});
63  }
64  }
65  }
66 
68  void visit (ade::iFunctor* func) override
69  {
70  if (false == estd::has(candidates_, func))
71  {
72  auto& children = func->get_children();
73  for (auto& child : children)
74  {
75  child.get_tensor()->accept(*this);
76  }
77 
78  if (std::all_of(children.begin(), children.end(),
79  [this](const ade::FuncArg& child) -> bool
80  {
81  auto ctens = child.get_tensor().get();
82  return estd::has(this->candidates_[ctens],
83  Symbol{CAND_TYPE::CONST, ctens->to_string()});
84  }))
85  {
86  // all children are constants
87  // therefore mark this as constant
88  std::string const_str = func->to_string();
89  candidates_.emplace(func, CandsT{
90  {Symbol{CAND_TYPE::CONST, const_str}, CtxsT{}},
91  });
92 
93  // mark as scalar if func's children are scalar
94  // in order to propagate scalar info to parents
95  if (scalarize_)
96  {
97  if (std::all_of(children.begin(), children.end(),
98  [this](const ade::FuncArg& child) -> bool
99  {
100  auto ctens = child.get_tensor().get();
101  std::string scalar_str = scalarize_(ctens);
102  return estd::has(this->candidates_[ctens],
103  Symbol{CAND_TYPE::SCALAR, scalar_str});
104  }))
105  {
106  std::string scalar_str = scalarize_(func);
107  candidates_[func].emplace(
108  Symbol{CAND_TYPE::SCALAR, scalar_str}, CtxsT{});
109  }
110  }
111  return;
112  }
113 
114  CandsT out_cands;
115  // functor
116  std::string opname = func->get_opcode().name_;
117  auto it = voters_.branches_.find(opname);
118  if (voters_.branches_.end() != it)
119  {
120  CandArgsT args;
121  args.reserve(children.size());
122  for (auto& child : children)
123  {
124  auto ctens = child.get_tensor();
125  args.push_back(CandArg{
126  ctens,
127  candidates_[ctens.get()],
128  child.get_shaper(),
129  child.get_coorder(),
130  });
131  }
132  out_cands = it->second->inspect(args);
133  }
134 
135  // do the same for functors that are the "head" of groups
136  tag::SubgraphsT sgs;
137  if (estd::get(sgs, group_head_, func))
138  {
139  // look for candidates in each of the potential subgraphs
140  for (tag::SgraphptrT sg : sgs)
141  {
142  auto bit = voters_.branches_.find(
143  group_prefix + sg->group_);
144  if (voters_.branches_.end() != bit)
145  {
146  // todo: store sg->children_ as ade::ArgsT
147  CandArgsT args;
148  args.reserve(children.size());
149  for (auto& sgcpair : sg->children_)
150  {
151  auto ctens = sgcpair.second;
152  args.push_back(CandArg{
153  ctens,
154  candidates_[sgcpair.first],
156  ade::CoordptrT(),
157  });
158  }
159  CandsT group_cands = bit->second->inspect(args);
160  out_cands.insert(
161  group_cands.begin(), group_cands.end());
162  }
163  }
164  }
165 
166  candidates_.emplace(func, out_cands);
167  }
168  }
169 
170  // created by parser
172 
173  // generated as visited
174  std::unordered_map<ade::iTensor*,CandsT> candidates_;
175 
176  // heads for functors
178 
179  // functor for returning constant representation of tensor
180  std::function<std::string(ade::iTensor*)> scalarize_;
181 };
182 
183 }
184 
185 #endif // OPT_MATCHER_HPP
std::function< std::string(ade::iTensor *)> scalarize_
Definition: matcher.hpp:180
-
VoterPool voters_
Definition: matcher.hpp:171
-
Interface of iOperation-defined operation node.
Definition: ifunctor.hpp:28
-
args
Definition: csv_to_png.py:105
-
bool is_scalar(ade::iLeaf *leaf)
-
Definition: candidate.hpp:23
-
Matcher(void)=default
- -
std::string name_
String representation of operation.
Definition: ifunctor.hpp:21
-
std::unordered_map< ade::iTensor *, CandsT > candidates_
Definition: matcher.hpp:174
-
std::unordered_map< std::string, VotptrT > branches_
Definition: ivoter.hpp:223
-
Leaf of the graph commonly representing the variable in an equation.
Definition: ileaf.hpp:19
-
std::shared_ptr< iCoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:106
-
Definition: candidate.hpp:11
-
std::unordered_set< ContexT, boost::hash< ContexT > > CtxsT
Definition: candidate.hpp:18
-
std::vector< CandArg > CandArgsT
Definition: candidate.hpp:67
-
virtual std::string to_string(void) const =0
Return the string representation of the tensor.
-
virtual Opcode get_opcode(void) const =0
Return operation encoding.
-
CoordptrT identity
Identity matrix instance.
-
std::unordered_map< Symbol, CtxsT, SymbolHash > CandsT
Definition: candidate.hpp:54
-
Definition: candidate.hpp:56
-
std::unordered_set< SgraphptrT > SubgraphsT
Definition: group.hpp:133
-
Matcher(const VoterPool &voters)
Definition: matcher.hpp:36
-
Interface to travel through graph, treating iLeaf and iFunctor differently.
Definition: itensor.hpp:22
-
void visit(ade::iLeaf *leaf) override
Implementation of iTraveler.
Definition: matcher.hpp:39
-
virtual const ArgsT & get_children(void) const =0
Return children nodes as a vector of raw pointers.
-
void visit(ade::iFunctor *func) override
Implementation of iTraveler.
Definition: matcher.hpp:68
-
Coordinate mapper and tensor pair.
Definition: funcarg.hpp:21
-
std::unordered_set< std::string > immutables_
Definition: ivoter.hpp:221
-
tag::SubgraphAssocsT group_head_
Definition: matcher.hpp:177
-
Definition: candidate.hpp:28
- -
PropertyRegistry & get_property_reg(void)
-
const std::string immutable_tag
Definition: prop.hpp:14
- -
std::shared_ptr< Subgraph > SgraphptrT
Definition: group.hpp:131
-
Definition: matcher.hpp:32
-
std::unordered_map< ade::iTensor *, SubgraphsT > SubgraphAssocsT
Definition: group.hpp:135
-
Definition: def.h:18
-
const std::string group_prefix
Definition: matcher.hpp:13
-
Definition: ivoter.hpp:219
-
- - - - diff --git a/docs/matops_8cpp.html b/docs/matops_8cpp.html deleted file mode 100644 index b01aca663..000000000 --- a/docs/matops_8cpp.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: ade/src/matops.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
matops.cpp File Reference
-
-
-
#include "ade/matops.hpp"
-
-Include dependency graph for matops.cpp:
-
-
- - - - -
-
- - - - diff --git a/docs/matops_8cpp__incl.map b/docs/matops_8cpp__incl.map deleted file mode 100644 index cf061323a..000000000 --- a/docs/matops_8cpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/matops_8cpp__incl.md5 b/docs/matops_8cpp__incl.md5 deleted file mode 100644 index a8a590453..000000000 --- a/docs/matops_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f4f8d57f420f6cb2dc3e7a00a36fe53d \ No newline at end of file diff --git a/docs/matops_8cpp__incl.png b/docs/matops_8cpp__incl.png deleted file mode 100644 index 3427ad99c..000000000 Binary files a/docs/matops_8cpp__incl.png and /dev/null differ diff --git a/docs/matops_8hpp.html b/docs/matops_8hpp.html deleted file mode 100644 index 05c1fdc94..000000000 --- a/docs/matops_8hpp.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -Tenncor: ade/matops.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
matops.hpp File Reference
-
-
-
#include <cassert>
-#include <cstring>
-#include "ade/shape.hpp"
-
-Include dependency graph for matops.hpp:
-
-
- - - -
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Go to the source code of this file.

- - - - -

-Namespaces

 ade
 
- - - - -

-Typedefs

using ade::MatrixT = double[mat_dim][mat_dim]
 Coordinate transformation matrix (using homogeneous) More...
 
- - - - - - - - - - - - - -

-Functions

std::string ade::to_string (const MatrixT &mat)
 Return the string representation of input matrix. More...
 
double ade::determinant (const MatrixT &mat)
 Return the determinant of matrix. More...
 
void ade::inverse (MatrixT out, const MatrixT &in)
 Inverse in matrix and dump to out matrix. More...
 
void ade::matmul (MatrixT out, const MatrixT &lhs, const MatrixT &rhs)
 Apply matrix multiplication for lhs and rhs to out matrix. More...
 
- - - - - - - -

-Variables

const RankT ade::mat_dim = rank_cap + 1
 Number of rows and columns for the homogeneous matrix. More...
 
const size_t ade::mat_size = sizeof(double) * mat_dim * mat_dim
 Number of bytes in a homogeneous matrix. More...
 
-
- - - - diff --git a/docs/matops_8hpp__dep__incl.map b/docs/matops_8hpp__dep__incl.map deleted file mode 100644 index cdf0038a5..000000000 --- a/docs/matops_8hpp__dep__incl.map +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/matops_8hpp__dep__incl.md5 b/docs/matops_8hpp__dep__incl.md5 deleted file mode 100644 index f379a47b3..000000000 --- a/docs/matops_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c07a36a373db3eb3693c5479fc8ca8d4 \ No newline at end of file diff --git a/docs/matops_8hpp__dep__incl.png b/docs/matops_8hpp__dep__incl.png deleted file mode 100644 index 7a37f8c0f..000000000 Binary files a/docs/matops_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/matops_8hpp__incl.map b/docs/matops_8hpp__incl.map deleted file mode 100644 index 2a4bd0f38..000000000 --- a/docs/matops_8hpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/matops_8hpp__incl.md5 b/docs/matops_8hpp__incl.md5 deleted file mode 100644 index 80939a284..000000000 --- a/docs/matops_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -583e4db81accdeeb44dce9cca4a3f82b \ No newline at end of file diff --git a/docs/matops_8hpp__incl.png b/docs/matops_8hpp__incl.png deleted file mode 100644 index 9bcd97e42..000000000 Binary files a/docs/matops_8hpp__incl.png and /dev/null differ diff --git a/docs/matops_8hpp_source.html b/docs/matops_8hpp_source.html deleted file mode 100644 index 6b06bc5d1..000000000 --- a/docs/matops_8hpp_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: ade/matops.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
matops.hpp
-
-
-Go to the documentation of this file.
1 
10 #include <cassert>
11 #include <cstring>
12 
13 #include "ade/shape.hpp"
14 
15 #ifndef ADE_MATOPS_HPP
16 #define ADE_MATOPS_HPP
17 
18 namespace ade
19 {
20 
22 const RankT mat_dim = rank_cap + 1;
23 
25 const size_t mat_size = sizeof(double) * mat_dim * mat_dim;
26 
28 using MatrixT = double[mat_dim][mat_dim];
29 
31 std::string to_string (const MatrixT& mat);
32 
34 double determinant (const MatrixT& mat);
35 
37 void inverse (MatrixT out, const MatrixT& in);
38 
40 void matmul (MatrixT out, const MatrixT& lhs, const MatrixT& rhs);
41 
42 }
43 
44 #endif
void matmul(MatrixT out, const MatrixT &lhs, const MatrixT &rhs)
Apply matrix multiplication for lhs and rhs to out matrix.
-
const size_t mat_size
Number of bytes in a homogeneous matrix.
Definition: matops.hpp:25
-
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28
- -
Definition: coord.hpp:16
-
const RankT mat_dim
Number of rows and columns for the homogeneous matrix.
Definition: matops.hpp:22
-
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
-
double determinant(const MatrixT &mat)
Return the determinant of matrix.
-
const RankT rank_cap
Number of dimsensions in a shape/coordinate.
Definition: shape.hpp:45
-
std::string to_string(const MatrixT &mat)
Return the string representation of input matrix.
-
void inverse(MatrixT out, const MatrixT &in)
Inverse in matrix and dump to out matrix.
-
- - - - diff --git a/docs/md_ade__r_e_a_d_m_e__a_d_e.html b/docs/md_ade__r_e_a_d_m_e__a_d_e.html deleted file mode 100644 index 934baad42..000000000 --- a/docs/md_ade__r_e_a_d_m_e__a_d_e.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Tenncor: ADE (Automatic Differentiation Engine) - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ADE (Automatic Differentiation Engine)
-
-
-

Provides the framework for building tensor equations.

-

Components

-

ADE comprises of 4 types of components:

-
    -
  • Coordinates
  • -
  • Shapes
  • -
  • Leaves/Functors
  • -
  • Travelers
  • -
-

Coordinates

-

Coordinates specify entry location on some shape-defined space, and define mapping between different shapes

-

Shapes

-

Shapes are dimensionality boundaries and map between tensor coordinates and indices of flattened array representation

-

Leaves/Functors

-

Leaves represemt leaf variables in an equation graph. Functors represent operations and hold coordinate mapping from each argument to coordinate

-

Traveler

-

Travelers visits nodes in an equation graph treating functors and tensors differently

-
- - - - diff --git a/docs/md_dbg__r_e_a_d_m_e__d_b_g.html b/docs/md_dbg__r_e_a_d_m_e__d_b_g.html deleted file mode 100644 index 8cc31e572..000000000 --- a/docs/md_dbg__r_e_a_d_m_e__d_b_g.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -Tenncor: Debugger (DBG) - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Debugger (DBG)
-
-
-

Debugger provides pretty print functions for ADE tree and shaped-data.

-
- - - - diff --git a/docs/md_ead__r_e_a_d_m_e__e_a_d.html b/docs/md_ead__r_e_a_d_m_e__e_a_d.html deleted file mode 100644 index c83d0a676..000000000 --- a/docs/md_ead__r_e_a_d_m_e__e_a_d.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -Tenncor: EAD (Eigen-ADE) - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
EAD (Eigen-ADE)
-
-
-

Provides straight forward ADE iLeaf implementation using Variable to store Eigen Tensors.

-
- - - - diff --git a/docs/md_opt_rules.html b/docs/md_opt_rules.html deleted file mode 100644 index e6ceb140b..000000000 --- a/docs/md_opt_rules.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: Optimization Rules Explained in Natural Language - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Optimization Rules Explained in Natural Language
-
-
-

Comments

-

Single line comment are double slashes (//).

-

Statements

-

There are 4 types of statements in .rules minilanguage:

-
    -
  • symbol declaration
  • -
  • group declaration
  • -
  • property mapping
  • -
  • conversion
  • -
-

Symbol Declaration

-

A symbol is a generic representation of any node in an ADE graph. In conversions, symbols can be used to represent "leaves" of subgraphs. Symbols must be declared before they can be used in conversions.

-

Syntax:

-

Symbol declaration has the following syntax:

symbol A // this declares A

Property Mapping

-

Conversion

-

A conversion identifies an ADE subgraph and defines a new subgraph to convert to given specied symbols and scalars.

-

Syntax:

-

Conversion statement has the following syntax:

<Subgraph to identify> => <Subgraph to convert>

A subgraph can be:

-
    -
  • a scalar (of double type). e.g.: 1, or 2.1
  • -
  • a symbol. e.g.: A
  • -
  • a functor. e.g.: Function(<arguments>)
  • -
  • a group. e.g.: group:G(<arguments>)
  • -
-

An argument is a subgraph with an optional edge affix =<edge info>

-

Edge info is a JSON object that contain keys coorder or shaper. Edge info requires the edge from the parent to the particular argument to match the included attributes.

-

A group is allowed one variadic argument at the end of arguments list (e.g.: group:G(<arguments>,...B)). This argument cannot be a subgraph and it is not allowed edge affix.

-
- - - - diff --git a/docs/md_pbm__r_e_a_d_m_e__p_b_m.html b/docs/md_pbm__r_e_a_d_m_e__p_b_m.html deleted file mode 100644 index 8b1805375..000000000 --- a/docs/md_pbm__r_e_a_d_m_e__p_b_m.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: PBM (Protobuf Marshaller) - - - - - - - - - -
-
- - - - - - -
-
Tenncor -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
PBM (Protobuf Marshaller)
-
-
-

Serialize ADE graphs created by top-level code in protobuf format.

-

Saving and loading requires data serialization functors as parameters. This parameterization is to defer data formatting responsibilities to the library implementing ADE.

-

Why Protobuf

-

Because protobuf parsers is consistent across all popular languages.

-

Extension

-

User libraries need to provide an encoding and decoding functions for the library's generic data format when saving and loading

-
- - - - diff --git a/docs/menu.js b/docs/menu.js deleted file mode 100644 index 89aaf575c..000000000 --- a/docs/menu.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js deleted file mode 100644 index f7cc14546..000000000 --- a/docs/menudata.js +++ /dev/null @@ -1,199 +0,0 @@ -/* -@ @licstart The following is the entire license notice for the -JavaScript code in this file. - -Copyright (C) 1997-2017 by Dimitri van Heesch - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -@licend The above is the entire license notice -for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Related Pages",url:"pages.html"}, -{text:"Namespaces",url:"namespaces.html",children:[ -{text:"Namespace List",url:"namespaces.html"}, -{text:"Namespace Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html",children:[ -{text:"_",url:"namespacemembers.html#index__"}, -{text:"a",url:"namespacemembers_a.html#index_a"}, -{text:"b",url:"namespacemembers_b.html#index_b"}, -{text:"c",url:"namespacemembers_c.html#index_c"}, -{text:"d",url:"namespacemembers_d.html#index_d"}, -{text:"e",url:"namespacemembers_e.html#index_e"}, -{text:"f",url:"namespacemembers_f.html#index_f"}, -{text:"g",url:"namespacemembers_g.html#index_g"}, -{text:"h",url:"namespacemembers_h.html#index_h"}, -{text:"i",url:"namespacemembers_i.html#index_i"}, -{text:"l",url:"namespacemembers_l.html#index_l"}, -{text:"m",url:"namespacemembers_m.html#index_m"}, -{text:"n",url:"namespacemembers_n.html#index_n"}, -{text:"o",url:"namespacemembers_o.html#index_o"}, -{text:"p",url:"namespacemembers_p.html#index_p"}, -{text:"r",url:"namespacemembers_r.html#index_r"}, -{text:"s",url:"namespacemembers_s.html#index_s"}, -{text:"t",url:"namespacemembers_t.html#index_t"}, -{text:"u",url:"namespacemembers_u.html#index_u"}, -{text:"v",url:"namespacemembers_v.html#index_v"}]}, -{text:"Functions",url:"namespacemembers_func.html",children:[ -{text:"_",url:"namespacemembers_func.html#index__"}, -{text:"a",url:"namespacemembers_func.html#index_a"}, -{text:"b",url:"namespacemembers_func.html#index_b"}, -{text:"c",url:"namespacemembers_func.html#index_c"}, -{text:"d",url:"namespacemembers_func.html#index_d"}, -{text:"e",url:"namespacemembers_func.html#index_e"}, -{text:"f",url:"namespacemembers_func.html#index_f"}, -{text:"g",url:"namespacemembers_func.html#index_g"}, -{text:"i",url:"namespacemembers_func.html#index_i"}, -{text:"l",url:"namespacemembers_func.html#index_l"}, -{text:"m",url:"namespacemembers_func.html#index_m"}, -{text:"n",url:"namespacemembers_func.html#index_n"}, -{text:"o",url:"namespacemembers_func.html#index_o"}, -{text:"p",url:"namespacemembers_func.html#index_p"}, -{text:"r",url:"namespacemembers_func.html#index_r"}, -{text:"s",url:"namespacemembers_func.html#index_s"}, -{text:"t",url:"namespacemembers_func.html#index_t"}, -{text:"u",url:"namespacemembers_func.html#index_u"}, -{text:"v",url:"namespacemembers_func.html#index_v"}]}, -{text:"Variables",url:"namespacemembers_vars.html",children:[ -{text:"_",url:"namespacemembers_vars.html#index__"}, -{text:"a",url:"namespacemembers_vars.html#index_a"}, -{text:"c",url:"namespacemembers_vars.html#index_c"}, -{text:"d",url:"namespacemembers_vars.html#index_d"}, -{text:"e",url:"namespacemembers_vars.html#index_e"}, -{text:"g",url:"namespacemembers_vars.html#index_g"}, -{text:"h",url:"namespacemembers_vars.html#index_h"}, -{text:"i",url:"namespacemembers_vars.html#index_i"}, -{text:"l",url:"namespacemembers_vars.html#index_l"}, -{text:"m",url:"namespacemembers_vars.html#index_m"}, -{text:"n",url:"namespacemembers_vars.html#index_n"}, -{text:"p",url:"namespacemembers_vars.html#index_p"}, -{text:"r",url:"namespacemembers_vars.html#index_r"}, -{text:"t",url:"namespacemembers_vars.html#index_t"}]}, -{text:"Typedefs",url:"namespacemembers_type.html",children:[ -{text:"a",url:"namespacemembers_type.html#index_a"}, -{text:"b",url:"namespacemembers_type.html#index_b"}, -{text:"c",url:"namespacemembers_type.html#index_c"}, -{text:"d",url:"namespacemembers_type.html#index_d"}, -{text:"e",url:"namespacemembers_type.html#index_e"}, -{text:"f",url:"namespacemembers_type.html#index_f"}, -{text:"g",url:"namespacemembers_type.html#index_g"}, -{text:"h",url:"namespacemembers_type.html#index_h"}, -{text:"i",url:"namespacemembers_type.html#index_i"}, -{text:"l",url:"namespacemembers_type.html#index_l"}, -{text:"m",url:"namespacemembers_type.html#index_m"}, -{text:"n",url:"namespacemembers_type.html#index_n"}, -{text:"o",url:"namespacemembers_type.html#index_o"}, -{text:"p",url:"namespacemembers_type.html#index_p"}, -{text:"r",url:"namespacemembers_type.html#index_r"}, -{text:"s",url:"namespacemembers_type.html#index_s"}, -{text:"t",url:"namespacemembers_type.html#index_t"}, -{text:"v",url:"namespacemembers_type.html#index_v"}]}, -{text:"Enumerations",url:"namespacemembers_enum.html"}, -{text:"Enumerator",url:"namespacemembers_eval.html"}]}]}, -{text:"Classes",url:"annotated.html",children:[ -{text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"inherits.html"}, -{text:"Class Members",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"a",url:"functions.html#index_a"}, -{text:"b",url:"functions_b.html#index_b"}, -{text:"c",url:"functions_c.html#index_c"}, -{text:"d",url:"functions_d.html#index_d"}, -{text:"e",url:"functions_e.html#index_e"}, -{text:"f",url:"functions_f.html#index_f"}, -{text:"g",url:"functions_g.html#index_g"}, -{text:"h",url:"functions_h.html#index_h"}, -{text:"i",url:"functions_i.html#index_i"}, -{text:"j",url:"functions_j.html#index_j"}, -{text:"l",url:"functions_l.html#index_l"}, -{text:"m",url:"functions_m.html#index_m"}, -{text:"n",url:"functions_n.html#index_n"}, -{text:"o",url:"functions_o.html#index_o"}, -{text:"p",url:"functions_p.html#index_p"}, -{text:"r",url:"functions_r.html#index_r"}, -{text:"s",url:"functions_s.html#index_s"}, -{text:"t",url:"functions_t.html#index_t"}, -{text:"u",url:"functions_u.html#index_u"}, -{text:"v",url:"functions_v.html#index_v"}, -{text:"~",url:"functions_0x7e.html#index_0x7e"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"a",url:"functions_func.html#index_a"}, -{text:"b",url:"functions_func_b.html#index_b"}, -{text:"c",url:"functions_func_c.html#index_c"}, -{text:"d",url:"functions_func_d.html#index_d"}, -{text:"e",url:"functions_func_e.html#index_e"}, -{text:"f",url:"functions_func_f.html#index_f"}, -{text:"g",url:"functions_func_g.html#index_g"}, -{text:"h",url:"functions_func_h.html#index_h"}, -{text:"i",url:"functions_func_i.html#index_i"}, -{text:"j",url:"functions_func_j.html#index_j"}, -{text:"l",url:"functions_func_l.html#index_l"}, -{text:"m",url:"functions_func_m.html#index_m"}, -{text:"n",url:"functions_func_n.html#index_n"}, -{text:"o",url:"functions_func_o.html#index_o"}, -{text:"p",url:"functions_func_p.html#index_p"}, -{text:"r",url:"functions_func_r.html#index_r"}, -{text:"s",url:"functions_func_s.html#index_s"}, -{text:"t",url:"functions_func_t.html#index_t"}, -{text:"u",url:"functions_func_u.html#index_u"}, -{text:"v",url:"functions_func_v.html#index_v"}, -{text:"~",url:"functions_func_0x7e.html#index_0x7e"}]}, -{text:"Variables",url:"functions_vars.html",children:[ -{text:"a",url:"functions_vars.html#index_a"}, -{text:"b",url:"functions_vars.html#index_b"}, -{text:"c",url:"functions_vars.html#index_c"}, -{text:"d",url:"functions_vars.html#index_d"}, -{text:"e",url:"functions_vars.html#index_e"}, -{text:"f",url:"functions_vars.html#index_f"}, -{text:"g",url:"functions_vars.html#index_g"}, -{text:"h",url:"functions_vars.html#index_h"}, -{text:"i",url:"functions_vars.html#index_i"}, -{text:"l",url:"functions_vars.html#index_l"}, -{text:"m",url:"functions_vars.html#index_m"}, -{text:"n",url:"functions_vars.html#index_n"}, -{text:"o",url:"functions_vars.html#index_o"}, -{text:"p",url:"functions_vars.html#index_p"}, -{text:"r",url:"functions_vars.html#index_r"}, -{text:"s",url:"functions_vars.html#index_s"}, -{text:"t",url:"functions_vars.html#index_t"}, -{text:"u",url:"functions_vars.html#index_u"}, -{text:"v",url:"functions_vars.html#index_v"}]}, -{text:"Typedefs",url:"functions_type.html"}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"File Members",url:"globals.html",children:[ -{text:"All",url:"globals.html",children:[ -{text:"_",url:"globals.html#index__"}, -{text:"a",url:"globals.html#index_a"}, -{text:"b",url:"globals.html#index_b"}, -{text:"c",url:"globals.html#index_c"}, -{text:"d",url:"globals.html#index_d"}, -{text:"f",url:"globals.html#index_f"}, -{text:"g",url:"globals.html#index_g"}, -{text:"l",url:"globals.html#index_l"}, -{text:"m",url:"globals.html#index_m"}, -{text:"n",url:"globals.html#index_n"}, -{text:"p",url:"globals.html#index_p"}, -{text:"s",url:"globals.html#index_s"}, -{text:"v",url:"globals.html#index_v"}]}, -{text:"Functions",url:"globals_func.html"}, -{text:"Variables",url:"globals_vars.html"}, -{text:"Typedefs",url:"globals_type.html"}, -{text:"Enumerations",url:"globals_enum.html"}, -{text:"Enumerator",url:"globals_eval.html"}, -{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/docs/mockserver_8cpp.html b/docs/mockserver_8cpp.html deleted file mode 100644 index c2b83be6e..000000000 --- a/docs/mockserver_8cpp.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -Tenncor: dbg/mockserver/mockserver.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    mockserver.cpp File Reference
    -
    -
    -
    #include <grpc/grpc.h>
    -#include <grpcpp/server.h>
    -#include <grpcpp/server_builder.h>
    -#include <grpcpp/server_context.h>
    -#include <grpcpp/security/server_credentials.h>
    -#include "dbg/grpc/tenncor.grpc.pb.h"
    -
    -Include dependency graph for mockserver.cpp:
    -
    -
    -
    -
    - - - - - - - -

    -Classes

    struct  GraphEmitterImpl
     
    struct  GraphEmitterImpl::Node
     
    struct  GraphEmitterImpl::Edge
     
    - - - -

    -Functions

    int main (int argc, char **argv)
     
    -

    Function Documentation

    - -

    ◆ main()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int main (int argc,
    char ** argv 
    )
    -
    - -
    -
    -
    - - - - diff --git a/docs/mockserver_8cpp__incl.map b/docs/mockserver_8cpp__incl.map deleted file mode 100644 index 777e3c62c..000000000 --- a/docs/mockserver_8cpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/mockserver_8cpp__incl.md5 b/docs/mockserver_8cpp__incl.md5 deleted file mode 100644 index 51b4111f9..000000000 --- a/docs/mockserver_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4823aab92444ec10598d5a91da8ef7a0 \ No newline at end of file diff --git a/docs/mockserver_8cpp__incl.png b/docs/mockserver_8cpp__incl.png deleted file mode 100644 index 28d741ba9..000000000 Binary files a/docs/mockserver_8cpp__incl.png and /dev/null differ diff --git a/docs/namespaceade.html b/docs/namespaceade.html deleted file mode 100644 index 447014893..000000000 --- a/docs/namespaceade.html +++ /dev/null @@ -1,1096 +0,0 @@ - - - - - - - -Tenncor: ade Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    ade Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Classes

    struct  CoordMap
     
    struct  FuncArg
     Coordinate mapper and tensor pair. More...
     
    struct  Functor
     Functor of the graph mapping to operators specified by opcode argument. More...
     
    struct  GraphStat
     Traveler that maps each tensor to its subtree's maximum depth. More...
     
    struct  HeightMatrix
     
    struct  iCoordMap
     Interface for transforming coordinates and reversing the coordinate. More...
     
    struct  iData
     Interface for unveiling data. More...
     
    struct  iFunctor
     Interface of iOperation-defined operation node. More...
     
    struct  iGradientBuilder
     
    struct  iLeaf
     Leaf of the graph commonly representing the variable in an equation. More...
     
    struct  iOperableFunc
     A functor node with direct access to evaluated data. More...
     
    struct  iTensor
     Interface of traversible and differentiable nodes with shape information. More...
     
    struct  iTraveler
     Interface to travel through graph, treating iLeaf and iFunctor differently. More...
     
    struct  OnceTraveler
     Extremely generic traveler that visits every node in the graph once. More...
     
    struct  Opcode
     Encoding of operation. More...
     
    struct  ParentFinder
     Traveler that for each child tracks the relationship to all parents. More...
     
    struct  PathFinder
     
    struct  Shape
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    using CoordptrT = std::shared_ptr< iCoordMap >
     Type of iCoordMap smartpointer. More...
     
    using ArgsT = std::vector< FuncArg >
     Type of functor arguments. More...
     
    using TensT = std::vector< TensptrT >
     Vector representation of ade tensor pointers. More...
     
    using FuncptrT = std::shared_ptr< iFunctor >
     Functor smart pointer. More...
     
    using LeafptrT = std::shared_ptr< iLeaf >
     Leaf smart pointer. More...
     
    using TensptrT = std::shared_ptr< iTensor >
     Tensor smart pointer. More...
     
    using TensrefT = std::weak_ptr< iTensor >
     Tensor weak pointers. More...
     
    using MatrixT = double[mat_dim][mat_dim]
     Coordinate transformation matrix (using homogeneous) More...
     
    using RankT = uint8_t
     Type used for shape rank. More...
     
    using DimT = uint16_t
     
    using CDimT = double
     Type used for coordinate dimensions. More...
     
    using NElemT = uint64_t
     
    using ShapeT = std::array< DimT, rank_cap >
     Array type used to hold dimension info in Shape. More...
     
    using CoordT = std::array< CDimT, rank_cap >
     
    using OwnerMapT = std::unordered_map< iTensor *, TensrefT >
     Map between tensor and its corresponding smart pointer. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    bool is_identity (iCoordMap *coorder)
     Checks if the coord mapper is an identity mapper. More...
     
    CoordptrT reduce (RankT rank, std::vector< DimT > red)
     
    CoordptrT extend (RankT rank, std::vector< DimT > ext)
     
    CoordptrT permute (std::vector< RankT > order)
     
    CoordptrT flip (RankT dim)
     
    Shape apply_shaper (const CoordptrT &shaper, Shape inshape)
     
    FuncArg identity_map (TensptrT tensor)
     Return FuncArg that identity maps input tensor. More...
     
    FuncArg reduce_1d_map (TensptrT tensor, RankT rank)
     
    FuncArg reduce_map (TensptrT tensor, RankT rank, std::vector< DimT > red)
     
    FuncArg extend_map (TensptrT tensor, RankT rank, std::vector< DimT > ext)
     
    FuncArg permute_map (TensptrT tensor, std::vector< RankT > order)
     
    FuncArg flip_map (TensptrT tensor, RankT dim)
     Return FuncArg that flips input tensor along dimension. More...
     
    ArgsT to_args (TensT tens)
     Return ArgsT with each tensor in TensT attached to identity mapper. More...
     
    std::string to_string (const MatrixT &mat)
     Return the string representation of input matrix. More...
     
    double determinant (const MatrixT &mat)
     Return the determinant of matrix. More...
     
    void inverse (MatrixT out, const MatrixT &in)
     Inverse in matrix and dump to out matrix. More...
     
    void matmul (MatrixT out, const MatrixT &lhs, const MatrixT &rhs)
     Apply matrix multiplication for lhs and rhs to out matrix. More...
     
    NElemT index (Shape shape, CoordT coord)
     
    CoordT coordinate (Shape shape, NElemT idx)
     
    OwnerMapT track_owners (TensT roots)
     
    - - - - - - - - - - - - - -

    -Variables

    CoordptrT identity
     Identity matrix instance. More...
     
    const RankT mat_dim = rank_cap + 1
     Number of rows and columns for the homogeneous matrix. More...
     
    const size_t mat_size = sizeof(double) * mat_dim * mat_dim
     Number of bytes in a homogeneous matrix. More...
     
    const RankT rank_cap = 8
     Number of dimsensions in a shape/coordinate. More...
     
    -

    Detailed Description

    -

    coord.hpp ade

    -

    Purpose: Define shape/coordinate transformation functions

    -

    funcarg.hpp ade

    -

    Purpose: Define functor argument wrapper to carryover shape and coordinate mappers

    -

    functor.hpp ade

    -

    Purpose: Define functor nodes of an equation graph

    -

    grad_def.hpp ade

    -

    Purpose: Define gradient builder interface for building derivatives

    -

    ileaf.hpp ade

    -

    Purpose: Define common interface for node unveiling data information

    -

    ileaf.hpp ade

    -

    Purpose: Define leafs for tensor equation graph

    -

    opfunc.hpp ade

    -

    Purpose: Define functor nodes directly hold/manipulate data This differs from Functor which should not directly manipulate data

    -

    itensor.hpp ade

    -

    Purpose: Define interfaces and building blocks for an equation graph

    -

    matops.hpp ade

    -

    Purpose: Define matrix operations for coordinate transformation This functions are here to avoid external dependencies in ADE

    -

    shape.hpp ade

    -

    Purpose: Define shapes models and coordinate to flattened index mapping

    -

    traveler.hpp ade

    -

    Purpose: Define common traveler implementations

    -

    Typedef Documentation

    - -

    ◆ ArgsT

    - -
    -
    - - - - -
    using ade::ArgsT = typedef std::vector<FuncArg>
    -
    - -

    Type of functor arguments.

    - -
    -
    - -

    ◆ CDimT

    - -
    -
    - - - - -
    using ade::CDimT = typedef double
    -
    - -

    Type used for coordinate dimensions.

    - -
    -
    - -

    ◆ CoordptrT

    - -
    -
    - - - - -
    using ade::CoordptrT = typedef std::shared_ptr<iCoordMap>
    -
    - -

    Type of iCoordMap smartpointer.

    - -
    -
    - -

    ◆ CoordT

    - -
    -
    - - - - -
    using ade::CoordT = typedef std::array<CDimT,rank_cap>
    -
    -

    Array type used to hold dimension info when transforming coordinates Coordinates are allowed to be negative, negative dimensions are counted backward from the corresponding shape dimension For example, given shape=[5], coord=[-1] is the same as coord=[4]

    - -
    -
    - -

    ◆ DimT

    - -
    -
    - - - - -
    using ade::DimT = typedef uint16_t
    -
    - -
    -
    - -

    ◆ FuncptrT

    - -
    -
    - - - - -
    using ade::FuncptrT = typedef std::shared_ptr<iFunctor>
    -
    - -

    Functor smart pointer.

    - -
    -
    - -

    ◆ LeafptrT

    - -
    -
    - - - - -
    using ade::LeafptrT = typedef std::shared_ptr<iLeaf>
    -
    - -

    Leaf smart pointer.

    - -
    -
    - -

    ◆ MatrixT

    - -
    -
    - - - - -
    using ade::MatrixT = typedef double[mat_dim][mat_dim]
    -
    - -

    Coordinate transformation matrix (using homogeneous)

    - -
    -
    - -

    ◆ NElemT

    - -
    -
    - - - - -
    using ade::NElemT = typedef uint64_t
    -
    -

    Type used for flattened index DimT having 8 bits and shape comprising of 8 DimT values means a maximum flattened index of (2 ^ 8) ^ 8 = 2 ^ 64

    - -
    -
    - -

    ◆ OwnerMapT

    - -
    -
    - - - - -
    using ade::OwnerMapT = typedef std::unordered_map<iTensor*,TensrefT>
    -
    - -

    Map between tensor and its corresponding smart pointer.

    - -
    -
    - -

    ◆ RankT

    - -
    -
    - - - - -
    using ade::RankT = typedef uint8_t
    -
    - -

    Type used for shape rank.

    - -
    -
    - -

    ◆ ShapeT

    - -
    -
    - - - - -
    using ade::ShapeT = typedef std::array<DimT,rank_cap>
    -
    - -

    Array type used to hold dimension info in Shape.

    - -
    -
    - -

    ◆ TensptrT

    - -
    -
    - - - - -
    using ade::TensptrT = typedef std::shared_ptr<iTensor>
    -
    - -

    Tensor smart pointer.

    - -
    -
    - -

    ◆ TensrefT

    - -
    -
    - - - - -
    using ade::TensrefT = typedef std::weak_ptr<iTensor>
    -
    - -

    Tensor weak pointers.

    - -
    -
    - -

    ◆ TensT

    - -
    -
    - - - - -
    using ade::TensT = typedef std::vector<TensptrT>
    -
    - -

    Vector representation of ade tensor pointers.

    - -
    -
    -

    Function Documentation

    - -

    ◆ apply_shaper()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    Shape ade::apply_shaper (const CoordptrTshaper,
    Shape inshape 
    )
    -
    - -
    -
    - -

    ◆ coordinate()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    CoordT ade::coordinate (Shape shape,
    NElemT idx 
    )
    -
    -

    Return the coordinate of a flat index according to shape Coordinate dimensions are 0-based For example [0, 0, ..., 0] <-> 0

    - -
    -
    - -

    ◆ determinant()

    - -
    -
    - - - - - - - - -
    double ade::determinant (const MatrixTmat)
    -
    - -

    Return the determinant of matrix.

    - -
    -
    - -

    ◆ extend()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    CoordptrT ade::extend (RankT rank,
    std::vector< DimText 
    )
    -
    -

    Return coordinate mapper multiplying dimensions after rank by values in ext vector For example, given coordinate [6, 6, 2, 2], rank=2, and ext=[3, 3], mapper forward transforms to coordinate [6, 6, 6, 6]

    - -
    -
    - -

    ◆ extend_map()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FuncArg ade::extend_map (TensptrT tensor,
    RankT rank,
    std::vector< DimText 
    )
    -
    -

    Return FuncArg that extends input tensor by rank and extension vector E.g.: tensor w/ shape [2, 1, 1], rank = 1, red = [3, 4] gets mapped to [2, 3, 4]

    - -
    -
    - -

    ◆ flip()

    - -
    -
    - - - - - - - - -
    CoordptrT ade::flip (RankT dim)
    -
    -

    Return coordinate mapper flipping coordinate value at specified dimension Flipped dimension with original value x is represented as -x-1 (see CoordT definition)

    - -
    -
    - -

    ◆ flip_map()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    FuncArg ade::flip_map (TensptrT tensor,
    RankT dim 
    )
    -
    - -

    Return FuncArg that flips input tensor along dimension.

    - -
    -
    - -

    ◆ identity_map()

    - -
    -
    - - - - - - - - -
    FuncArg ade::identity_map (TensptrT tensor)
    -
    - -

    Return FuncArg that identity maps input tensor.

    - -
    -
    - -

    ◆ index()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    NElemT ade::index (Shape shape,
    CoordT coord 
    )
    -
    -

    Return the flat index mapped by coord according to shape For example, 2-D tensor has indices in place of value as follows: [[0, 1, ..., n-1], [n, n+1, ..., 2*n-1]] The index follows the equation: index = coord[0]+coord[1]*shape[0]+... Invalid coordinate where the coordinate value is beyond the dimension for any index will report error

    - -
    -
    - -

    ◆ inverse()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void ade::inverse (MatrixT out,
    const MatrixTin 
    )
    -
    - -

    Inverse in matrix and dump to out matrix.

    - -
    -
    - -

    ◆ is_identity()

    - -
    -
    - - - - - - - - -
    bool ade::is_identity (iCoordMapcoorder)
    -
    - -

    Checks if the coord mapper is an identity mapper.

    - -
    -
    - -

    ◆ matmul()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void ade::matmul (MatrixT out,
    const MatrixTlhs,
    const MatrixTrhs 
    )
    -
    - -

    Apply matrix multiplication for lhs and rhs to out matrix.

    - -
    -
    - -

    ◆ permute()

    - -
    -
    - - - - - - - - -
    CoordptrT ade::permute (std::vector< RankTorder)
    -
    -

    Return coordinate mapper permuting coordinate according to input order Order is a vector of indices of the dimensions to appear in order Indices not referenced by order but less than rank_cap will be appended by numerical order For example, given coordinate [1, 2, 3, 4], order=[1, 3], mapper forward transforms to coordinate [2, 4, 1, 3] Returned coordinate mapper will be a CoordMap instance, so inversibility requires order indices be unique, otherwise throw fatal error

    - -
    -
    - -

    ◆ permute_map()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    FuncArg ade::permute_map (TensptrT tensor,
    std::vector< RankTorder 
    )
    -
    -

    Return FuncArg that permutes input tensor by order E.g.: tensor w/ shape [2, 3, 4], order = [1, 2, 0] gets mapped to [3, 4, 2]

    - -
    -
    - -

    ◆ reduce()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    CoordptrT ade::reduce (RankT rank,
    std::vector< DimTred 
    )
    -
    -

    Return coordinate mapper dividing dimensions after rank by values in red vector For example, given coordinate [2, 2, 6, 6], rank=2, and red=[3, 3], mapper forward transforms to coordinate [2, 2, 2, 2]

    - -
    -
    - -

    ◆ reduce_1d_map()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    FuncArg ade::reduce_1d_map (TensptrT tensor,
    RankT rank 
    )
    -
    -

    Return FuncArg that reduces input tensor at rank then snip the dimension at rank E.g.: tensor w/ shape [2, 3, 4], rank = 1 gets mapped to [2, 4]

    - -
    -
    - -

    ◆ reduce_map()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FuncArg ade::reduce_map (TensptrT tensor,
    RankT rank,
    std::vector< DimTred 
    )
    -
    -

    Return FuncArg that reduces input tensor by units in reduction vector after specified rank E.g.: tensor w/ shape [2, 3, 4], rank = 0, red = [2, 3] gets mapped to [1, 1, 4]

    - -
    -
    - -

    ◆ to_args()

    - -
    -
    - - - - - - - - -
    ArgsT ade::to_args (TensT tens)
    -
    - -

    Return ArgsT with each tensor in TensT attached to identity mapper.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - - - - -
    std::string ade::to_string (const MatrixTmat)
    -
    - -

    Return the string representation of input matrix.

    - -
    -
    - -

    ◆ track_owners()

    - -
    -
    - - - - - - - - -
    OwnerMapT ade::track_owners (TensT roots)
    -
    -

    Travelers will lose smart pointer references, This utility function will grab reference maps of root's subtree

    - -
    -
    -

    Variable Documentation

    - -

    ◆ identity

    - -
    -
    - - - - -
    CoordptrT ade::identity
    -
    - -

    Identity matrix instance.

    - -
    -
    - -

    ◆ mat_dim

    - -
    -
    - - - - -
    const RankT ade::mat_dim = rank_cap + 1
    -
    - -

    Number of rows and columns for the homogeneous matrix.

    - -
    -
    - -

    ◆ mat_size

    - -
    -
    - - - - -
    const size_t ade::mat_size = sizeof(double) * mat_dim * mat_dim
    -
    - -

    Number of bytes in a homogeneous matrix.

    - -
    -
    - -

    ◆ rank_cap

    - -
    -
    - - - - -
    const RankT ade::rank_cap = 8
    -
    - -

    Number of dimsensions in a shape/coordinate.

    - -
    -
    -
    - - - - diff --git a/docs/namespaceagen.html b/docs/namespaceagen.html deleted file mode 100644 index 8447f3274..000000000 --- a/docs/namespaceagen.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - -Tenncor: agen Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    agen Namespace Reference
    -
    -
    - - - - - - -

    -Functions

    def parse (cfg_str)
     
    def main (args)
     
    - - - -

    -Variables

    string prog_description = 'Generate c++ glue layer mapping ADE and some data-processing library.'
     
    -

    Detailed Description

    -
    Generate glue layer 

    Function Documentation

    - -

    ◆ main()

    - -
    -
    - - - - - - - - -
    def agen.main ( args)
    -
    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - - - - -
    def agen.parse ( cfg_str)
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ prog_description

    - -
    -
    - - - - -
    string agen.prog_description = 'Generate c++ glue layer mapping ADE and some data-processing library.'
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespaceapis.html b/docs/namespaceapis.html deleted file mode 100644 index 331e3f4db..000000000 --- a/docs/namespaceapis.html +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - - -Tenncor: apis Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    apis Namespace Reference
    -
    -
    - - - - -

    -Classes

    class  APIsPlugin
     
    - - - - - - - - - - - - - - - - - -

    -Functions

    def _parse_args (arg, accept_def=True)
     
    def _nullcheck (args)
     
    def _decl_func (api)
     
    def _template_defn_func (api)
     
    def _defn_func (api)
     
    def _handle_api_header (apis)
     
    def _handle_api_source (apis)
     
    def _handle_api_templates (apis)
     
    - - - - - - - - - - - - - - - - - -

    -Variables

    string _ns_template
     
    string _header_template
     
    string _source_template
     
    string _decl_tmp
     
    string _template_defn_tmp
     
    string _defn_tmp
     
    string _plugin_id = "API"
     
    string api_header = 'api.hpp'
     
    -

    Function Documentation

    - -

    ◆ _decl_func()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._decl_func ( api)
    -
    -private
    -
    - -
    -
    - -

    ◆ _defn_func()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._defn_func ( api)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_api_header()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._handle_api_header ( apis)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_api_source()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._handle_api_source ( apis)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_api_templates()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._handle_api_templates ( apis)
    -
    -private
    -
    - -
    -
    - -

    ◆ _nullcheck()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._nullcheck ( args)
    -
    -private
    -
    - -
    -
    - -

    ◆ _parse_args()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def apis._parse_args ( arg,
     accept_def = True 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _template_defn_func()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def apis._template_defn_func ( api)
    -
    -private
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ _decl_tmp

    - -
    -
    - - - - - -
    - - - - -
    string apis._decl_tmp
    -
    -private
    -
    -Initial value:
    1 = '''
    2 /// {comment}
    3 {template_prefix}{outtype} {funcname} ({args});
    4 '''
    -
    -
    - -

    ◆ _defn_tmp

    - -
    -
    - - - - - -
    - - - - -
    string apis._defn_tmp
    -
    -private
    -
    -Initial value:
    1 = '''
    2 {outtype} {funcname} ({args})
    3 {{
    4  if ({null_check})
    5  {{
    6  logs::fatal("cannot {funcname} with a null argument");
    7  }}
    8  {block}
    9 }}
    10 '''
    -
    -
    - -

    ◆ _header_template

    - -
    -
    - - - - - -
    - - - - -
    string apis._header_template
    -
    -private
    -
    -Initial value:
    1 = '''
    2 #ifndef _GENERATED_API_HPP
    3 #define _GENERATED_API_HPP
    4 
    5 //>>> hdr_namespaces
    6 {hdr_namespaces}
    7 
    8 //>>> template_namespaces
    9 {template_namespaces}
    10 
    11 #endif // _GENERATED_API_HPP
    12 '''
    -
    -
    - -

    ◆ _ns_template

    - -
    -
    - - - - - -
    - - - - -
    string apis._ns_template
    -
    -private
    -
    -Initial value:
    1 = '''
    2 //>>> namespace
    3 namespace {namespace}
    4 {{
    5 
    6 //>>> funcs
    7 {funcs}
    8 
    9 }}
    10 '''
    -
    -
    - -

    ◆ _plugin_id

    - -
    -
    - - - - - -
    - - - - -
    string apis._plugin_id = "API"
    -
    -private
    -
    - -
    -
    - -

    ◆ _source_template

    - -
    -
    - - - - - -
    - - - - -
    string apis._source_template
    -
    -private
    -
    -Initial value:
    1 = '''
    2 #ifdef _GENERATED_API_HPP
    3 
    4 //>>> src_namespaces
    5 {src_namespaces}
    6 
    7 #endif
    8 '''
    -
    -
    - -

    ◆ _template_defn_tmp

    - -
    -
    - - - - - -
    - - - - -
    string apis._template_defn_tmp
    -
    -private
    -
    -Initial value:
    1 = '''
    2 template <{template_args}>
    3 {outtype} {funcname} ({args})
    4 {{
    5  if ({null_check})
    6  {{
    7  logs::fatal("cannot {funcname} with a null argument");
    8  }}
    9  {block}
    10 }}
    11 '''
    -
    -
    - -

    ◆ api_header

    - -
    -
    - - - - -
    string apis.api_header = 'api.hpp'
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacecsv__to__png.html b/docs/namespacecsv__to__png.html deleted file mode 100644 index 2a4e0c050..000000000 --- a/docs/namespacecsv__to__png.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - -Tenncor: csv_to_png Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    csv_to_png Namespace Reference
    -
    -
    - - - - - - - - - - - - -

    -Functions

    def _str_clean (str)
     
    def _apply_styles (graph, styles)
     
    def read_graph (lines)
     
    def print_graph (callgraph, outname)
     
    def csv_to_png (lines, outpath)
     
    - - - - - - - - - - - - - -

    -Variables

    dictionary _styles
     
     parser = argparse.ArgumentParser()
     
     nargs
     
     default
     
     help
     
     args = parser.parse_args()
     
    -

    Detailed Description

    -
    Conversion script for writing ade_csv format to png 

    Function Documentation

    - -

    ◆ _apply_styles()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def csv_to_png._apply_styles ( graph,
     styles 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _str_clean()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def csv_to_png._str_clean ( str)
    -
    -private
    -
    - -
    -
    - -

    ◆ csv_to_png()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def csv_to_png.csv_to_png ( lines,
     outpath 
    )
    -
    - -
    -
    - -

    ◆ print_graph()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def csv_to_png.print_graph ( callgraph,
     outname 
    )
    -
    - -
    -
    - -

    ◆ read_graph()

    - -
    -
    - - - - - - - - -
    def csv_to_png.read_graph ( lines)
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ _styles

    - -
    -
    - - - - - -
    - - - - -
    dictionary csv_to_png._styles
    -
    -private
    -
    -Initial value:
    1 = {
    2  'graph': {
    3  'label': 'Operation Graph',
    4  'fontsize': '16',
    5  'fontcolor': 'white',
    6  'bgcolor': '#333333',
    7  'rankdir': 'BT',
    8  },
    9  'nodes': {
    10  'fontname': 'Helvetica',
    11  'shape': 'hexagon',
    12  'fontcolor': 'white',
    13  'color': 'white',
    14  'style': 'filled',
    15  'fillcolor': '#006699',
    16  },
    17  'edges': {
    18  'style': 'dashed',
    19  # 'color': 'white',
    20  'arrowhead': 'open',
    21  'fontname': 'Courier',
    22  'fontsize': '12',
    23  'fontcolor': 'white',
    24  }
    25 }
    -
    -
    - -

    ◆ args

    - -
    -
    - - - - -
    csv_to_png.args = parser.parse_args()
    -
    - -
    -
    - -

    ◆ default

    - -
    -
    - - - - -
    csv_to_png.default
    -
    - -
    -
    - -

    ◆ help

    - -
    -
    - - - - -
    csv_to_png.help
    -
    - -
    -
    - -

    ◆ nargs

    - -
    -
    - - - - -
    csv_to_png.nargs
    -
    - -
    -
    - -

    ◆ parser

    - -
    -
    - - - - -
    csv_to_png.parser = argparse.ArgumentParser()
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacedbg.html b/docs/namespacedbg.html deleted file mode 100644 index 9d841525f..000000000 --- a/docs/namespacedbg.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Tenncor: dbg Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    dbg Namespace Reference
    -
    -
    - - - - - - - - - - - - -

    -Classes

    struct  ClientConfig
     
    struct  EdgeInfo
     
    struct  EdgeInfoHash
     
    struct  GraphEmitterClient
     
    struct  InteractiveSession
     
    - - - -

    -Functions

    bool operator== (const EdgeInfo &lhs, const EdgeInfo &rhs)
     
    - - - - - - - - - - - -

    -Variables

    static const size_t max_attempts = 10
     
    static const size_t data_sync_interval = 50
     
    static const std::string tag_str_key = "name"
     
    static const std::string tag_node_type = "node_type"
     
    static const std::string edge_label_fmt = "parent-child-%d"
     
    -

    Function Documentation

    - -

    ◆ operator==()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool dbg::operator== (const EdgeInfolhs,
    const EdgeInforhs 
    )
    -
    -inline
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ data_sync_interval

    - -
    -
    - - - - - -
    - - - - -
    const size_t dbg::data_sync_interval = 50
    -
    -static
    -
    - -
    -
    - -

    ◆ edge_label_fmt

    - -
    -
    - - - - - -
    - - - - -
    const std::string dbg::edge_label_fmt = "parent-child-%d"
    -
    -static
    -
    - -
    -
    - -

    ◆ max_attempts

    - -
    -
    - - - - - -
    - - - - -
    const size_t dbg::max_attempts = 10
    -
    -static
    -
    - -
    -
    - -

    ◆ tag_node_type

    - -
    -
    - - - - - -
    - - - - -
    const std::string dbg::tag_node_type = "node_type"
    -
    -static
    -
    - -
    -
    - -

    ◆ tag_str_key

    - -
    -
    - - - - - -
    - - - - -
    const std::string dbg::tag_str_key = "name"
    -
    -static
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacedbg__wrapper.html b/docs/namespacedbg__wrapper.html deleted file mode 100644 index 34d6ee039..000000000 --- a/docs/namespacedbg__wrapper.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Tenncor: dbg_wrapper Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    dbg_wrapper Namespace Reference
    -
    -
    - - - - - - -

    -Functions

    def graph_to_csvimg (root, outpath, showshape=False)
     
    def multigraph_to_csvimg (roots, outpath, showshape=False)
     
    -

    Function Documentation

    - -

    ◆ graph_to_csvimg()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def dbg_wrapper.graph_to_csvimg ( root,
     outpath,
     showshape = False 
    )
    -
    - -
    -
    - -

    ◆ multigraph_to_csvimg()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def dbg_wrapper.multigraph_to_csvimg ( roots,
     outpath,
     showshape = False 
    )
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacedtypes.html b/docs/namespacedtypes.html deleted file mode 100644 index 4a5772722..000000000 --- a/docs/namespacedtypes.html +++ /dev/null @@ -1,438 +0,0 @@ - - - - - - - -Tenncor: dtypes Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    dtypes Namespace Reference
    -
    -
    - - - - -

    -Classes

    class  DTypesPlugin
     
    - - - - - - - - - - - - - - - - - -

    -Functions

    def _handle_enumeration (dtypes)
     
    def _handle_mapping (dtypes)
     
    def _handle_conversions (dtypes)
     
    def _handle_cases (dtypes)
     
    def _handle_type2names (dtypes)
     
    def _handle_name2types (dtypes)
     
    def _handle_typesizes (dtypes)
     
    def _handle_get_types (dtypes)
     
    - - - - - - - - - - - -

    -Variables

    string _header_template
     
    string _source_template
     
    string _convert_tmp
     
    string _get_type_tmp
     
    string _plugin_id = "DTYPE"
     
    -

    Function Documentation

    - -

    ◆ _handle_cases()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_cases ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_conversions()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_conversions ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_enumeration()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_enumeration ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_get_types()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_get_types ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_mapping()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_mapping ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_name2types()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_name2types ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_type2names()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_type2names ( dtypes)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_typesizes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def dtypes._handle_typesizes ( dtypes)
    -
    -private
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ _convert_tmp

    - -
    -
    - - - - - -
    - - - - -
    string dtypes._convert_tmp
    -
    -private
    -
    -Initial value:
    1 = '''case {code}:
    2  out = std::vector<OUTTYPE>(({dtype}*) input, ({dtype}*) input + nelems);
    3  break;'''
    -
    -
    - -

    ◆ _get_type_tmp

    - -
    -
    - - - - - -
    - - - - -
    string dtypes._get_type_tmp
    -
    -private
    -
    -Initial value:
    1 = '''
    2 template <>
    3 _GENERATED_DTYPE get_type<{dtype}> (void)
    4 {{
    5  return {code};
    6 }}
    7 '''
    -
    -
    - -

    ◆ _header_template

    - -
    -
    - - - - - -
    - - - - -
    string dtypes._header_template
    -
    -private
    -
    - -
    -
    - -

    ◆ _plugin_id

    - -
    -
    - - - - - -
    - - - - -
    string dtypes._plugin_id = "DTYPE"
    -
    -private
    -
    - -
    -
    - -

    ◆ _source_template

    - -
    -
    - - - - - -
    - - - - -
    string dtypes._source_template
    -
    -private
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespaceead.html b/docs/namespaceead.html deleted file mode 100644 index 775a751eb..000000000 --- a/docs/namespaceead.html +++ /dev/null @@ -1,3168 +0,0 @@ - - - - - - - -Tenncor: ead Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    ead Namespace Reference
    -
    -
    - - - - -

    -Namespaces

     internal
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Classes

    struct  AnyConvr
     
    struct  BuilderArg
     
    struct  Constant
     
    struct  ConstantNode
     
    struct  ConverterBuilder
     
    struct  CoordMap
     
    struct  EADLoader
     Unmarshal cortenn::Source as Variable containing context of source. More...
     
    struct  EADSaver
     
    struct  EigenMatOp
     
    struct  EigenTensOp
     
    struct  FuncArg
     
    struct  FuncConvr
     
    struct  Functor
     
    struct  FunctorNode
     
    struct  GradientBuilder
     
    struct  GroupConvr
     
    struct  iEigen
     
    struct  iLeaf
     
    struct  iNode
     
    struct  iSession
     
    struct  NodeConverters
     
    struct  OpArg
     
    struct  ScalarConvr
     
    struct  Session
     
    struct  SizeT
     
    struct  Variable
     Leaf node containing data. More...
     
    struct  VariableNode
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    using CoordptrT = std::shared_ptr< CoordMap >
     Type of iCoordMap smartpointer. More...
     
    using DimensionsT = std::array< Eigen::Index, 8 >
     
    template<typename T >
    using MatrixT = Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >
     
    template<typename T >
    using TensorT = Eigen::Tensor< T, 8 >
     
    template<typename T >
    using TensMapT = Eigen::TensorMap< TensorT< T > >
     
    template<typename T >
    using MatMapT = Eigen::Map< MatrixT< T > >
     
    template<typename T >
    using EigenptrT = std::shared_ptr< iEigen< T > >
     
    template<typename T >
    using ArgsT = std::vector< FuncArg< T > >
     
    template<typename T >
    using NodeptrT = std::shared_ptr< iNode< T > >
     
    template<typename T >
    using NodesT = std::vector< NodeptrT< T > >
     
    template<typename T >
    using NodeBuilderF = std::function< NodeptrT< T >(ade::TensptrT)>
     
    template<typename OP , size_t N, typename T >
    using ReduceOutT = Eigen::TensorReductionOp< OP, const std::array< ade::RankT, N >, const TensMapT< T > >
     
    using BuilderArgsT = std::vector< BuilderArg >
     
    using EngineT = std::default_random_engine
     RNG engine used. More...
     
    template<typename T >
    using GenF = std::function< T()>
     
    using TensSetT = std::unordered_set< ade::iTensor * >
     
    template<typename T >
    using VarptrT = std::shared_ptr< VariableNode< T > >
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    NodeptrT< T > make_constant_scalar (T scalar, ade::Shape shape)
     
    template<typename T >
    NodeptrT< T > make_constant (T *data, ade::Shape shape)
     
    CoordptrT reduce (std::vector< ade::RankT > red_dims)
     
    CoordptrT extend (ade::RankT rank, std::vector< ade::DimT > ext)
     
    CoordptrT permute (std::vector< ade::RankT > dims)
     
    template<typename T >
    MatMapT< T > tens_to_matmap (TensorT< T > &tens)
     
    template<typename T >
    MatMapT< T > mat_to_matmap (MatrixT< T > &mat)
     
    template<typename T >
    MatMapT< T > tensmap_to_matmap (TensMapT< T > &tens)
     
    template<typename T >
    TensMapT< T > mat_to_tensmap (MatrixT< T > &mat)
     
    template<typename T >
    TensMapT< T > tens_to_tensmap (TensorT< T > &tens)
     
    template<typename T , typename EigenSource , typename EigenArgs >
    EigenptrT< T > make_eigentensor (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
     
    template<typename T , typename EigenSource , typename EigenArgs >
    EigenptrT< T > make_eigenmatrix (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
     
    template<typename T >
    TensorT< T > make_tensor (const ade::Shape &shape)
     
    template<typename T >
    MatMapT< T > make_matmap (T *data, const ade::Shape &shape)
     
    template<typename T >
    TensMapT< T > make_tensmap (T *data, const ade::Shape &shape)
     
    template<typename T >
    ade::Shape get_shape (const TensorT< T > &tens)
     
    template<typename T >
    ade::Shape get_shape (const TensMapT< T > &tens)
     
    DimensionsT shape_convert (ade::Shape shape)
     
    template<typename T >
    FuncArg< T > identity_map (NodeptrT< T > node)
     
    template<typename T >
    FuncArg< T > reduce_map (NodeptrT< T > node, ade::RankT offset, ade::RankT ndims)
     
    template<typename T >
    FuncArg< T > extend_map (NodeptrT< T > node, ade::RankT rank, std::vector< ade::DimT > ext)
     
    template<typename T >
    FuncArg< T > permute_map (NodeptrT< T > node, std::vector< ade::RankT > order)
     
    template<typename T >
    NodeptrT< T > make_functor (ade::Opcode opcode, ArgsT< T > args)
     
    template<typename T >
    NodeptrT< T > reduce_grad (const ade::FuncArg &child, NodeptrT< T > bwd, size_t idx)
     
    template<typename T >
    NodeptrT< T > permute_grad (ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
     
    template<typename T >
    NodeptrT< T > extend_grad (ade::iFunctor *fwd, NodeptrT< T > bwd, size_t idx)
     
    template<typename T >
    NodeptrT< T > derive (NodeptrT< T > root, NodeptrT< T > target)
     Derive root with respect to target and optimized. More...
     
    template<typename TensType , typename T >
    bool register_builder (NodeBuilderF< T > builder)
     
    static bool is_2d (ade::Shape shape)
     
    template<typename T >
    EigenptrT< T > reduce_sum (ade::Shape &outshape, const OpArg< T > &in) template< typename T > EigenptrT< T > reduce_prod(ade
     
    template<typename T >
    EigenptrT< T > permute (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > slice (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > pad (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > abs (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > neg (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > sin (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > cos (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > tan (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > exp (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > log (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > sqrt (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > round (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > sigmoid (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > sigmoid_grad (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > tanh (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > square (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > cube (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > pow (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > add (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > sub (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > mul (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > div (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > eq (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > neq (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > lt (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > gt (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > min (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > max (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > rand_uniform (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > select (ade::Shape &outshape, const OpArg< T > &condition, const OpArg< T > &then, const OpArg< T > &otherwise)
     
    template<typename T >
    EigenptrT< T > matmul (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > convolution (ade::Shape &outshape, const OpArg< T > &input, const OpArg< T > &kernel)
     
    template<typename T >
    EigenptrT< T > convolution_image_grad (ade::Shape &imageshape, const OpArg< T > &kernel, const OpArg< T > &super_composite)
     
    template<typename T >
    EigenptrT< T > convolution_kernel_grad (ade::Shape &kernelshape, const OpArg< T > &image, const OpArg< T > &super_composite)
     
    static std::vector< double > vectorize (::NumList *list)
     
    static CoordptrT coorderize (::NumList *list)
     
    template<typename T >
    opt::OptCtx parse (std::string content)
     
    template<typename T >
    opt::OptCtx parse_file (std::string filename)
     
    EngineTget_engine (void)
     Return global random generator. More...
     
    template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    unif (const T &a, const T &b)
     
    template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    GenF< T > unif_gen (const T &a, const T &b)
     
    template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    GenF< T > unif_gen (T a, T b)
     
    template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    GenF< T > norm_gen (T mean, T stdev)
     
    static bool is_big_endian (void)
     
    template<typename T >
    NodeptrT< T > convert_to_node (VarptrT< T > var)
     
    template<typename T >
    VarptrT< T > make_variable_scalar (T scalar, ade::Shape shape, std::string label="")
     
    template<typename T >
    VarptrT< T > make_variable (ade::Shape shape, std::string label="")
     
    template<typename T >
    VarptrT< T > make_variable (T *data, ade::Shape shape, std::string label="")
     
    - - - - - -

    -Variables

    static const size_t label_limit = 5
     
    static std::unordered_set< size_t > non_bijectives
     
    -

    Detailed Description

    -

    grader.hpp ead

    -

    Purpose: Implement ead gradient definition for supported operations

    -

    ileaf.hpp ead

    -

    Purpose: Define interfaces and building blocks for an equation graph

    -

    operator.hpp ead

    -

    Purpose: Define functions manipulating tensor data values No function in this file makes any attempt to check for nullptrs

    -

    serialize.hpp ead

    -

    Purpose: Define functions for marshal and unmarshal data sources

    -

    variable.hpp ead

    -

    Purpose: Define data structures for owning, and passing generalized and type-specific data

    -

    Typedef Documentation

    - -

    ◆ ArgsT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::ArgsT = typedef std::vector<FuncArg<T> >
    -
    - -
    -
    - -

    ◆ BuilderArgsT

    - -
    -
    - - - - -
    using ead::BuilderArgsT = typedef std::vector<BuilderArg>
    -
    - -
    -
    - -

    ◆ CoordptrT

    - -
    -
    - - - - -
    using ead::CoordptrT = typedef std::shared_ptr<CoordMap>
    -
    - -

    Type of iCoordMap smartpointer.

    - -
    -
    - -

    ◆ DimensionsT

    - -
    -
    - - - - -
    using ead::DimensionsT = typedef std::array<Eigen::Index,8>
    -
    - -
    -
    - -

    ◆ EigenptrT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::EigenptrT = typedef std::shared_ptr<iEigen<T> >
    -
    - -
    -
    - -

    ◆ EngineT

    - -
    -
    - - - - -
    using ead::EngineT = typedef std::default_random_engine
    -
    - -

    RNG engine used.

    - -
    -
    - -

    ◆ GenF

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::GenF = typedef std::function<T()>
    -
    - -
    -
    - -

    ◆ MatMapT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::MatMapT = typedef Eigen::Map<MatrixT<T> >
    -
    - -
    -
    - -

    ◆ MatrixT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::MatrixT = typedef Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor>
    -
    - -
    -
    - -

    ◆ NodeBuilderF

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::NodeBuilderF = typedef std::function<NodeptrT<T>(ade::TensptrT)>
    -
    - -
    -
    - -

    ◆ NodeptrT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::NodeptrT = typedef std::shared_ptr<iNode<T> >
    -
    - -
    -
    - -

    ◆ NodesT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::NodesT = typedef std::vector<NodeptrT<T> >
    -
    - -
    -
    - -

    ◆ ReduceOutT

    - -
    -
    -
    -template<typename OP , size_t N, typename T >
    - - - - -
    using ead::ReduceOutT = typedef Eigen::TensorReductionOp<OP, const std::array<ade::RankT,N>,const TensMapT<T> >
    -
    - -
    -
    - -

    ◆ TensMapT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::TensMapT = typedef Eigen::TensorMap<TensorT<T> >
    -
    - -
    -
    - -

    ◆ TensorT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::TensorT = typedef Eigen::Tensor<T,8>
    -
    - -
    -
    - -

    ◆ TensSetT

    - -
    -
    - - - - -
    using ead::TensSetT = typedef std::unordered_set<ade::iTensor*>
    -
    - -
    -
    - -

    ◆ VarptrT

    - -
    -
    -
    -template<typename T >
    - - - - -
    using ead::VarptrT = typedef std::shared_ptr<VariableNode<T> >
    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ abs()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::abs (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take absolute value of inputs

    - -
    -
    - -

    ◆ add()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::add (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    - -
    -
    - -

    ◆ convert_to_node()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    NodeptrT<T> ead::convert_to_node (VarptrT< T > var)
    -
    - -
    -
    - -

    ◆ convolution()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::convolution (ade::Shapeoutshape,
    const OpArg< T > & input,
    const OpArg< T > & kernel 
    )
    -
    - -
    -
    - -

    ◆ convolution_image_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::convolution_image_grad (ade::Shapeimageshape,
    const OpArg< T > & kernel,
    const OpArg< T > & super_composite 
    )
    -
    - -
    -
    - -

    ◆ convolution_kernel_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::convolution_kernel_grad (ade::Shapekernelshape,
    const OpArg< T > & image,
    const OpArg< T > & super_composite 
    )
    -
    - -
    -
    - -

    ◆ coorderize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static CoordptrT ead::coorderize (::NumListlist)
    -
    -static
    -
    - -
    -
    - -

    ◆ cos()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::cos (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take cosine of inputs

    - -
    -
    - -

    ◆ cube()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::cube (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ derive()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::derive (NodeptrT< T > root,
    NodeptrT< T > target 
    )
    -
    - -

    Derive root with respect to target and optimized.

    - -
    -
    - -

    ◆ div()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::div (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index divide Only accept 2 arguments

    - -
    -
    - -

    ◆ eq()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::eq (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply == operator Only accept 2 arguments

    - -
    -
    - -

    ◆ exp()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::exp (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take exponent of inputs

    - -
    -
    - -

    ◆ extend()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    CoordptrT ead::extend (ade::RankT rank,
    std::vector< ade::DimText 
    )
    -
    - -
    -
    - -

    ◆ extend_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::extend_grad (ade::iFunctorfwd,
    NodeptrT< T > bwd,
    size_t idx 
    )
    -
    - -
    -
    - -

    ◆ extend_map()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FuncArg<T> ead::extend_map (NodeptrT< T > node,
    ade::RankT rank,
    std::vector< ade::DimText 
    )
    -
    - -
    -
    - -

    ◆ get_engine()

    - -
    -
    - - - - - - - - -
    EngineT& ead::get_engine (void )
    -
    - -

    Return global random generator.

    - -
    -
    - -

    ◆ get_shape() [1/2]

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    ade::Shape ead::get_shape (const TensorT< T > & tens)
    -
    - -
    -
    - -

    ◆ get_shape() [2/2]

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    ade::Shape ead::get_shape (const TensMapT< T > & tens)
    -
    - -
    -
    - -

    ◆ gt()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::gt (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply > operator Only accept 2 arguments

    - -
    -
    - -

    ◆ identity_map()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    FuncArg<T> ead::identity_map (NodeptrT< T > node)
    -
    - -
    -
    - -

    ◆ is_2d()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static bool ead::is_2d (ade::Shape shape)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ is_big_endian()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static bool ead::is_big_endian (void )
    -
    -static
    -
    - -
    -
    - -

    ◆ log()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::log (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take natural log of inputs

    - -
    -
    - -

    ◆ lt()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::lt (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply < operator Only accept 2 arguments

    - -
    -
    - -

    ◆ make_constant()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::make_constant (T * data,
    ade::Shape shape 
    )
    -
    - -
    -
    - -

    ◆ make_constant_scalar()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::make_constant_scalar (scalar,
    ade::Shape shape 
    )
    -
    - -
    -
    - -

    ◆ make_eigenmatrix()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::make_eigenmatrix (DimensionsT dims,
    std::function< EigenSource(EigenArgs &)> make_base,
    EigenArgs args 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ make_eigentensor()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::make_eigentensor (DimensionsT dims,
    std::function< EigenSource(EigenArgs &)> make_base,
    EigenArgs args 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ make_functor()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::make_functor (ade::Opcode opcode,
    ArgsT< T > args 
    )
    -
    - -
    -
    - -

    ◆ make_matmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    MatMapT<T> ead::make_matmap (T * data,
    const ade::Shapeshape 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ make_tensmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    TensMapT<T> ead::make_tensmap (T * data,
    const ade::Shapeshape 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ make_tensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    TensorT<T> ead::make_tensor (const ade::Shapeshape)
    -
    -inline
    -
    - -
    -
    - -

    ◆ make_variable() [1/2]

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    VarptrT<T> ead::make_variable (ade::Shape shape,
    std::string label = "" 
    )
    -
    - -
    -
    - -

    ◆ make_variable() [2/2]

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    VarptrT<T> ead::make_variable (T * data,
    ade::Shape shape,
    std::string label = "" 
    )
    -
    - -
    -
    - -

    ◆ make_variable_scalar()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    VarptrT<T> ead::make_variable_scalar (scalar,
    ade::Shape shape,
    std::string label = "" 
    )
    -
    - -
    -
    - -

    ◆ mat_to_matmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    MatMapT<T> ead::mat_to_matmap (MatrixT< T > & mat)
    -
    -inline
    -
    - -
    -
    - -

    ◆ mat_to_tensmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    TensMapT<T> ead::mat_to_tensmap (MatrixT< T > & mat)
    -
    -inline
    -
    - -
    -
    - -

    ◆ matmul()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::matmul (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    - -
    -
    - -

    ◆ max()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::max (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments, for every mapped index i in range [0:max_nelems], take the maximum all elements for all arguments

    - -
    -
    - -

    ◆ min()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::min (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments, for every mapped index i in range [0:max_nelems], take the minimum all elements for all arguments

    - -
    -
    - -

    ◆ mul()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::mul (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    - -
    -
    - -

    ◆ neg()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::neg (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take negatives of inputs

    - -
    -
    - -

    ◆ neq()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::neq (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply != operator Only accept 2 arguments

    - -
    -
    - -

    ◆ norm_gen()

    - -
    -
    -
    -template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    - - - - - - - - - - - - - - - - - - -
    GenF<T> ead::norm_gen (mean,
    stdev 
    )
    -
    - -
    -
    - -

    ◆ pad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::pad (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ parse()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    opt::OptCtx ead::parse (std::string content)
    -
    - -
    -
    - -

    ◆ parse_file()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - -
    opt::OptCtx ead::parse_file (std::string filename)
    -
    - -
    -
    - -

    ◆ permute() [1/2]

    - -
    -
    - - - - - - - - -
    CoordptrT ead::permute (std::vector< ade::RankTdims)
    -
    - -
    -
    - -

    ◆ permute() [2/2]

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::permute (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ permute_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::permute_grad (ade::iFunctorfwd,
    NodeptrT< T > bwd,
    size_t idx 
    )
    -
    - -
    -
    - -

    ◆ permute_map()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    FuncArg<T> ead::permute_map (NodeptrT< T > node,
    std::vector< ade::RankTorder 
    )
    -
    - -
    -
    - -

    ◆ pow()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::pow (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply std::pow operator Only accept 2 arguments

    - -
    -
    - -

    ◆ rand_uniform()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::rand_uniform (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index apply std::uniform_distributon function Only accept 2 arguments

    - -
    -
    - -

    ◆ reduce()

    - -
    -
    - - - - - - - - -
    CoordptrT ead::reduce (std::vector< ade::RankTred_dims)
    -
    - -
    -
    - -

    ◆ reduce_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    NodeptrT<T> ead::reduce_grad (const ade::FuncArgchild,
    NodeptrT< T > bwd,
    size_t idx 
    )
    -
    - -
    -
    - -

    ◆ reduce_map()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FuncArg<T> ead::reduce_map (NodeptrT< T > node,
    ade::RankT offset,
    ade::RankT ndims 
    )
    -
    - -
    -
    - -

    ◆ reduce_sum()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::reduce_sum (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ register_builder()

    - -
    -
    -
    -template<typename TensType , typename T >
    - - - - - - - - -
    bool ead::register_builder (NodeBuilderF< T > builder)
    -
    - -
    -
    - -

    ◆ round()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::round (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take rounded values of inputs

    - -
    -
    - -

    ◆ select()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::select (ade::Shapeoutshape,
    const OpArg< T > & condition,
    const OpArg< T > & then,
    const OpArg< T > & otherwise 
    )
    -
    - -
    -
    - -

    ◆ shape_convert()

    - -
    -
    - - - - - - - - -
    DimensionsT ead::shape_convert (ade::Shape shape)
    -
    - -
    -
    - -

    ◆ sigmoid()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::sigmoid (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ sigmoid_grad()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::sigmoid_grad (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ sin()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::sin (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take sine of inputs

    - -
    -
    - -

    ◆ slice()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::slice (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ sqrt()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::sqrt (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take square root of inputs

    - -
    -
    - -

    ◆ square()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::square (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ sub()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::sub (ade::Shapeoutshape,
    const OpArg< T > & a,
    const OpArg< T > & b 
    )
    -
    -

    Given arguments a, and b, for every pair of mapped elements sharing the same index subtract Only accept 2 arguments

    - -
    -
    - -

    ◆ tan()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::tan (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    -

    Given reference to output array, and input vector ref, make output elements take tangent of inputs

    - -
    -
    - -

    ◆ tanh()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    EigenptrT<T> ead::tanh (ade::Shapeoutshape,
    const OpArg< T > & in 
    )
    -
    - -
    -
    - -

    ◆ tens_to_matmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    MatMapT<T> ead::tens_to_matmap (TensorT< T > & tens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ tens_to_tensmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    TensMapT<T> ead::tens_to_tensmap (TensorT< T > & tens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ tensmap_to_matmap()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    MatMapT<T> ead::tensmap_to_matmap (TensMapT< T > & tens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ unif()

    - -
    -
    -
    -template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    - - - - - - - - - - - - - - - - - - -
    T ead::unif (const T & a,
    const T & b 
    )
    -
    - -
    -
    - -

    ◆ unif_gen() [1/2]

    - -
    -
    -
    -template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    - - - - - - - - - - - - - - - - - - -
    GenF<T> ead::unif_gen (const T & a,
    const T & b 
    )
    -
    - -
    -
    - -

    ◆ unif_gen() [2/2]

    - -
    -
    -
    -template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    - - - - - - - - - - - - - - - - - - -
    GenF<T> ead::unif_gen (a,
    b 
    )
    -
    - -
    -
    - -

    ◆ vectorize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static std::vector<double> ead::vectorize (::NumListlist)
    -
    -static
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ label_limit

    - -
    -
    - - - - - -
    - - - - -
    const size_t ead::label_limit = 5
    -
    -static
    -
    - -
    -
    - -

    ◆ non_bijectives

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_set<size_t> ead::non_bijectives
    -
    -static
    -
    -Initial value:
    =
    {
    age::REDUCE_SUM,
    age::REDUCE_PROD,
    age::REDUCE_MIN,
    age::REDUCE_MAX,
    age::EXTEND,
    }
    -
    -
    -
    - - - - diff --git a/docs/namespaceead_1_1internal.html b/docs/namespaceead_1_1internal.html deleted file mode 100644 index 2ebc73326..000000000 --- a/docs/namespaceead_1_1internal.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Tenncor: ead::internal Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::internal Namespace Reference
    -
    -
    - - - - - -

    -Functions

    template<size_t N>
    std::array< ade::RankT, N > dim_copy (std::vector< ade::RankT > d)
     
    -

    Function Documentation

    - -

    ◆ dim_copy()

    - -
    -
    -
    -template<size_t N>
    - - - - - -
    - - - - - - - - -
    std::array<ade::RankT,N> ead::internal::dim_copy (std::vector< ade::RankTd)
    -
    -inline
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html deleted file mode 100644 index 5ba8a99a1..000000000 --- a/docs/namespacemembers.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - _ -

    -
    - - - - diff --git a/docs/namespacemembers_a.html b/docs/namespacemembers_a.html deleted file mode 100644 index 22b67b4fa..000000000 --- a/docs/namespacemembers_a.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - a -

    -
    - - - - diff --git a/docs/namespacemembers_b.html b/docs/namespacemembers_b.html deleted file mode 100644 index 2eabd3b4e..000000000 --- a/docs/namespacemembers_b.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - b -

      -
    • beautify_groups() -: tag -
    • -
    • build_template() -: template -
    • -
    • BuilderArgsT -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_c.html b/docs/namespacemembers_c.html deleted file mode 100644 index 7b64ca686..000000000 --- a/docs/namespacemembers_c.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - c -

      -
    • c2pshape() -: pyead -
    • -
    • CAND_TYPE -: opt -
    • -
    • CandArgsT -: opt -
    • -
    • CandsT -: opt -
    • -
    • CDimT -: ade -
    • -
    • commutative_tag -: tag -
    • -
    • CONST -: opt -
    • -
    • ContexT -: opt -
    • -
    • convert_to_node() -: ead -
    • -
    • convolution() -: ead -
    • -
    • convolution_image_grad() -: ead -
    • -
    • convolution_kernel_grad() -: ead -
    • -
    • ConvptrT -: opt -
    • -
    • CONVRT -: opt -
    • -
    • coorderize() -: ead -
    • -
    • coordinate() -: ade -
    • -
    • CoordptrT -: ade -, ead -
    • -
    • CoordT -: ade -
    • -
    • cos() -: ead -
    • -
    • CstConvertF -: opt -
    • -
    • csv_to_png() -: csv_to_png -
    • -
    • CtxsT -: opt -
    • -
    • CtxValT -: opt -
    • -
    • cube() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_d.html b/docs/namespacemembers_d.html deleted file mode 100644 index 71f702ed2..000000000 --- a/docs/namespacemembers_d.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - d -

    -
    - - - - diff --git a/docs/namespacemembers_e.html b/docs/namespacemembers_e.html deleted file mode 100644 index 1a29f682b..000000000 --- a/docs/namespacemembers_e.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - e -

      -
    • edge_label_fmt -: dbg -
    • -
    • EigenptrT -: ead -
    • -
    • EngineT -: ead -
    • -
    • eq() -: ead -
    • -
    • exp() -: ead -
    • -
    • extend() -: ade -, ead -
    • -
    • extend_grad() -: ead -
    • -
    • extend_map() -: ade -, ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html deleted file mode 100644 index 6d2a73dbb..000000000 --- a/docs/namespacemembers_enum.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
      -
    • CAND_TYPE -: opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_eval.html b/docs/namespacemembers_eval.html deleted file mode 100644 index 98648e9e5..000000000 --- a/docs/namespacemembers_eval.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
      -
    • CONST -: opt -
    • -
    • CONVRT -: opt -
    • -
    • INTERM -: opt -
    • -
    • SCALAR -: opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_f.html b/docs/namespacemembers_f.html deleted file mode 100644 index 03c4ffd1a..000000000 --- a/docs/namespacemembers_f.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - f -

      -
    • filter_head() -: tag -
    • -
    • flip() -: ade -
    • -
    • flip_map() -: ade -
    • -
    • FuncptrT -: ade -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html deleted file mode 100644 index 47dc69fd5..000000000 --- a/docs/namespacemembers_func.html +++ /dev/null @@ -1,598 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - _ -

      -
    • _apply_styles() -: csv_to_png -
    • -
    • _decl_func() -: apis -
    • -
    • _defn_func() -: apis -
    • -
    • _handle_api_header() -: apis -
    • -
    • _handle_api_source() -: apis -
    • -
    • _handle_api_templates() -: apis -
    • -
    • _handle_cases() -: dtypes -
    • -
    • _handle_code2names() -: opcodes -
    • -
    • _handle_conversions() -: dtypes -
    • -
    • _handle_defs() -: pyapis -
    • -
    • _handle_enumeration() -: dtypes -
    • -
    • _handle_get_types() -: dtypes -
    • -
    • _handle_mapping() -: dtypes -
    • -
    • _handle_name2codes() -: opcodes -
    • -
    • _handle_name2types() -: dtypes -
    • -
    • _handle_opcodes() -: opcodes -
    • -
    • _handle_ops() -: opcodes -
    • -
    • _handle_params() -: opcodes -
    • -
    • _handle_pybind() -: pyapis -
    • -
    • _handle_pybind_type() -: pyapis -
    • -
    • _handle_type2names() -: dtypes -
    • -
    • _handle_typesizes() -: dtypes -
    • -
    • _handle_unique_wrap() -: pyapis -
    • -
    • _nullcheck() -: apis -
    • -
    • _parse_args() -: apis -
    • -
    • _str_clean() -: csv_to_png -
    • -
    • _strip_template_prefix() -: pyapis -
    • -
    • _sub_pybind() -: pyapis -
    • -
    • _template_defn_func() -: apis -
    • -
    • _wrap_func() -: pyapis -
    • -
    - - -

    - a -

      -
    • abs() -: ead -
    • -
    • add() -: ead -
    • -
    • adjacencies() -: tag -
    • -
    • apply_shaper() -: ade -
    • -
    • arr2vec() -: pyead -
    • -
    - - -

    - b -

      -
    • beautify_groups() -: tag -
    • -
    • build_template() -: template -
    • -
    - - -

    - c -

      -
    • c2pshape() -: pyead -
    • -
    • convert_to_node() -: ead -
    • -
    • convolution() -: ead -
    • -
    • convolution_image_grad() -: ead -
    • -
    • convolution_kernel_grad() -: ead -
    • -
    • coorderize() -: ead -
    • -
    • coordinate() -: ade -
    • -
    • cos() -: ead -
    • -
    • csv_to_png() -: csv_to_png -
    • -
    • cube() -: ead -
    • -
    - - -

    - d -

    - - -

    - e -

      -
    • eq() -: ead -
    • -
    • exp() -: ead -
    • -
    • extend() -: ade -, ead -
    • -
    • extend_grad() -: ead -
    • -
    • extend_map() -: ade -, ead -
    • -
    - - -

    - f -

      -
    • filter_head() -: tag -
    • -
    • flip() -: ade -
    • -
    • flip_map() -: ade -
    • -
    - - -

    - g -

      -
    • get_engine() -: ead -
    • -
    • get_group_reg() -: tag -
    • -
    • get_property_reg() -: tag -
    • -
    • get_reg() -: tag -
    • -
    • get_shape() -: ead -
    • -
    • graph_to_csvimg() -: dbg_wrapper -
    • -
    • gt() -: ead -
    • -
    - - -

    - i -

      -
    • identity_map() -: ade -, ead -
    • -
    • index() -: ade -
    • -
    • inverse() -: ade -
    • -
    • is_2d() -: ead -
    • -
    • is_big_endian() -: ead -
    • -
    • is_equal() -: opt -
    • -
    • is_identity() -: ade -
    • -
    • is_scalar() -: opt -
    • -
    - - -

    - l -

      -
    • load_graph() -: pbm -
    • -
    • log() -: ead -
    • -
    • lt() -: ead -, opt -
    • -
    - - -

    - m -

      -
    • main() -: agen -
    • -
    • make_constant() -: ead -
    • -
    • make_constant_scalar() -: ead -
    • -
    • make_eigenmatrix() -: ead -
    • -
    • make_eigentensor() -: ead -
    • -
    • make_functor() -: ead -
    • -
    • make_matmap() -: ead -
    • -
    • make_tensmap() -: ead -
    • -
    • make_tensor() -: ead -
    • -
    • make_variable() -: ead -
    • -
    • make_variable_scalar() -: ead -
    • -
    • mat_to_matmap() -: ead -
    • -
    • mat_to_tensmap() -: ead -
    • -
    • matmul() -: ade -, ead -
    • -
    • max() -: ead -
    • -
    • min() -: ead -
    • -
    • mul() -: ead -
    • -
    • multigraph_to_csvimg() -: dbg_wrapper -
    • -
    - - -

    - n -

      -
    • neg() -: ead -
    • -
    • neq() -: ead -
    • -
    • norm_gen() -: ead -
    • -
    - - -

    - o -

      -
    • operator==() -: dbg -, opt -, tag -
    • -
    • optimize() -: opt -
    • -
    - - -

    - p -

    - - -

    - r -

      -
    • rand_uniform() -: ead -
    • -
    • read_graph() -: csv_to_png -
    • -
    • recursive_group_tag() -: tag -
    • -
    • reduce() -: ade -, ead -
    • -
    • reduce_1d_map() -: ade -
    • -
    • reduce_grad() -: ead -
    • -
    • reduce_map() -: ade -, ead -
    • -
    • reduce_sum() -: ead -
    • -
    • register_builder() -: ead -
    • -
    • remove_all_duplicates() -: opt -
    • -
    • remove_duplicates() -: opt -
    • -
    • replace_parents() -: opt -
    • -
    • round() -: ead -
    • -
    - - -

    - s -

      -
    • select() -: ead -
    • -
    • shape_convert() -: ead -
    • -
    • sigmoid() -: ead -
    • -
    • sigmoid_grad() -: ead -
    • -
    • sin() -: ead -
    • -
    • slice() -: ead -
    • -
    • sort_vargs() -: opt -
    • -
    • sqrt() -: ead -
    • -
    • square() -: ead -
    • -
    • sub() -: ead -
    • -
    - - -

    - t -

      -
    • tan() -: ead -
    • -
    • tanh() -: ead -
    • -
    • tens_to_matmap() -: ead -
    • -
    • tens_to_tensmap() -: ead -
    • -
    • tensmap_to_matmap() -: ead -
    • -
    • to_args() -: ade -
    • -
    • to_string() -: ade -, opt -
    • -
    • track_owners() -: ade -
    • -
    • typedata_to_array() -: pyead -
    • -
    - - -

    - u -

      -
    • unif() -: ead -
    • -
    • unif_gen() -: ead -
    • -
    - - -

    - v -

      -
    • vectorize() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_g.html b/docs/namespacemembers_g.html deleted file mode 100644 index 83326d44b..000000000 --- a/docs/namespacemembers_g.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - g -

      -
    • GenF -: ead -
    • -
    • get_engine() -: ead -
    • -
    • get_group_reg() -: tag -
    • -
    • get_property_reg() -: tag -
    • -
    • get_reg() -: tag -
    • -
    • get_shape() -: ead -
    • -
    • graph_to_csvimg() -: dbg_wrapper -
    • -
    • group_prefix -: opt -
    • -
    • groups_key -: tag -
    • -
    • gt() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_h.html b/docs/namespacemembers_h.html deleted file mode 100644 index ee2fe1990..000000000 --- a/docs/namespacemembers_h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - h -

    -
    - - - - diff --git a/docs/namespacemembers_i.html b/docs/namespacemembers_i.html deleted file mode 100644 index 5e701820e..000000000 --- a/docs/namespacemembers_i.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - i -

      -
    • identity -: ade -
    • -
    • identity_map() -: ade -, ead -
    • -
    • immutable_tag -: tag -
    • -
    • ImmutablesT -: opt -
    • -
    • index() -: ade -
    • -
    • INTERM -: opt -
    • -
    • inverse() -: ade -
    • -
    • is_2d() -: ead -
    • -
    • is_big_endian() -: ead -
    • -
    • is_equal() -: opt -
    • -
    • is_identity() -: ade -
    • -
    • is_scalar() -: opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_l.html b/docs/namespacemembers_l.html deleted file mode 100644 index c5d7a7a01..000000000 --- a/docs/namespacemembers_l.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - l -

      -
    • label_limit -: ead -
    • -
    • LeafptrT -: ade -
    • -
    • load_graph() -: pbm -
    • -
    • log() -: ead -
    • -
    • lt() -: ead -, opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_m.html b/docs/namespacemembers_m.html deleted file mode 100644 index 159f2644e..000000000 --- a/docs/namespacemembers_m.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - m -

      -
    • main() -: agen -
    • -
    • make_constant() -: ead -
    • -
    • make_constant_scalar() -: ead -
    • -
    • make_eigenmatrix() -: ead -
    • -
    • make_eigentensor() -: ead -
    • -
    • make_functor() -: ead -
    • -
    • make_matmap() -: ead -
    • -
    • make_tensmap() -: ead -
    • -
    • make_tensor() -: ead -
    • -
    • make_variable() -: ead -
    • -
    • make_variable_scalar() -: ead -
    • -
    • mat_dim -: ade -
    • -
    • mat_size -: ade -
    • -
    • mat_to_matmap() -: ead -
    • -
    • mat_to_tensmap() -: ead -
    • -
    • MatMapT -: ead -
    • -
    • matmul() -: ade -, ead -
    • -
    • MatrixT -: ade -, ead -
    • -
    • max() -: ead -
    • -
    • max_attempts -: dbg -
    • -
    • min() -: ead -
    • -
    • mul() -: ead -
    • -
    • multigraph_to_csvimg() -: dbg_wrapper -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_n.html b/docs/namespacemembers_n.html deleted file mode 100644 index 21cd7c163..000000000 --- a/docs/namespacemembers_n.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - n -

      -
    • nargs -: csv_to_png -
    • -
    • neg() -: ead -
    • -
    • NElemT -: ade -
    • -
    • neq() -: ead -
    • -
    • NodeBuilderF -: ead -
    • -
    • NodeptrT -: ead -
    • -
    • NodesT -: ead -
    • -
    • non_bijectives -: ead -
    • -
    • norm_gen() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_o.html b/docs/namespacemembers_o.html deleted file mode 100644 index 4f2c1e266..000000000 --- a/docs/namespacemembers_o.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - o -

      -
    • operator==() -: dbg -, opt -, tag -
    • -
    • optimize() -: opt -
    • -
    • OwnerMapT -: ade -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_p.html b/docs/namespacemembers_p.html deleted file mode 100644 index 7e89babc9..000000000 --- a/docs/namespacemembers_p.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - p -

    -
    - - - - diff --git a/docs/namespacemembers_r.html b/docs/namespacemembers_r.html deleted file mode 100644 index 033c013f2..000000000 --- a/docs/namespacemembers_r.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - r -

      -
    • rand_uniform() -: ead -
    • -
    • rank_cap -: ade -
    • -
    • RankT -: ade -
    • -
    • read_graph() -: csv_to_png -
    • -
    • recursive_group_tag() -: tag -
    • -
    • reduce() -: ade -, ead -
    • -
    • reduce_1d_map() -: ade -
    • -
    • reduce_grad() -: ead -
    • -
    • reduce_map() -: ade -, ead -
    • -
    • reduce_sum() -: ead -
    • -
    • ReduceOutT -: ead -
    • -
    • register_builder() -: ead -
    • -
    • remove_all_duplicates() -: opt -
    • -
    • remove_duplicates() -: opt -
    • -
    • replace_parents() -: opt -
    • -
    • round() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_s.html b/docs/namespacemembers_s.html deleted file mode 100644 index 2458ce9c2..000000000 --- a/docs/namespacemembers_s.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - s -

      -
    • SCALAR -: opt -
    • -
    • select() -: ead -
    • -
    • SgraphptrT -: tag -
    • -
    • shape_convert() -: ead -
    • -
    • ShapeT -: ade -
    • -
    • sigmoid() -: ead -
    • -
    • sigmoid_grad() -: ead -
    • -
    • sin() -: ead -
    • -
    • slice() -: ead -
    • -
    • sort_vargs() -: opt -
    • -
    • sqrt() -: ead -
    • -
    • square() -: ead -
    • -
    • StringsT -: pbm -
    • -
    • sub() -: ead -
    • -
    • SubgraphAssocsT -: tag -
    • -
    • SubgraphsT -: tag -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_t.html b/docs/namespacemembers_t.html deleted file mode 100644 index f72646d76..000000000 --- a/docs/namespacemembers_t.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - t -

      -
    • tag_node_type -: dbg -
    • -
    • tag_str_key -: dbg -
    • -
    • TagptrT -: tag -
    • -
    • TagRepsT -: tag -
    • -
    • tan() -: ead -
    • -
    • tanh() -: ead -
    • -
    • tens_to_matmap() -: ead -
    • -
    • tens_to_tensmap() -: ead -
    • -
    • tensmap_to_matmap() -: ead -
    • -
    • TensMapT -: ead -
    • -
    • TensorT -: ead -
    • -
    • TensptrT -: ade -
    • -
    • TensrefT -: ade -
    • -
    • TensSetT -: ead -, tag -
    • -
    • TensT -: ade -, pbm -
    • -
    • to_args() -: ade -
    • -
    • to_string() -: ade -, opt -
    • -
    • track_owners() -: ade -
    • -
    • typedata_to_array() -: pyead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html deleted file mode 100644 index 8dca1572e..000000000 --- a/docs/namespacemembers_type.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - a -

      -
    • AdjMapT -: tag -
    • -
    • AGroupsT -: tag -
    • -
    • ArgsT -: ade -, ead -
    • -
    - - -

    - b -

      -
    • BuilderArgsT -: ead -
    • -
    - - -

    - c -

      -
    • CandArgsT -: opt -
    • -
    • CandsT -: opt -
    • -
    • CDimT -: ade -
    • -
    • ContexT -: opt -
    • -
    • ConvptrT -: opt -
    • -
    • CoordptrT -: ade -, ead -
    • -
    • CoordT -: ade -
    • -
    • CstConvertF -: opt -
    • -
    • CtxsT -: opt -
    • -
    • CtxValT -: opt -
    • -
    - - -

    - d -

      -
    • DimensionsT -: ead -
    • -
    • DimT -: ade -
    • -
    - - -

    - e -

      -
    • EigenptrT -: ead -
    • -
    • EngineT -: ead -
    • -
    - - -

    - f -

      -
    • FuncptrT -: ade -
    • -
    - - -

    - g -

      -
    • GenF -: ead -
    • -
    - - -

    - h -

      -
    • HFunctorsT -: opt -
    • -
    - - -

    - i -

      -
    • ImmutablesT -: opt -
    • -
    - - -

    - l -

      -
    • LeafptrT -: ade -
    • -
    - - -

    - m -

      -
    • MatMapT -: ead -
    • -
    • MatrixT -: ade -, ead -
    • -
    - - -

    - n -

      -
    • NElemT -: ade -
    • -
    • NodeBuilderF -: ead -
    • -
    • NodeptrT -: ead -
    • -
    • NodesT -: ead -
    • -
    - - -

    - o -

      -
    • OwnerMapT -: ade -
    • -
    - - -

    - p -

      -
    • PathedMapT -: pbm -
    • -
    - - -

    - r -

      -
    • RankT -: ade -
    • -
    • ReduceOutT -: ead -
    • -
    - - -

    - s -

      -
    • SgraphptrT -: tag -
    • -
    • ShapeT -: ade -
    • -
    • StringsT -: pbm -
    • -
    • SubgraphAssocsT -: tag -
    • -
    • SubgraphsT -: tag -
    • -
    - - -

    - t -

      -
    • TagptrT -: tag -
    • -
    • TagRepsT -: tag -
    • -
    • TensMapT -: ead -
    • -
    • TensorT -: ead -
    • -
    • TensptrT -: ade -
    • -
    • TensrefT -: ade -
    • -
    • TensSetT -: ead -, tag -
    • -
    • TensT -: ade -, pbm -
    • -
    - - -

    - v -

      -
    • VarptrT -: ead -
    • -
    • VoterArgsT -: opt -
    • -
    • VotptrT -: opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_u.html b/docs/namespacemembers_u.html deleted file mode 100644 index cbd618a71..000000000 --- a/docs/namespacemembers_u.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - u -

      -
    • unif() -: ead -
    • -
    • unif_gen() -: ead -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_v.html b/docs/namespacemembers_v.html deleted file mode 100644 index 19015076a..000000000 --- a/docs/namespacemembers_v.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - v -

      -
    • VarptrT -: ead -
    • -
    • vectorize() -: ead -
    • -
    • VoterArgsT -: opt -
    • -
    • VotptrT -: opt -
    • -
    -
    - - - - diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html deleted file mode 100644 index 929d8723a..000000000 --- a/docs/namespacemembers_vars.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - -Tenncor: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - _ -

    - - -

    - a -

    - - -

    - c -

      -
    • commutative_tag -: tag -
    • -
    - - -

    - d -

    - - -

    - e -

      -
    • edge_label_fmt -: dbg -
    • -
    - - -

    - g -

      -
    • group_prefix -: opt -
    • -
    • groups_key -: tag -
    • -
    - - -

    - h -

    - - -

    - i -

      -
    • identity -: ade -
    • -
    • immutable_tag -: tag -
    • -
    - - -

    - l -

      -
    • label_limit -: ead -
    • -
    - - -

    - m -

      -
    • mat_dim -: ade -
    • -
    • mat_size -: ade -
    • -
    • max_attempts -: dbg -
    • -
    - - -

    - n -

    - - -

    - p -

    - - -

    - r -

      -
    • rank_cap -: ade -
    • -
    - - -

    - t -

      -
    • tag_node_type -: dbg -
    • -
    • tag_str_key -: dbg -
    • -
    -
    - - - - diff --git a/docs/namespaceopcodes.html b/docs/namespaceopcodes.html deleted file mode 100644 index 27e9e856d..000000000 --- a/docs/namespaceopcodes.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - -Tenncor: opcodes Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    opcodes Namespace Reference
    -
    -
    - - - - -

    -Classes

    class  OpcodesPlugin
     
    - - - - - - - - - - - -

    -Functions

    def _handle_opcodes (params, opcalls)
     
    def _handle_params (params, opcalls)
     
    def _handle_ops (params, opcalls)
     
    def _handle_code2names (params, opcalls)
     
    def _handle_name2codes (params, opcalls)
     
    - - - - - - - -

    -Variables

    string _header_template
     
    string _source_template
     
    string _plugin_id = "OPCODE"
     
    -

    Function Documentation

    - -

    ◆ _handle_code2names()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def opcodes._handle_code2names ( params,
     opcalls 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_name2codes()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def opcodes._handle_name2codes ( params,
     opcalls 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_opcodes()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def opcodes._handle_opcodes ( params,
     opcalls 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def opcodes._handle_ops ( params,
     opcalls 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_params()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def opcodes._handle_params ( params,
     opcalls 
    )
    -
    -private
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ _header_template

    - -
    -
    - - - - - -
    - - - - -
    string opcodes._header_template
    -
    -private
    -
    - -
    -
    - -

    ◆ _plugin_id

    - -
    -
    - - - - - -
    - - - - -
    string opcodes._plugin_id = "OPCODE"
    -
    -private
    -
    - -
    -
    - -

    ◆ _source_template

    - -
    -
    - - - - - -
    - - - - -
    string opcodes._source_template
    -
    -private
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespaceopt.html b/docs/namespaceopt.html deleted file mode 100644 index 8ad7dd332..000000000 --- a/docs/namespaceopt.html +++ /dev/null @@ -1,963 +0,0 @@ - - - - - - - -Tenncor: opt Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    opt Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Classes

    struct  CandArg
     
    struct  CommHasher
     
    struct  CommVoter
     
    struct  iConverter
     
    struct  iConverterBuilder
     
    struct  iVoter
     
    struct  Matcher
     
    struct  OptCtx
     
    struct  OrdrHasher
     
    struct  OrdrVoter
     
    struct  RulesContext
     
    struct  SegVArgs
     
    struct  Symbol
     
    struct  SymbolHash
     
    struct  VariadicVoter
     
    struct  VoterArg
     
    struct  VoterPool
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Typedefs

    using CtxValT = std::set< ade::TensptrT >
     
    using ContexT = std::map< std::string, CtxValT >
     
    using CtxsT = std::unordered_set< ContexT, boost::hash< ContexT > >
     
    using CandsT = std::unordered_map< Symbol, CtxsT, SymbolHash >
     
    using CandArgsT = std::vector< CandArg >
     
    using ConvptrT = std::shared_ptr< iConverter >
     
    using VoterArgsT = std::vector< VoterArg >
     
    using VotptrT = std::shared_ptr< iVoter >
     
    using CstConvertF = std::function< ade::TensptrT(ade::iTensor *)>
     
    using ImmutablesT = std::vector< ade::LeafptrT >
     
    using HFunctorsT = std::vector< std::vector< ade::FuncptrT > >
     
    - - - -

    -Enumerations

    enum  CAND_TYPE { SCALAR = 0, -CONST, -INTERM, -CONVRT - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    bool operator== (const Symbol &lhs, const Symbol &rhs)
     
    void sort_vargs (VoterArgsT &args)
     
    bool operator== (const VoterArgsT &lhs, const VoterArgsT &rhs)
     
    bool operator== (const SegVArgs &lhs, const SegVArgs &rhs)
     
    ade::TensT optimize (ade::TensT roots, const OptCtx &opts)
     
    OptCtx parse (std::string content, const iConverterBuilder &builder)
     
    OptCtx parse_file (std::string filename, const iConverterBuilder &builder)
     
    void replace_parents (const ade::ParentFinder &pfinder, ade::iTensor *source, ade::TensptrT target)
     
    template<typename T >
    std::vector< T > remove_duplicates (ade::TensT &roots, std::vector< T > tens, const ade::ParentFinder &pfinder, tag::TagRegistry &registry=tag::get_reg())
     
    void populate_graph (ImmutablesT &immutables, HFunctorsT &functors, const ade::TensT &roots)
     
    void remove_all_duplicates (ade::TensT &roots, ImmutablesT &immutables, HFunctorsT &functors)
     
    bool is_scalar (ade::iLeaf *leaf)
     
    std::string to_string (ade::CoordptrT c)
     
    bool lt (ade::CoordptrT a, ade::CoordptrT b)
     
    bool is_equal (ade::CoordptrT a, ade::CoordptrT b)
     
    bool lt (std::unordered_set< ade::iTensor *> priorities, ade::iLeaf *a, ade::iLeaf *b)
     
    bool is_equal (ade::iLeaf *a, ade::iLeaf *b)
     
    bool lt (std::unordered_set< ade::iTensor *> priorities, ade::iFunctor *a, ade::iFunctor *b)
     
    bool is_equal (ade::iFunctor *a, ade::iFunctor *b)
     
    - - - -

    -Variables

    const std::string group_prefix = "group:"
     
    -

    Typedef Documentation

    - -

    ◆ CandArgsT

    - -
    -
    - - - - -
    using opt::CandArgsT = typedef std::vector<CandArg>
    -
    - -
    -
    - -

    ◆ CandsT

    - -
    -
    - - - - -
    using opt::CandsT = typedef std::unordered_map<Symbol,CtxsT,SymbolHash>
    -
    - -
    -
    - -

    ◆ ContexT

    - -
    -
    - - - - -
    using opt::ContexT = typedef std::map<std::string,CtxValT>
    -
    - -
    -
    - -

    ◆ ConvptrT

    - -
    -
    - - - - -
    using opt::ConvptrT = typedef std::shared_ptr<iConverter>
    -
    - -
    -
    - -

    ◆ CstConvertF

    - -
    -
    - - - - -
    using opt::CstConvertF = typedef std::function<ade::TensptrT(ade::iTensor*)>
    -
    - -
    -
    - -

    ◆ CtxsT

    - -
    -
    - - - - -
    using opt::CtxsT = typedef std::unordered_set<ContexT,boost::hash<ContexT> >
    -
    - -
    -
    - -

    ◆ CtxValT

    - -
    -
    - - - - -
    using opt::CtxValT = typedef std::set<ade::TensptrT>
    -
    - -
    -
    - -

    ◆ HFunctorsT

    - -
    -
    - - - - -
    using opt::HFunctorsT = typedef std::vector<std::vector<ade::FuncptrT> >
    -
    - -
    -
    - -

    ◆ ImmutablesT

    - -
    -
    - - - - -
    using opt::ImmutablesT = typedef std::vector<ade::LeafptrT>
    -
    - -
    -
    - -

    ◆ VoterArgsT

    - -
    -
    - - - - -
    using opt::VoterArgsT = typedef std::vector<VoterArg>
    -
    - -
    -
    - -

    ◆ VotptrT

    - -
    -
    - - - - -
    using opt::VotptrT = typedef std::shared_ptr<iVoter>
    -
    - -
    -
    -

    Enumeration Type Documentation

    - -

    ◆ CAND_TYPE

    - -
    -
    - - - - -
    enum opt::CAND_TYPE
    -
    - - - - - -
    Enumerator
    SCALAR 
    CONST 
    INTERM 
    CONVRT 
    - -
    -
    -

    Function Documentation

    - -

    ◆ is_equal() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool opt::is_equal (ade::CoordptrT a,
    ade::CoordptrT b 
    )
    -
    - -
    -
    - -

    ◆ is_equal() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool opt::is_equal (ade::iLeafa,
    ade::iLeafb 
    )
    -
    - -
    -
    - -

    ◆ is_equal() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool opt::is_equal (ade::iFunctora,
    ade::iFunctorb 
    )
    -
    - -
    -
    - -

    ◆ is_scalar()

    - -
    -
    - - - - - - - - -
    bool opt::is_scalar (ade::iLeafleaf)
    -
    - -
    -
    - -

    ◆ lt() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool opt::lt (ade::CoordptrT a,
    ade::CoordptrT b 
    )
    -
    - -
    -
    - -

    ◆ lt() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool opt::lt (std::unordered_set< ade::iTensor *> priorities,
    ade::iLeafa,
    ade::iLeafb 
    )
    -
    - -
    -
    - -

    ◆ lt() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool opt::lt (std::unordered_set< ade::iTensor *> priorities,
    ade::iFunctora,
    ade::iFunctorb 
    )
    -
    - -
    -
    - -

    ◆ operator==() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool opt::operator== (const Symbollhs,
    const Symbolrhs 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator==() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool opt::operator== (const VoterArgsTlhs,
    const VoterArgsTrhs 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator==() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool opt::operator== (const SegVArgslhs,
    const SegVArgsrhs 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ optimize()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    ade::TensT opt::optimize (ade::TensT roots,
    const OptCtxopts 
    )
    -
    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    OptCtx opt::parse (std::string content,
    const iConverterBuilderbuilder 
    )
    -
    - -
    -
    - -

    ◆ parse_file()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    OptCtx opt::parse_file (std::string filename,
    const iConverterBuilderbuilder 
    )
    -
    - -
    -
    - -

    ◆ populate_graph()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void opt::populate_graph (ImmutablesTimmutables,
    HFunctorsTfunctors,
    const ade::TensTroots 
    )
    -
    - -
    -
    - -

    ◆ remove_all_duplicates()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void opt::remove_all_duplicates (ade::TensTroots,
    ImmutablesTimmutables,
    HFunctorsTfunctors 
    )
    -
    - -
    -
    - -

    ◆ remove_duplicates()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    std::vector<T> opt::remove_duplicates (ade::TensTroots,
    std::vector< T > tens,
    const ade::ParentFinderpfinder,
    tag::TagRegistryregistry = tag::get_reg() 
    )
    -
    - -
    -
    - -

    ◆ replace_parents()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void opt::replace_parents (const ade::ParentFinderpfinder,
    ade::iTensorsource,
    ade::TensptrT target 
    )
    -
    - -
    -
    - -

    ◆ sort_vargs()

    - -
    -
    - - - - - - - - -
    void opt::sort_vargs (VoterArgsTargs)
    -
    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - - - - -
    std::string opt::to_string (ade::CoordptrT c)
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ group_prefix

    - -
    -
    - - - - -
    const std::string opt::group_prefix = "group:"
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacepbm.html b/docs/namespacepbm.html deleted file mode 100644 index dbf402fa3..000000000 --- a/docs/namespacepbm.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - -Tenncor: pbm Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    pbm Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - -

    -Classes

    struct  GraphInfo
     Contains all information necessary to recreate labelled ADE graph. More...
     
    struct  GraphSaver
     Graph serialization traveler. More...
     
    struct  iLoader
     
    struct  iSaver
     
    struct  PathedTens
     Tree node for labeling Tensptrs. More...
     
    - - - - - - - - - - -

    -Typedefs

    using TensT = std::vector< ade::TensptrT >
     Tensptr vector type. More...
     
    using StringsT = std::list< fmts::string >
     String list type used for paths. More...
     
    using PathedMapT = std::unordered_map< ade::TensptrT, StringsT >
     Map Tensptrs to a string path type. More...
     
    - - - - - -

    -Functions

    template<typename LOAD , typename std::enable_if< std::is_base_of< iLoader, LOAD >::value >::type * = nullptr>
    void load_graph (GraphInfo &out, const cortenn::Graph &in)
     Return graph info through out available from in graph. More...
     
    -

    Detailed Description

    -

    data.hpp pbm

    -

    Purpose: Define functions for marshaling equation graph

    -

    graph.hpp pbm

    -

    Purpose: Define functions for marshal and unmarshal equation graph

    -

    save.hpp pbm

    -

    Purpose: Define functions for marshaling equation graph

    -

    Typedef Documentation

    - -

    ◆ PathedMapT

    - -
    -
    - - - - -
    using pbm::PathedMapT = typedef std::unordered_map<ade::TensptrT,StringsT>
    -
    - -

    Map Tensptrs to a string path type.

    - -
    -
    - -

    ◆ StringsT

    - -
    -
    - - - - -
    using pbm::StringsT = typedef std::list<fmts::string>
    -
    - -

    String list type used for paths.

    - -
    -
    - -

    ◆ TensT

    - -
    -
    - - - - -
    using pbm::TensT = typedef std::vector<ade::TensptrT>
    -
    - -

    Tensptr vector type.

    - -
    -
    -

    Function Documentation

    - -

    ◆ load_graph()

    - -
    -
    -
    -template<typename LOAD , typename std::enable_if< std::is_base_of< iLoader, LOAD >::value >::type * = nullptr>
    - - - - - - - - - - - - - - - - - - -
    void pbm::load_graph (GraphInfoout,
    const cortenn::Graph & in 
    )
    -
    - -

    Return graph info through out available from in graph.

    - -
    -
    -
    - - - - diff --git a/docs/namespacepyapis.html b/docs/namespacepyapis.html deleted file mode 100644 index 68eea61a4..000000000 --- a/docs/namespacepyapis.html +++ /dev/null @@ -1,474 +0,0 @@ - - - - - - - -Tenncor: pyapis Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    pyapis Namespace Reference
    -
    -
    - - - - -

    -Classes

    class  PyAPIsPlugin
     
    - - - - - - - - - - - - - - - -

    -Functions

    def _sub_pybind (stmt, source)
     
    def _strip_template_prefix (template)
     
    def _wrap_func (idx, api, namespace)
     
    def _handle_pybind (pybind_type)
     
    def _handle_pybind_type (pybind_type)
     
    def _handle_unique_wrap (pybind_type, apis, namespace)
     
    def _handle_defs (pybind_type, apis, module_name, first_module)
     
    - - - - - - - - - - - -

    -Variables

    string _pybindt = 'PybindT'
     
    string _header_template
     
    string _source_template
     
    string _func_fmt
     
    string _plugin_id = 'PYBINDER'
     
    -

    Function Documentation

    - -

    ◆ _handle_defs()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def pyapis._handle_defs ( pybind_type,
     apis,
     module_name,
     first_module 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_pybind()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def pyapis._handle_pybind ( pybind_type)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_pybind_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def pyapis._handle_pybind_type ( pybind_type)
    -
    -private
    -
    - -
    -
    - -

    ◆ _handle_unique_wrap()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def pyapis._handle_unique_wrap ( pybind_type,
     apis,
     namespace 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _strip_template_prefix()

    - -
    -
    - - - - - -
    - - - - - - - - -
    def pyapis._strip_template_prefix ( template)
    -
    -private
    -
    - -
    -
    - -

    ◆ _sub_pybind()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    def pyapis._sub_pybind ( stmt,
     source 
    )
    -
    -private
    -
    - -
    -
    - -

    ◆ _wrap_func()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def pyapis._wrap_func ( idx,
     api,
     namespace 
    )
    -
    -private
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ _func_fmt

    - -
    -
    - - - - - -
    - - - - -
    string pyapis._func_fmt
    -
    -private
    -
    -Initial value:
    1 = '''
    2 {outtype} {funcname}_{idx} ({param_decl})
    3 {{
    4  return {namespace}::{funcname}({args});
    5 }}
    6 '''
    -
    -
    - -

    ◆ _header_template

    - -
    -
    - - - - - -
    - - - - -
    string pyapis._header_template
    -
    -private
    -
    -Initial value:
    1 = '''
    2 // type to replace template arguments in pybind
    3 using {pybind} = {pybind_type};
    4 //>>> ^ pybind, pybind_type
    5 '''
    -
    -
    - -

    ◆ _plugin_id

    - -
    -
    - - - - - -
    - - - - -
    string pyapis._plugin_id = 'PYBINDER'
    -
    -private
    -
    - -
    -
    - -

    ◆ _pybindt

    - -
    -
    - - - - - -
    - - - - -
    string pyapis._pybindt = 'PybindT'
    -
    -private
    -
    - -
    -
    - -

    ◆ _source_template

    - -
    -
    - - - - - -
    - - - - -
    string pyapis._source_template
    -
    -private
    -
    -Initial value:
    1 = '''
    2 namespace py = pybind11;
    3 
    4 namespace pyage
    5 {{
    6 
    7 //>>> unique_wrap
    8 {unique_wrap}
    9 
    10 }}
    11 
    12 //>>> modname
    13 PYBIND11_MODULE({modname}, m_{modname})
    14 {{
    15  m_{modname}.doc() = "pybind for {modname} api";
    16 
    17  //>>> modname
    18  py::class_<ade::iTensor,ade::TensptrT> tensor(m_{modname}, "Tensor");
    19 
    20  //>>> defs
    21  {defs}
    22 }}
    23 '''
    -
    -
    -
    - - - - diff --git a/docs/namespacepyead.html b/docs/namespacepyead.html deleted file mode 100644 index b4a5a078b..000000000 --- a/docs/namespacepyead.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -Tenncor: pyead Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    pyead Namespace Reference
    -
    -
    - - - - - - - - - - - -

    -Functions

    ade::Shape p2cshape (std::vector< py::ssize_t > &pyshape)
     
    std::vector< ade::DimTc2pshape (const ade::Shape &cshape)
     
    template<typename T >
    py::array typedata_to_array (ead::iNode< PybindT > *tnode, py::dtype dtype)
     
    std::vector< PybindT > arr2vec (ade::Shape &outshape, py::array data)
     
    -

    Function Documentation

    - -

    ◆ arr2vec()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    std::vector<PybindT> pyead::arr2vec (ade::Shapeoutshape,
    py::array data 
    )
    -
    - -
    -
    - -

    ◆ c2pshape()

    - -
    -
    - - - - - - - - -
    std::vector<ade::DimT> pyead::c2pshape (const ade::Shapecshape)
    -
    - -
    -
    - -

    ◆ p2cshape()

    - -
    -
    - - - - - - - - -
    ade::Shape pyead::p2cshape (std::vector< py::ssize_t > & pyshape)
    -
    - -
    -
    - -

    ◆ typedata_to_array()

    - -
    -
    -
    -template<typename T >
    - - - - - - - - - - - - - - - - - - -
    py::array pyead::typedata_to_array (ead::iNode< PybindT > * tnode,
    py::dtype dtype 
    )
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespaces.html b/docs/namespaces.html deleted file mode 100644 index 0be117ab0..000000000 --- a/docs/namespaces.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Tenncor: Namespace List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Namespace List
    -
    -
    -
    Here is a list of all namespaces with brief descriptions:
    -
    [detail level 12]
    - - - - - - - - - - - - - - - - -
     Nade
     Nagen
     Napis
     Ncsv_to_png
     Ndbg
     Ndbg_wrapper
     Ndtypes
     Nead
     Ninternal
     Nopcodes
     Nopt
     Npbm
     Npyapis
     Npyead
     Ntag
     Ntemplate
    -
    -
    - - - - diff --git a/docs/namespacetag.html b/docs/namespacetag.html deleted file mode 100644 index a3e6bd255..000000000 --- a/docs/namespacetag.html +++ /dev/null @@ -1,546 +0,0 @@ - - - - - - - -Tenncor: tag Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    tag Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Classes

    struct  GroupRegistry
     
    struct  GroupTag
     
    struct  iTag
     
    struct  PropertyRegistry
     
    struct  PropTag
     PropTag (properties tag) define node properties. More...
     
    struct  Subgraph
     
    struct  TagCollective
     
    struct  TagRegistry
     
    struct  TensKey
     
    struct  TensKeyHash
     
    - - - - - - - - - - - - - - - - - -

    -Typedefs

    using TensSetT = std::unordered_set< TensKey, TensKeyHash >
     
    using AGroupsT = std::map< std::string, std::unordered_set< std::string > >
     
    using AdjMapT = std::unordered_map< ade::iTensor *, AGroupsT >
     
    using SgraphptrT = std::shared_ptr< Subgraph >
     
    using SubgraphsT = std::unordered_set< SgraphptrT >
     
    using SubgraphAssocsT = std::unordered_map< ade::iTensor *, SubgraphsT >
     
    using TagRepsT = std::map< std::string, std::vector< std::string > >
     
    using TagptrT = std::unique_ptr< iTag >
     
    - - - - - - - - - - - - - - - - - -

    -Functions

    GroupRegistryget_group_reg (void)
     
    void recursive_group_tag (ade::TensrefT tens, std::string group, std::unordered_set< ade::iTensor *> stops, GroupRegistry &registry=get_group_reg())
     
    void adjacencies (AdjMapT &out, ade::TensT roots, GroupRegistry &registry=get_group_reg())
     
    void beautify_groups (SubgraphAssocsT &out, const AdjMapT &adjs)
     
    void filter_head (SubgraphAssocsT &out, const SubgraphAssocsT &assocs)
     
    PropertyRegistryget_property_reg (void)
     
    bool operator== (const TensKey &lhs, const TensKey &rhs)
     
    TagRegistryget_reg (void)
     
    - - - - - - - - - -

    -Variables

    const std::string groups_key = "groups"
     
    const std::string props_key = "properties"
     
    const std::string commutative_tag = "commutative"
     
    const std::string immutable_tag = "immutable"
     
    -

    Typedef Documentation

    - -

    ◆ AdjMapT

    - -
    -
    - - - - -
    using tag::AdjMapT = typedef std::unordered_map<ade::iTensor*,AGroupsT>
    -
    - -
    -
    - -

    ◆ AGroupsT

    - -
    -
    - - - - -
    using tag::AGroupsT = typedef std::map<std::string,std::unordered_set<std::string> >
    -
    - -
    -
    - -

    ◆ SgraphptrT

    - -
    -
    - - - - -
    using tag::SgraphptrT = typedef std::shared_ptr<Subgraph>
    -
    - -
    -
    - -

    ◆ SubgraphAssocsT

    - -
    -
    - - - - -
    using tag::SubgraphAssocsT = typedef std::unordered_map<ade::iTensor*,SubgraphsT>
    -
    - -
    -
    - -

    ◆ SubgraphsT

    - -
    -
    - - - - -
    using tag::SubgraphsT = typedef std::unordered_set<SgraphptrT>
    -
    - -
    -
    - -

    ◆ TagptrT

    - -
    -
    - - - - -
    using tag::TagptrT = typedef std::unique_ptr<iTag>
    -
    - -
    -
    - -

    ◆ TagRepsT

    - -
    -
    - - - - -
    using tag::TagRepsT = typedef std::map<std::string,std::vector<std::string> >
    -
    - -
    -
    - -

    ◆ TensSetT

    - -
    -
    - - - - -
    using tag::TensSetT = typedef std::unordered_set<TensKey,TensKeyHash>
    -
    - -
    -
    -

    Function Documentation

    - -

    ◆ adjacencies()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void tag::adjacencies (AdjMapTout,
    ade::TensT roots,
    GroupRegistryregistry = get_group_reg() 
    )
    -
    - -
    -
    - -

    ◆ beautify_groups()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void tag::beautify_groups (SubgraphAssocsTout,
    const AdjMapTadjs 
    )
    -
    - -
    -
    - -

    ◆ filter_head()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void tag::filter_head (SubgraphAssocsTout,
    const SubgraphAssocsTassocs 
    )
    -
    - -
    -
    - -

    ◆ get_group_reg()

    - -
    -
    - - - - - - - - -
    GroupRegistry& tag::get_group_reg (void )
    -
    - -
    -
    - -

    ◆ get_property_reg()

    - -
    -
    - - - - - - - - -
    PropertyRegistry& tag::get_property_reg (void )
    -
    - -
    -
    - -

    ◆ get_reg()

    - -
    -
    - - - - - - - - -
    TagRegistry& tag::get_reg (void )
    -
    - -
    -
    - -

    ◆ operator==()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool tag::operator== (const TensKeylhs,
    const TensKeyrhs 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ recursive_group_tag()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void tag::recursive_group_tag (ade::TensrefT tens,
    std::string group,
    std::unordered_set< ade::iTensor *> stops,
    GroupRegistryregistry = get_group_reg() 
    )
    -
    - -
    -
    -

    Variable Documentation

    - -

    ◆ commutative_tag

    - -
    -
    - - - - -
    const std::string tag::commutative_tag = "commutative"
    -
    - -
    -
    - -

    ◆ groups_key

    - -
    -
    - - - - -
    const std::string tag::groups_key = "groups"
    -
    - -
    -
    - -

    ◆ immutable_tag

    - -
    -
    - - - - -
    const std::string tag::immutable_tag = "immutable"
    -
    - -
    -
    - -

    ◆ props_key

    - -
    -
    - - - - -
    const std::string tag::props_key = "properties"
    -
    - -
    -
    -
    - - - - diff --git a/docs/namespacetemplate.html b/docs/namespacetemplate.html deleted file mode 100644 index 2e645abca..000000000 --- a/docs/namespacetemplate.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Tenncor: template Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    template Namespace Reference
    -
    -
    - - - - -

    -Functions

    def build_template (template, funcs, args)
     
    -

    Function Documentation

    - -

    ◆ build_template()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def template.build_template ( template,
     funcs,
     args 
    )
    -
    - -
    -
    -
    - - - - diff --git a/docs/nav_f.png b/docs/nav_f.png deleted file mode 100644 index 72a58a529..000000000 Binary files a/docs/nav_f.png and /dev/null differ diff --git a/docs/nav_g.png b/docs/nav_g.png deleted file mode 100644 index 2093a237a..000000000 Binary files a/docs/nav_g.png and /dev/null differ diff --git a/docs/nav_h.png b/docs/nav_h.png deleted file mode 100644 index 33389b101..000000000 Binary files a/docs/nav_h.png and /dev/null differ diff --git a/docs/opcodes_8py.html b/docs/opcodes_8py.html deleted file mode 100644 index 5a53171af..000000000 --- a/docs/opcodes_8py.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins/opcodes.py File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opcodes.py File Reference
    -
    -
    - - - - -

    -Classes

    class  opcodes.OpcodesPlugin
     
    - - - -

    -Namespaces

     opcodes
     
    - - - - - - - - - - - -

    -Functions

    def opcodes._handle_opcodes (params, opcalls)
     
    def opcodes._handle_params (params, opcalls)
     
    def opcodes._handle_ops (params, opcalls)
     
    def opcodes._handle_code2names (params, opcalls)
     
    def opcodes._handle_name2codes (params, opcalls)
     
    - - - - - - - -

    -Variables

    string opcodes._header_template
     
    string opcodes._source_template
     
    string opcodes._plugin_id = "OPCODE"
     
    -
    - - - - diff --git a/docs/open.png b/docs/open.png deleted file mode 100644 index 30f75c7ef..000000000 Binary files a/docs/open.png and /dev/null differ diff --git a/docs/operator_8hpp.html b/docs/operator_8hpp.html deleted file mode 100644 index 9ea2ff648..000000000 --- a/docs/operator_8hpp.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - -Tenncor: ead/operator.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    operator.hpp File Reference
    -
    -
    -
    #include "ead/eigen.hpp"
    -#include "ead/coord.hpp"
    -#include "ead/random.hpp"
    -
    -Include dependency graph for operator.hpp:
    -
    -
    - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    struct  ead::OpArg< T >
     
    - - - - - -

    -Namespaces

     ead
     
     ead::internal
     
    - - - - - -

    -Macros

    #define _EAD_INTERNAL_V2A_CASE(N, PROCESS, RED)
     
    #define _EAD_INTERNAL_V2A(PROCESS, RED)
     
    - - - - -

    -Typedefs

    template<typename OP , size_t N, typename T >
    using ead::ReduceOutT = Eigen::TensorReductionOp< OP, const std::array< ade::RankT, N >, const TensMapT< T > >
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    static bool ead::is_2d (ade::Shape shape)
     
    template<size_t N>
    std::array< ade::RankT, N > ead::internal::dim_copy (std::vector< ade::RankT > d)
     
    template<typename T >
    EigenptrT< T > ead::reduce_sum (ade::Shape &outshape, const OpArg< T > &in) template< typename T > EigenptrT< T > reduce_prod(ade
     
    template<typename T >
    EigenptrT< T > ead::permute (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::slice (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::pad (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::abs (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::neg (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::sin (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::cos (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::tan (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::exp (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::log (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::sqrt (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::round (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::sigmoid (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::sigmoid_grad (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::tanh (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::square (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::cube (ade::Shape &outshape, const OpArg< T > &in)
     
    template<typename T >
    EigenptrT< T > ead::pow (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::add (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::sub (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::mul (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::div (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::eq (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::neq (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::lt (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::gt (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::min (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::max (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::rand_uniform (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::select (ade::Shape &outshape, const OpArg< T > &condition, const OpArg< T > &then, const OpArg< T > &otherwise)
     
    template<typename T >
    EigenptrT< T > ead::matmul (ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
     
    template<typename T >
    EigenptrT< T > ead::convolution (ade::Shape &outshape, const OpArg< T > &input, const OpArg< T > &kernel)
     
    template<typename T >
    EigenptrT< T > ead::convolution_image_grad (ade::Shape &imageshape, const OpArg< T > &kernel, const OpArg< T > &super_composite)
     
    template<typename T >
    EigenptrT< T > ead::convolution_kernel_grad (ade::Shape &kernelshape, const OpArg< T > &image, const OpArg< T > &super_composite)
     
    -

    Macro Definition Documentation

    - -

    ◆ _EAD_INTERNAL_V2A

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    #define _EAD_INTERNAL_V2A( PROCESS,
     RED 
    )
    -
    -Value:
    {\
    assert(nullptr != in.coorder_);\
    ade::CoordT coord;\
    in.coorder_->forward(coord.begin(), coord.begin());\
    std::vector<ade::RankT> vdims;\
    std::copy_if(coord.begin(), coord.end(), std::back_inserter(vdims),\
    [](ade::RankT d) { return d < ade::rank_cap; });\
    switch (vdims.size()) {\
    _EAD_INTERNAL_V2A_CASE(0, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(1, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(2, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(3, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(4, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(5, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(6, PROCESS, RED)\
    _EAD_INTERNAL_V2A_CASE(7, PROCESS, RED)\
    default: break;\
    } return make_eigentensor<T,ReduceOutT<RED,8,T>,TensMapT<T>>(\
    shape_convert(outshape), [vdims](TensMapT<T>& in) {\
    return in.PROCESS(ead::internal::dim_copy<8>(vdims));\
    }, make_tensmap(in.data_, in.shape_));\
    }
    TensMapT< T > make_tensmap(T *data, const ade::Shape &shape)
    Definition: eigen.hpp:164
    -
    uint8_t RankT
    Type used for shape rank.
    Definition: shape.hpp:23
    -
    std::array< CDimT, rank_cap > CoordT
    Definition: shape.hpp:54
    -
    const RankT rank_cap
    Number of dimsensions in a shape/coordinate.
    Definition: shape.hpp:45
    -
    -
    -
    - -

    ◆ _EAD_INTERNAL_V2A_CASE

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    #define _EAD_INTERNAL_V2A_CASE( N,
     PROCESS,
     RED 
    )
    -
    -Value:
    case N: return make_eigentensor<T,ReduceOutT<RED,N,T>,TensMapT<T>>(\
    shape_convert(outshape), [vdims](TensMapT<T>& in) {\
    return in.PROCESS(ead::internal::dim_copy<N>(vdims)); },\
    make_tensmap(in.data_, in.shape_));
    -
    -
    -
    - - - - diff --git a/docs/operator_8hpp__dep__incl.map b/docs/operator_8hpp__dep__incl.map deleted file mode 100644 index e389b1fb6..000000000 --- a/docs/operator_8hpp__dep__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/operator_8hpp__dep__incl.md5 b/docs/operator_8hpp__dep__incl.md5 deleted file mode 100644 index e0b0f0742..000000000 --- a/docs/operator_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e377495d55983eb629e5ca721e3dcfad \ No newline at end of file diff --git a/docs/operator_8hpp__dep__incl.png b/docs/operator_8hpp__dep__incl.png deleted file mode 100644 index aa29ad4a3..000000000 Binary files a/docs/operator_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/operator_8hpp__incl.map b/docs/operator_8hpp__incl.map deleted file mode 100644 index 5628888ce..000000000 --- a/docs/operator_8hpp__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/operator_8hpp__incl.md5 b/docs/operator_8hpp__incl.md5 deleted file mode 100644 index 8031eb747..000000000 --- a/docs/operator_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -fb4c96c8a52b55784058fd1f77853307 \ No newline at end of file diff --git a/docs/operator_8hpp__incl.png b/docs/operator_8hpp__incl.png deleted file mode 100644 index 5dceabad2..000000000 Binary files a/docs/operator_8hpp__incl.png and /dev/null differ diff --git a/docs/operator_8hpp_source.html b/docs/operator_8hpp_source.html deleted file mode 100644 index 21fc3a76a..000000000 --- a/docs/operator_8hpp_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Tenncor: ead/operator.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    operator.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    10 #include "ead/eigen.hpp"
    11 #include "ead/coord.hpp"
    12 #include "ead/random.hpp"
    13 
    14 #ifndef EAD_OPERATOR_HPP
    15 #define EAD_OPERATOR_HPP
    16 
    17 namespace ead
    18 {
    19 
    20 static inline bool is_2d (ade::Shape shape)
    21 {
    22  return std::all_of(shape.begin() + 2, shape.end(),
    23  [](ade::DimT dim) { return 1 == dim; });
    24 }
    25 
    26 template <typename T>
    27 struct OpArg final
    28 {
    29  OpArg (T* data, ade::Shape shape, CoordMap* coorder) :
    30  data_(data), shape_(shape), coorder_(coorder) {}
    31 
    32  T* data_;
    33 
    35 
    36  CoordMap* coorder_ = nullptr;
    37 };
    38 
    39 template <typename OP, size_t N, typename T>
    40 using ReduceOutT = Eigen::TensorReductionOp<OP,
    41  const std::array<ade::RankT,N>,const TensMapT<T>>;
    42 
    43 namespace internal
    44 {
    45 
    46 template <size_t N>
    47 inline std::array<ade::RankT,N> dim_copy (std::vector<ade::RankT> d)
    48 {
    49  std::array<ade::RankT,N> out;
    50  auto it = d.begin();
    51  std::copy(it, it + N, out.begin());
    52  return out;
    53 }
    54 
    55 #define _EAD_INTERNAL_V2A_CASE(N, PROCESS, RED)\
    56 case N: return make_eigentensor<T,ReduceOutT<RED,N,T>,TensMapT<T>>(\
    57 shape_convert(outshape), [vdims](TensMapT<T>& in) {\
    58 return in.PROCESS(ead::internal::dim_copy<N>(vdims)); },\
    59 make_tensmap(in.data_, in.shape_));
    60 
    61 #define _EAD_INTERNAL_V2A(PROCESS, RED) {\
    62  assert(nullptr != in.coorder_);\
    63  ade::CoordT coord;\
    64  in.coorder_->forward(coord.begin(), coord.begin());\
    65  std::vector<ade::RankT> vdims;\
    66  std::copy_if(coord.begin(), coord.end(), std::back_inserter(vdims),\
    67  [](ade::RankT d) { return d < ade::rank_cap; });\
    68  switch (vdims.size()) {\
    69  _EAD_INTERNAL_V2A_CASE(0, PROCESS, RED)\
    70  _EAD_INTERNAL_V2A_CASE(1, PROCESS, RED)\
    71  _EAD_INTERNAL_V2A_CASE(2, PROCESS, RED)\
    72  _EAD_INTERNAL_V2A_CASE(3, PROCESS, RED)\
    73  _EAD_INTERNAL_V2A_CASE(4, PROCESS, RED)\
    74  _EAD_INTERNAL_V2A_CASE(5, PROCESS, RED)\
    75  _EAD_INTERNAL_V2A_CASE(6, PROCESS, RED)\
    76  _EAD_INTERNAL_V2A_CASE(7, PROCESS, RED)\
    77  default: break;\
    78  } return make_eigentensor<T,ReduceOutT<RED,8,T>,TensMapT<T>>(\
    79  shape_convert(outshape), [vdims](TensMapT<T>& in) {\
    80  return in.PROCESS(ead::internal::dim_copy<8>(vdims));\
    81  }, make_tensmap(in.data_, in.shape_));\
    82 }
    83 
    84 }
    85 
    86 template <typename T>
    88 _EAD_INTERNAL_V2A(sum, Eigen::internal::SumReducer<T>)
    89 
    90 template <typename T>
    91 EigenptrT<T> reduce_prod (ade::Shape& outshape, const OpArg<T>& in)
    92 _EAD_INTERNAL_V2A(prod, Eigen::internal::ProdReducer<T>)
    93 
    94 template <typename T>
    95 EigenptrT<T> reduce_min (ade::Shape& outshape, const OpArg<T>& in)
    96 _EAD_INTERNAL_V2A(minimum, Eigen::internal::MinReducer<T>)
    97 
    98 template <typename T>
    99 EigenptrT<T> reduce_max (ade::Shape& outshape, const OpArg<T>& in)
    100 _EAD_INTERNAL_V2A(maximum, Eigen::internal::MaxReducer<T>)
    101 
    102 template <typename T>
    103 EigenptrT<T> extend (ade::Shape& outshape, const OpArg<T>& in)
    104 {
    105  assert(nullptr != in.coorder_);
    106  ade::CoordT coord;
    107  in.coorder_->forward(coord.begin(), coord.begin());
    108  return make_eigentensor<T,Eigen::TensorBroadcastingOp<
    109  const ade::CoordT,const TensMapT<T>>,TensMapT<T>>(
    110  shape_convert(outshape),
    111  [coord](TensMapT<T>& in)
    112  {
    113  return in.broadcast(coord);
    114  }, make_tensmap(in.data_, in.shape_));
    115 }
    116 
    117 template <typename T>
    118 EigenptrT<T> permute (ade::Shape& outshape, const OpArg<T>& in)
    119 {
    120  assert(nullptr != in.coorder_);
    121  ade::CoordT reorder;
    122  in.coorder_->forward(reorder.begin(), reorder.begin());
    123  return make_eigentensor<T,Eigen::TensorShufflingOp<
    125  shape_convert(outshape),
    126  [reorder](TensMapT<T>& in)
    127  {
    128  return in.shuffle(reorder);
    129  }, make_tensmap(in.data_, in.shape_));
    130 }
    131 
    132 template <typename T>
    133 EigenptrT<T> slice (ade::Shape& outshape, const OpArg<T>& in)
    134 {
    135  assert(nullptr != in.coorder_);
    136  ade::CoordT slicing;
    137  in.coorder_->forward(slicing.begin(), slicing.begin());
    138  ade::ShapeT offset;
    139  ade::ShapeT extent;
    140  std::fill(offset.begin(), offset.end(), 0);
    141  std::copy(in.shape_.begin(), in.shape_.end(), extent.begin());
    142  ade::RankT dimension = slicing[2];
    143  offset[dimension] = slicing[0];
    144  extent[dimension] = slicing[1];
    145  return make_eigentensor<T,Eigen::TensorSlicingOp<
    146  const ade::ShapeT, const ade::ShapeT,
    148  >,
    149  TensMapT<T>>(
    150  shape_convert(outshape),
    151  [&offset, &extent](TensMapT<T>& in)
    152  {
    153  return in.slice(offset, extent);
    154  }, make_tensmap(in.data_, in.shape_));
    155 }
    156 
    157 template <typename T>
    158 EigenptrT<T> pad (ade::Shape& outshape, const OpArg<T>& in)
    159 {
    160  assert(nullptr != in.coorder_);
    161  ade::CoordT padding;
    162  in.coorder_->forward(padding.begin(), padding.begin());
    163  std::array<std::pair<ade::DimT,ade::DimT>,ade::rank_cap> paddings;
    164  for (ade::RankT i = 0; i < ade::rank_cap; ++i)
    165  {
    166  paddings[i] = std::make_pair(0, 0);
    167  }
    168  paddings[padding[2]] = std::make_pair(padding[0], padding[1]);
    169  return make_eigentensor<T,Eigen::TensorPaddingOp<
    170  const std::array<std::pair<ade::DimT,ade::DimT>,ade::rank_cap>,
    171  const ead::TensMapT<T>
    172  >,
    173  TensMapT<T>>(
    174  shape_convert(outshape),
    175  [&paddings](TensMapT<T>& in)
    176  {
    177  return in.pad(paddings);
    178  }, make_tensmap(in.data_, in.shape_));
    179 }
    180 
    183 template <typename T>
    184 EigenptrT<T> abs (ade::Shape& outshape, const OpArg<T>& in)
    185 {
    186  if (is_2d(outshape))
    187  {
    188  // use matrix when possible
    189  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    190  Eigen::internal::scalar_abs_op<T>,const MatMapT<T>>,
    191  MatMapT<T>>(shape_convert(outshape),
    192  [](MatMapT<T>& in)
    193  {
    194  return in.cwiseAbs();
    195  }, make_matmap(in.data_, in.shape_));
    196  }
    197  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    198  Eigen::internal::scalar_abs_op<T>,const TensMapT<T>>,
    199  TensMapT<T>>(shape_convert(outshape),
    200  [](TensMapT<T>& in)
    201  {
    202  return in.abs();
    203  }, make_tensmap(in.data_, in.shape_));
    204 }
    205 
    208 template <typename T>
    209 EigenptrT<T> neg (ade::Shape& outshape, const OpArg<T>& in)
    210 {
    211  if (is_2d(outshape))
    212  {
    213  // use matrix when possible
    214  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    215  Eigen::internal::scalar_opposite_op<T>,const MatMapT<T>>,
    216  MatMapT<T>>(shape_convert(outshape),
    217  [](MatMapT<T>& in)
    218  {
    219  return -in;
    220  }, make_matmap(in.data_, in.shape_));
    221  }
    222  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    223  Eigen::internal::scalar_opposite_op<T>,const TensMapT<T>>,
    224  TensMapT<T>>(shape_convert(outshape),
    225  [](TensMapT<T>& in)
    226  {
    227  return -in;
    228  }, make_tensmap(in.data_, in.shape_));
    229 }
    230 
    233 template <typename T>
    234 EigenptrT<T> sin (ade::Shape& outshape, const OpArg<T>& in)
    235 {
    236 #ifdef __cpp_if_constexpr
    237  if constexpr(!std::is_integral<T>::value)
    238  {
    239  if (is_2d(outshape))
    240  {
    241  // use matrix when possible
    242  return make_eigenmatrix<T,
    243  typename Eigen::ArrayWrapper<MatMapT<T>>::SinReturnType,
    244  MatMapT<T>>(shape_convert(outshape),
    245  [](MatMapT<T>& in)
    246  {
    247  return in.array().sin();
    248  }, make_matmap(in.data_, in.shape_));
    249  }
    250  }
    251 #endif
    252  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    253  std::function<T(const T&)>,const TensMapT<T>>,
    254  TensMapT<T>>(shape_convert(outshape),
    255  [](TensMapT<T>& in)
    256  {
    257  return in.unaryExpr(std::function<T(const T&)>(
    258  [](const T& a) -> T
    259  {
    260  return std::sin(a);
    261  }));
    262  }, make_tensmap(in.data_, in.shape_));
    263 }
    264 
    267 template <typename T>
    268 EigenptrT<T> cos (ade::Shape& outshape, const OpArg<T>& in)
    269 {
    270 #ifdef __cpp_if_constexpr
    271  if constexpr(!std::is_integral<T>::value)
    272  {
    273  if (is_2d(outshape))
    274  {
    275  // use matrix when possible
    276  return make_eigenmatrix<T,
    277  typename Eigen::ArrayWrapper<MatMapT<T>>::CosReturnType,
    278  MatMapT<T>>(shape_convert(outshape),
    279  [](MatMapT<T>& in)
    280  {
    281  return in.array().cos();
    282  }, make_matmap(in.data_, in.shape_));
    283  }
    284  }
    285 #endif
    286  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    287  std::function<T(const T&)>,const TensMapT<T>>,
    288  TensMapT<T>>(shape_convert(outshape),
    289  [](TensMapT<T>& in)
    290  {
    291  return in.unaryExpr(std::function<T(const T&)>(
    292  [](const T& a) -> T
    293  {
    294  return std::cos(a);
    295  }));
    296  }, make_tensmap(in.data_, in.shape_));
    297 }
    298 
    301 template <typename T>
    302 EigenptrT<T> tan (ade::Shape& outshape, const OpArg<T>& in)
    303 {
    304  if (is_2d(outshape))
    305  {
    306  // use matrix when possible
    307  return make_eigenmatrix<T,
    308  typename Eigen::ArrayWrapper<MatMapT<T>>::TanReturnType,
    309  MatMapT<T>>(shape_convert(outshape),
    310  [](MatMapT<T>& in)
    311  {
    312  return in.array().tan();
    313  }, make_matmap(in.data_, in.shape_));
    314  }
    315  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    316  std::function<T(const T&)>,const TensMapT<T>>,
    317  TensMapT<T>>(shape_convert(outshape),
    318  [](TensMapT<T>& in)
    319  {
    320  return in.unaryExpr(std::function<T(const T&)>(
    321  [](const T& a) -> T
    322  {
    323  return std::tan(a);
    324  }));
    325  }, make_tensmap(in.data_, in.shape_));
    326 }
    327 
    330 template <typename T>
    331 EigenptrT<T> exp (ade::Shape& outshape, const OpArg<T>& in)
    332 {
    333  if (is_2d(outshape))
    334  {
    335  // use matrix when possible
    336  return make_eigenmatrix<T,
    337  typename Eigen::ArrayWrapper<MatMapT<T>>::ExpReturnType,
    338  MatMapT<T>>(shape_convert(outshape),
    339  [](MatMapT<T>& in)
    340  {
    341  return in.array().exp();
    342  }, make_matmap(in.data_, in.shape_));
    343  }
    344  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    345  Eigen::internal::scalar_exp_op<T>,const TensMapT<T>>,
    346  TensMapT<T>>(shape_convert(outshape),
    347  [](TensMapT<T>& in)
    348  {
    349  return in.exp();
    350  }, make_tensmap(in.data_, in.shape_));
    351 }
    352 
    355 template <typename T>
    356 EigenptrT<T> log (ade::Shape& outshape, const OpArg<T>& in)
    357 {
    358  if (is_2d(outshape))
    359  {
    360  // use matrix when possible
    361  return make_eigenmatrix<T,
    362  typename Eigen::ArrayWrapper<MatMapT<T>>::LogReturnType,
    363  MatMapT<T>>(shape_convert(outshape),
    364  [](MatMapT<T>& in)
    365  {
    366  return in.array().log();
    367  }, make_matmap(in.data_, in.shape_));
    368  }
    369  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    370  Eigen::internal::scalar_log_op<T>,const TensMapT<T>>,
    371  TensMapT<T>>(shape_convert(outshape),
    372  [](TensMapT<T>& in)
    373  {
    374  return in.log();
    375  }, make_tensmap(in.data_, in.shape_));
    376 }
    377 
    380 template <typename T>
    381 EigenptrT<T> sqrt (ade::Shape& outshape, const OpArg<T>& in)
    382 {
    383  if (is_2d(outshape))
    384  {
    385  // use matrix when possible
    386  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    387  Eigen::internal::scalar_sqrt_op<T>,const MatMapT<T>>,
    388  MatMapT<T>>(shape_convert(outshape),
    389  [](MatMapT<T>& in)
    390  {
    391  return in.cwiseSqrt();
    392  }, make_matmap(in.data_, in.shape_));
    393  }
    394  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    395  Eigen::internal::scalar_sqrt_op<T>,const TensMapT<T>>,
    396  TensMapT<T>>(shape_convert(outshape),
    397  [](TensMapT<T>& in)
    398  {
    399  return in.sqrt();
    400  }, make_tensmap(in.data_, in.shape_));
    401 }
    402 
    405 template <typename T>
    406 EigenptrT<T> round (ade::Shape& outshape, const OpArg<T>& in)
    407 {
    408  if (is_2d(outshape))
    409  {
    410  // use matrix when possible
    411  return make_eigenmatrix<T,
    412  typename Eigen::ArrayWrapper<MatMapT<T>>::RoundReturnType,
    413  MatMapT<T>>(shape_convert(outshape),
    414  [](MatMapT<T>& in)
    415  {
    416  return in.array().round();
    417  }, make_matmap(in.data_, in.shape_));
    418  }
    419  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    420  Eigen::internal::scalar_round_op<T>,const TensMapT<T>>,
    421  TensMapT<T>>(shape_convert(outshape),
    422  [](TensMapT<T>& in)
    423  {
    424  return in.round();
    425  }, make_tensmap(in.data_, in.shape_));
    426 }
    427 
    428 template <typename T>
    429 EigenptrT<T> sigmoid (ade::Shape& outshape, const OpArg<T>& in)
    430 {
    431  if (is_2d(outshape))
    432  {
    433  // use matrix when possible
    434  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    435  Eigen::internal::scalar_sigmoid_op<T>,const MatMapT<T>>,
    436  MatMapT<T>>(shape_convert(outshape),
    437  [](MatMapT<T>& in)
    438  {
    439  return in.unaryExpr(Eigen::internal::scalar_sigmoid_op<T>());
    440  }, make_matmap(in.data_, in.shape_));
    441  }
    442  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    443  Eigen::internal::scalar_sigmoid_op<T>,const TensMapT<T>>,
    444  TensMapT<T>>(shape_convert(outshape),
    445  [](TensMapT<T>& in)
    446  {
    447  return in.sigmoid();
    448  }, make_tensmap(in.data_, in.shape_));
    449 }
    450 
    451 template <typename T>
    453 {
    454  if (is_2d(outshape))
    455  {
    456  // use matrix when possible
    457  return make_eigenmatrix<T,
    458  Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<T>,
    459  const Eigen::CwiseUnaryOp<Eigen::internal::scalar_sigmoid_op<T>,
    460  const MatMapT<T>>,
    461  const Eigen::CwiseUnaryOp<Eigen::internal::bind1st_op<
    462  Eigen::internal::scalar_difference_op<T>>,
    463  const Eigen::CwiseUnaryOp<Eigen::internal::scalar_sigmoid_op<T>,
    464  const MatMapT<T>>>>,
    465  MatMapT<T>>(shape_convert(outshape),
    466  [](MatMapT<T>& in)
    467  {
    468  auto out = in.unaryExpr(Eigen::internal::scalar_sigmoid_op<T>());
    469  return out.cwiseProduct(out.unaryExpr(
    470  Eigen::internal::bind1st_op<Eigen::internal::scalar_difference_op<T>>(1)));
    471  }, make_matmap(in.data_, in.shape_));
    472  }
    473  return make_eigentensor<T,
    474  Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_product_op<T>,
    475  const Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_sigmoid_op<T>,
    476  const TensMapT<T>>,
    477  const Eigen::TensorCwiseUnaryOp<Eigen::internal::bind1st_op<
    478  Eigen::internal::scalar_difference_op<T>>,
    479  const Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_sigmoid_op<T>,
    480  const TensMapT<T>>>>,
    481  TensMapT<T>>(shape_convert(outshape),
    482  [](TensMapT<T>& in)
    483  {
    484  auto out = in.sigmoid();
    485  return out * (1 - out);
    486  }, make_tensmap(in.data_, in.shape_));
    487 }
    488 
    489 template <typename T>
    490 EigenptrT<T> tanh (ade::Shape& outshape, const OpArg<T>& in)
    491 {
    492  if (is_2d(outshape))
    493  {
    494  // use matrix when possible
    495  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    496  Eigen::internal::scalar_tanh_op<T>,const MatMapT<T>>,
    497  MatMapT<T>>(shape_convert(outshape),
    498  [](MatMapT<T>& in)
    499  {
    500  return in.unaryExpr(Eigen::internal::scalar_tanh_op<T>());
    501  }, make_matmap(in.data_, in.shape_));
    502  }
    503  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    504  Eigen::internal::scalar_tanh_op<T>,const TensMapT<T>>,
    505  TensMapT<T>>(shape_convert(outshape),
    506  [](TensMapT<T>& in)
    507  {
    508  return in.tanh();
    509  }, make_tensmap(in.data_, in.shape_));
    510 }
    511 
    512 template <typename T>
    513 EigenptrT<T> square (ade::Shape& outshape, const OpArg<T>& in)
    514 {
    515  if (is_2d(outshape))
    516  {
    517  // use matrix when possible
    518  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    519  Eigen::internal::scalar_square_op<T>,const MatMapT<T>>,
    520  MatMapT<T>>(shape_convert(outshape),
    521  [](MatMapT<T>& in)
    522  {
    523  return in.unaryExpr(Eigen::internal::scalar_square_op<T>());
    524  }, make_matmap(in.data_, in.shape_));
    525  }
    526  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    527  Eigen::internal::scalar_square_op<T>,const TensMapT<T>>,
    528  TensMapT<T>>(shape_convert(outshape),
    529  [](TensMapT<T>& in)
    530  {
    531  return in.square();
    532  }, make_tensmap(in.data_, in.shape_));
    533 }
    534 
    535 template <typename T>
    536 EigenptrT<T> cube (ade::Shape& outshape, const OpArg<T>& in)
    537 {
    538  if (is_2d(outshape))
    539  {
    540  // use matrix when possible
    541  return make_eigenmatrix<T,Eigen::CwiseUnaryOp<
    542  Eigen::internal::scalar_cube_op<T>,const MatMapT<T>>,
    543  MatMapT<T>>(shape_convert(outshape),
    544  [](MatMapT<T>& in)
    545  {
    546  return in.unaryExpr(Eigen::internal::scalar_cube_op<T>());
    547  }, make_matmap(in.data_, in.shape_));
    548  }
    549  return make_eigentensor<T,Eigen::TensorCwiseUnaryOp<
    550  Eigen::internal::scalar_cube_op<T>,const TensMapT<T>>,
    551  TensMapT<T>>(shape_convert(outshape),
    552  [](TensMapT<T>& in)
    553  {
    554  return in.cube();
    555  }, make_tensmap(in.data_, in.shape_));
    556 }
    557 
    561 template <typename T>
    562 EigenptrT<T> pow (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    563 {
    564  if (is_2d(outshape))
    565  {
    566  // use matrix when possible
    567  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    568  std::function<T(const T&,const T&)>,
    569  const MatMapT<T>,const MatMapT<T>>,
    570  std::vector<MatMapT<T>>>(shape_convert(outshape),
    571  [](std::vector<MatMapT<T>>& args)
    572  {
    573  return args[0].binaryExpr(args[1],
    574  std::function<T(const T&,const T&)>(
    575  [](const T& a, const T& b) -> T
    576  {
    577  return std::pow(a, b);
    578  }));
    579  }, {
    580  make_matmap(a.data_, a.shape_),
    581  make_matmap(b.data_, b.shape_)});
    582  }
    583  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    584  std::function<T(const T&,const T&)>,
    585  const TensMapT<T>,const TensMapT<T>>,
    586  std::vector<TensMapT<T>>>(shape_convert(outshape),
    587  [](std::vector<TensMapT<T>>& args)
    588  {
    589  return args[0].binaryExpr(args[1],
    590  std::function<T(const T&,const T&)>(
    591  [](const T& a, const T& b) -> T
    592  {
    593  return std::pow(a, b);
    594  }));
    595  }, {
    596  make_tensmap(a.data_, a.shape_),
    597  make_tensmap(b.data_, b.shape_)});
    598 }
    599 
    600 template <typename T>
    601 EigenptrT<T> add (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    602 {
    603  if (is_2d(outshape))
    604  {
    605  // use matrix when possible
    606  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    607  Eigen::internal::scalar_sum_op<T>,
    608  const MatMapT<T>,const MatMapT<T>>,
    609  std::vector<MatMapT<T>>>(shape_convert(outshape),
    610  [](std::vector<MatMapT<T>>& args)
    611  {
    612  return args[0] + args[1];
    613  }, {
    614  make_matmap(a.data_, a.shape_),
    615  make_matmap(b.data_, b.shape_)});
    616  }
    617  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    618  Eigen::internal::scalar_sum_op<T>,
    619  const TensMapT<T>,const TensMapT<T>>,
    620  std::vector<TensMapT<T>>>(shape_convert(outshape),
    621  [](std::vector<TensMapT<T>>& args)
    622  {
    623  return args[0] + args[1];
    624  }, {
    625  make_tensmap(a.data_, a.shape_),
    626  make_tensmap(b.data_, b.shape_)});
    627 }
    628 
    632 template <typename T>
    633 EigenptrT<T> sub (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    634 {
    635  if (is_2d(outshape))
    636  {
    637  // use matrix when possible
    638  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    639  Eigen::internal::scalar_difference_op<T>,
    640  const MatMapT<T>,const MatMapT<T>>,
    641  std::vector<MatMapT<T>>>(shape_convert(outshape),
    642  [](std::vector<MatMapT<T>>& args)
    643  {
    644  return args[0] - args[1];
    645  }, {
    646  make_matmap(a.data_, a.shape_),
    647  make_matmap(b.data_, b.shape_)});
    648  }
    649  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    650  Eigen::internal::scalar_difference_op<T>,
    651  const TensMapT<T>,const TensMapT<T>>,
    652  std::vector<TensMapT<T>>>(shape_convert(outshape),
    653  [](std::vector<TensMapT<T>>& args)
    654  {
    655  return args[0] - args[1];
    656  }, {
    657  make_tensmap(a.data_, a.shape_),
    658  make_tensmap(b.data_, b.shape_)});
    659 }
    660 
    661 template <typename T>
    662 EigenptrT<T> mul (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    663 {
    664  if (is_2d(outshape))
    665  {
    666  // use matrix when possible
    667  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    668  Eigen::internal::scalar_product_op<T>,
    669  const MatMapT<T>,const MatMapT<T>>,
    670  std::vector<MatMapT<T>>>(shape_convert(outshape),
    671  [](std::vector<MatMapT<T>>& args)
    672  {
    673  return args[0].cwiseProduct(args[1]);
    674  }, {
    675  make_matmap(a.data_, a.shape_),
    676  make_matmap(b.data_, b.shape_)});
    677  }
    678  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    679  Eigen::internal::scalar_product_op<T>,
    680  const TensMapT<T>,const TensMapT<T>>,
    681  std::vector<TensMapT<T>>>(shape_convert(outshape),
    682  [](std::vector<TensMapT<T>>& args)
    683  {
    684  return args[0] * args[1];
    685  }, {
    686  make_tensmap(a.data_, a.shape_),
    687  make_tensmap(b.data_, b.shape_)});
    688 }
    689 
    693 template <typename T>
    694 EigenptrT<T> div (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    695 {
    696  if (is_2d(outshape))
    697  {
    698  // use matrix when possible
    699  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    700  Eigen::internal::scalar_quotient_op<T>,
    701  const MatMapT<T>,const MatMapT<T>>,
    702  std::vector<MatMapT<T>>>(shape_convert(outshape),
    703  [](std::vector<MatMapT<T>>& args)
    704  {
    705  return args[0].cwiseQuotient(args[1]);
    706  }, {
    707  make_matmap(a.data_, a.shape_),
    708  make_matmap(b.data_, b.shape_)});
    709  }
    710  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    711  Eigen::internal::scalar_quotient_op<T>,
    712  const TensMapT<T>,const TensMapT<T>>,
    713  std::vector<TensMapT<T>>>(shape_convert(outshape),
    714  [](std::vector<TensMapT<T>>& args)
    715  {
    716  return args[0] / args[1];
    717  }, {
    718  make_tensmap(a.data_, a.shape_),
    719  make_tensmap(b.data_, b.shape_)});
    720 }
    721 
    725 template <typename T>
    726 EigenptrT<T> eq (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    727 {
    728  if (is_2d(outshape))
    729  {
    730  // use matrix when possible
    731  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    732  std::function<T(const T&,const T&)>,
    733  const MatMapT<T>,const MatMapT<T>>,
    734  std::vector<MatMapT<T>>>(shape_convert(outshape),
    735  [](std::vector<MatMapT<T>>& args)
    736  {
    737  return args[0].binaryExpr(args[1],
    738  std::function<T(const T&,const T&)>(
    739  [](const T& a, const T& b) -> T
    740  {
    741  return a == b;
    742  }));
    743  }, {
    744  make_matmap(a.data_, a.shape_),
    745  make_matmap(b.data_, b.shape_)});
    746  }
    747  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    748  std::function<T(const T&,const T&)>,
    749  const TensMapT<T>,const TensMapT<T>>,
    750  std::vector<TensMapT<T>>>(shape_convert(outshape),
    751  [](std::vector<TensMapT<T>>& args)
    752  {
    753  return args[0].binaryExpr(args[1],
    754  std::function<T(const T&,const T&)>(
    755  [](const T& a, const T& b) -> T
    756  {
    757  return a == b;
    758  }));
    759  }, {
    760  make_tensmap(a.data_, a.shape_),
    761  make_tensmap(b.data_, b.shape_)});
    762 }
    763 
    767 template <typename T>
    768 EigenptrT<T> neq (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    769 {
    770  if (is_2d(outshape))
    771  {
    772  // use matrix when possible
    773  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    774  std::function<T(const T&,const T&)>,
    775  const MatMapT<T>,const MatMapT<T>>,
    776  std::vector<MatMapT<T>>>(shape_convert(outshape),
    777  [](std::vector<MatMapT<T>>& args)
    778  {
    779  return args[0].binaryExpr(args[1],
    780  std::function<T(const T&,const T&)>(
    781  [](const T& a, const T& b) -> T
    782  {
    783  return a != b;
    784  }));
    785  }, {
    786  make_matmap(a.data_, a.shape_),
    787  make_matmap(b.data_, b.shape_)});
    788  }
    789  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    790  std::function<T(const T&,const T&)>,
    791  const TensMapT<T>,const TensMapT<T>>,
    792  std::vector<TensMapT<T>>>(shape_convert(outshape),
    793  [](std::vector<TensMapT<T>>& args)
    794  {
    795  return args[0].binaryExpr(args[1],
    796  std::function<T(const T&,const T&)>(
    797  [](const T& a, const T& b) -> T
    798  {
    799  return a != b;
    800  }));
    801  }, {
    802  make_tensmap(a.data_, a.shape_),
    803  make_tensmap(b.data_, b.shape_)});
    804 }
    805 
    809 template <typename T>
    810 EigenptrT<T> lt (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    811 {
    812  if (is_2d(outshape))
    813  {
    814  // use matrix when possible
    815  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    816  std::function<T(const T&,const T&)>,
    817  const MatMapT<T>,const MatMapT<T>>,
    818  std::vector<MatMapT<T>>>(shape_convert(outshape),
    819  [](std::vector<MatMapT<T>>& args)
    820  {
    821  return args[0].binaryExpr(args[1],
    822  std::function<T(const T&,const T&)>(
    823  [](const T& a, const T& b) -> T
    824  {
    825  return a < b;
    826  }));
    827  }, {
    828  make_matmap(a.data_, a.shape_),
    829  make_matmap(b.data_, b.shape_)});
    830  }
    831  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    832  std::function<T(const T&,const T&)>,
    833  const TensMapT<T>,const TensMapT<T>>,
    834  std::vector<TensMapT<T>>>(shape_convert(outshape),
    835  [](std::vector<TensMapT<T>>& args)
    836  {
    837  return args[0].binaryExpr(args[1],
    838  std::function<T(const T&,const T&)>(
    839  [](const T& a, const T& b) -> T
    840  {
    841  return a < b;
    842  }));
    843  }, {
    844  make_tensmap(a.data_, a.shape_),
    845  make_tensmap(b.data_, b.shape_)});
    846 }
    847 
    851 template <typename T>
    852 EigenptrT<T> gt (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    853 {
    854  if (is_2d(outshape))
    855  {
    856  // use matrix when possible
    857  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    858  std::function<T(const T&,const T&)>,
    859  const MatMapT<T>,const MatMapT<T>>,
    860  std::vector<MatMapT<T>>>(shape_convert(outshape),
    861  [](std::vector<MatMapT<T>>& args)
    862  {
    863  return args[0].binaryExpr(args[1],
    864  std::function<T(const T&,const T&)>(
    865  [](const T& a, const T& b) -> T
    866  {
    867  return a > b;
    868  }));
    869  }, {
    870  make_matmap(a.data_, a.shape_),
    871  make_matmap(b.data_, b.shape_)});
    872  }
    873  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    874  std::function<T(const T&,const T&)>,
    875  const TensMapT<T>,const TensMapT<T>>,
    876  std::vector<TensMapT<T>>>(shape_convert(outshape),
    877  [](std::vector<TensMapT<T>>& args)
    878  {
    879  return args[0].binaryExpr(args[1],
    880  std::function<T(const T&,const T&)>(
    881  [](const T& a, const T& b) -> T
    882  {
    883  return a > b;
    884  }));
    885  }, {
    886  make_tensmap(a.data_, a.shape_),
    887  make_tensmap(b.data_, b.shape_)});
    888 }
    889 
    892 template <typename T>
    893 EigenptrT<T> min (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    894 {
    895  if (is_2d(outshape))
    896  {
    897  // use matrix when possible
    898  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    899  Eigen::internal::scalar_min_op<T,T>,
    900  const MatMapT<T>,const MatMapT<T>>,
    901  std::vector<MatMapT<T>>>(shape_convert(outshape),
    902  [](std::vector<MatMapT<T>>& args)
    903  {
    904  return args[0].cwiseMin(args[1]);
    905  }, {
    906  make_matmap(a.data_, a.shape_),
    907  make_matmap(b.data_, b.shape_)});
    908  }
    909  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    910  Eigen::internal::scalar_min_op<T>,
    911  const TensMapT<T>,const TensMapT<T>>,
    912  std::vector<TensMapT<T>>>(shape_convert(outshape),
    913  [](std::vector<TensMapT<T>>& args)
    914  {
    915  return args[0].cwiseMin(args[1]);
    916  }, {
    917  make_tensmap(a.data_, a.shape_),
    918  make_tensmap(b.data_, b.shape_)});
    919 }
    920 
    923 template <typename T>
    924 EigenptrT<T> max (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    925 {
    926  if (is_2d(outshape))
    927  {
    928  // use matrix when possible
    929  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    930  Eigen::internal::scalar_max_op<T,T>,
    931  const MatMapT<T>,const MatMapT<T>>,
    932  std::vector<MatMapT<T>>>(shape_convert(outshape),
    933  [](std::vector<MatMapT<T>>& args)
    934  {
    935  return args[0].cwiseMax(args[1]);
    936  }, {
    937  make_matmap(a.data_, a.shape_),
    938  make_matmap(b.data_, b.shape_)});
    939  }
    940  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    941  Eigen::internal::scalar_max_op<T>,
    942  const TensMapT<T>,const TensMapT<T>>,
    943  std::vector<TensMapT<T>>>(shape_convert(outshape),
    944  [](std::vector<TensMapT<T>>& args)
    945  {
    946  return args[0].cwiseMax(args[1]);
    947  }, {
    948  make_tensmap(a.data_, a.shape_),
    949  make_tensmap(b.data_, b.shape_)});
    950 }
    951 
    955 template <typename T>
    956 EigenptrT<T> rand_uniform (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    957 {
    958  if (is_2d(outshape))
    959  {
    960  // use matrix when possible
    961  return make_eigenmatrix<T,Eigen::CwiseBinaryOp<
    962  std::function<T(const T&,const T&)>,
    963  const MatMapT<T>,const MatMapT<T>>,
    964  std::vector<MatMapT<T>>>(shape_convert(outshape),
    965  [](std::vector<MatMapT<T>>& args)
    966  {
    967  return args[0].binaryExpr(args[1],
    968  std::function<T(const T&,const T&)>(unif<T>));
    969  }, {
    970  make_matmap(a.data_, a.shape_),
    971  make_matmap(b.data_, b.shape_)});
    972  }
    973  return make_eigentensor<T,Eigen::TensorCwiseBinaryOp<
    974  std::function<T(const T&,const T&)>,
    975  const TensMapT<T>,const TensMapT<T>>,
    976  std::vector<TensMapT<T>>>(shape_convert(outshape),
    977  [](std::vector<TensMapT<T>>& args)
    978  {
    979  return args[0].binaryExpr(args[1],
    980  std::function<T(const T&,const T&)>(unif<T>));
    981  }, {
    982  make_tensmap(a.data_, a.shape_),
    983  make_tensmap(b.data_, b.shape_)});
    984 }
    985 
    986 template <typename T>
    988  const OpArg<T>& condition,
    989  const OpArg<T>& then, const OpArg<T>& otherwise)
    990 {
    991  if (is_2d(outshape))
    992  {
    993  // use matrix when possible
    994  return make_eigenmatrix<T,
    995  Eigen::Select<MatMapT<T>,MatMapT<T>,MatMapT<T>>,
    996  std::vector<MatMapT<T>>>(shape_convert(outshape),
    997  [](std::vector<MatMapT<T>>& args) -> Eigen::Select<MatMapT<T>,MatMapT<T>,MatMapT<T>>
    998  {
    999  return args[0].select(args[1], args[2]);
    1000  }, {
    1001  make_matmap(condition.data_, condition.shape_),
    1002  make_matmap(then.data_, then.shape_),
    1003  make_matmap(otherwise.data_, otherwise.shape_)});
    1004  }
    1005  return make_eigentensor<T,
    1006  Eigen::TensorSelectOp<const TensMapT<T>,
    1007  const TensMapT<T>,const TensMapT<T>>,
    1008  std::vector<TensMapT<T>>>(shape_convert(outshape),
    1009  [](std::vector<TensMapT<T>>& args) -> Eigen::TensorSelectOp<const TensMapT<T>,const TensMapT<T>,const TensMapT<T>>
    1010  {
    1011  return args[0].select(args[1], args[2]);
    1012  }, {
    1013  make_tensmap(condition.data_, condition.shape_),
    1014  make_tensmap(then.data_, then.shape_),
    1015  make_tensmap(otherwise.data_, otherwise.shape_)});
    1016 }
    1017 
    1018 template <typename T>
    1019 EigenptrT<T> matmul (ade::Shape& outshape, const OpArg<T>& a, const OpArg<T>& b)
    1020 {
    1021  assert(is_2d(outshape));
    1022  return make_eigenmatrix<T,Eigen::Product<MatMapT<T>,MatMapT<T>>,
    1023  std::vector<MatMapT<T>>>(shape_convert(outshape),
    1024  [](std::vector<MatMapT<T>>& args)
    1025  {
    1026  return args[0] * args[1];
    1027  }, {
    1028  make_matmap(a.data_, a.shape_),
    1029  make_matmap(b.data_, b.shape_)});
    1030 }
    1031 
    1032 template <typename T>
    1033 EigenptrT<T> convolution (ade::Shape& outshape, const OpArg<T>& input, const OpArg<T>& kernel)
    1034 {
    1035  assert(nullptr != kernel.coorder_);
    1036  ade::CoordT kernel_dims;
    1037  kernel.coorder_->forward(kernel_dims.begin(), kernel_dims.begin());
    1038  ade::ShapeT dims;
    1039  std::copy(kernel_dims.begin(), kernel_dims.end(), dims.begin());
    1040 
    1041  return make_eigentensor<T,Eigen::TensorConvolutionOp<
    1042  const ade::ShapeT,
    1043  const TensMapT<T>,const TensMapT<T>>,
    1044  std::vector<TensMapT<T>>>(shape_convert(outshape),
    1045  [&](std::vector<TensMapT<T>>& args)
    1046  {
    1047  return args[0].convolve(args[1], dims);
    1048  }, {
    1049  make_tensmap(input.data_, input.shape_),
    1050  make_tensmap(kernel.data_, kernel.shape_)});
    1051 }
    1052 
    1053 template <typename T>
    1055  const OpArg<T>& kernel, const OpArg<T>& super_composite)
    1056 {
    1057  return make_eigentensor<T,
    1058  Eigen::TensorReductionOp<Eigen::internal::SumReducer<T>,
    1059  const ade::ShapeT,
    1060  const Eigen::TensorCwiseBinaryOp<
    1061  Eigen::internal::scalar_product_op<T,T>,
    1062  const Eigen::TensorBroadcastingOp<
    1063  const std::array<ade::DimT,ade::rank_cap+1>,
    1064  const Eigen::TensorReshapingOp<
    1065  const std::array<ade::DimT,ade::rank_cap+1>,
    1066  Eigen::TensorReverseOp<
    1067  const std::array<bool,ade::rank_cap>,
    1069  >
    1070  >
    1071  >,
    1072  const Eigen::TensorPatchOp<
    1073  const ade::ShapeT,
    1074  const Eigen::TensorPaddingOp<
    1075  const std::array<std::pair<int,int>,ade::rank_cap>,
    1076  const ead::TensMapT<T>
    1077  >
    1078  >
    1079  >
    1080  >,
    1081  std::vector<TensMapT<T>>>(shape_convert(imageshape),
    1082  [&](std::vector<TensMapT<T>>& args)
    1083  {
    1084  auto& outshape = super_composite.shape_;
    1085 
    1086  ade::ShapeT patch_dims;
    1087  std::copy(outshape.begin(), outshape.end(), patch_dims.begin());
    1088  Eigen::array<std::pair<int,int>,ade::rank_cap> paddings;
    1089  for (ade::RankT i = 0; i < ade::rank_cap; ++i)
    1090  {
    1091  int paddsize = outshape.at(i) - 1;
    1092  paddings[i] = std::make_pair(paddsize, paddsize);
    1093  }
    1094  auto patched = args[0].pad(paddings)
    1095  .extract_patches(patch_dims);
    1096 
    1097  std::array<bool,ade::rank_cap> revflags;
    1098  std::fill(revflags.begin(), revflags.end(), true);
    1099  std::array<ade::DimT,ade::rank_cap+1> pshape;
    1100  std::copy(outshape.begin(), outshape.end(), pshape.begin());
    1101  pshape[ade::rank_cap] = 1;
    1102  std::array<ade::DimT,ade::rank_cap+1> expansion;
    1103  std::fill(expansion.begin(), expansion.end(), 1);
    1104  expansion[ade::rank_cap] = imageshape.n_elems();
    1105  auto partial = args[1]
    1106  .reverse(revflags)
    1107  .reshape(pshape)
    1108  .broadcast(expansion) * patched;
    1109 
    1110  ade::ShapeT shapespace;
    1111  std::iota(shapespace.begin(), shapespace.end(), 0);
    1112  return partial.sum(shapespace);
    1113  }, {
    1114  make_tensmap(kernel.data_, kernel.shape_),
    1115  make_tensmap(super_composite.data_, super_composite.shape_)});
    1116 }
    1117 
    1118 template <typename T>
    1120  const OpArg<T>& image, const OpArg<T>& super_composite)
    1121 {
    1122  return make_eigentensor<T,
    1123  Eigen::TensorReductionOp<Eigen::internal::SumReducer<T>,
    1124  const ade::ShapeT,
    1125  const Eigen::TensorCwiseBinaryOp<
    1126  Eigen::internal::scalar_product_op<T,T>,
    1127  const Eigen::TensorBroadcastingOp<
    1128  const std::array<ade::DimT,ade::rank_cap+1>,
    1129  const Eigen::TensorReshapingOp<
    1130  const std::array<ade::DimT,ade::rank_cap+1>,
    1132  >
    1133  >,
    1134  const Eigen::TensorPatchOp<
    1135  const ade::ShapeT,
    1136  const ead::TensMapT<T>
    1137  >
    1138  >
    1139  >,
    1140  std::vector<TensMapT<T>>>(shape_convert(kernelshape),
    1141  [&](std::vector<TensMapT<T>>& args)
    1142  {
    1143  auto& outshape = super_composite.shape_;
    1144 
    1145  ade::ShapeT patch_dims;
    1146  std::copy(outshape.begin(), outshape.end(), patch_dims.begin());
    1147  auto patched = args[0].extract_patches(patch_dims);
    1148 
    1149  std::array<ade::DimT,ade::rank_cap+1> pshape;
    1150  std::copy(outshape.begin(), outshape.end(), pshape.begin());
    1151  pshape[ade::rank_cap] = 1;
    1152  std::array<ade::DimT,ade::rank_cap+1> expansion;
    1153  std::fill(expansion.begin(), expansion.end(), 1);
    1154  expansion[ade::rank_cap] = kernelshape.n_elems();
    1155  auto partial = args[1]
    1156  .reshape(pshape)
    1157  .broadcast(expansion) * patched;
    1158 
    1159  ade::ShapeT shapespace;
    1160  std::iota(shapespace.begin(), shapespace.end(), 0);
    1161  return partial.sum(shapespace);
    1162  }, {
    1163  make_tensmap(image.data_, image.shape_),
    1164  make_tensmap(super_composite.data_, super_composite.shape_)});
    1165 }
    1166 
    1167 }
    1168 
    1169 #endif // EAD_OPERATOR_HPP
    EigenptrT< T > neg(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:209
    -
    EigenptrT< T > sub(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:633
    -
    EigenptrT< T > rand_uniform(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:956
    -
    EigenptrT< T > log(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:356
    -
    EigenptrT< T > mul(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:662
    -
    EigenptrT< T > square(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:513
    -
    args
    Definition: csv_to_png.py:105
    -
    void forward(ade::CoordT::iterator out, ade::CoordT::const_iterator in) const override
    Definition: coord.hpp:19
    -
    CoordptrT extend(ade::RankT rank, std::vector< ade::DimT > ext)
    -
    EigenptrT< T > eq(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:726
    -
    Definition: coord.hpp:9
    -
    std::array< DimT, rank_cap > ShapeT
    Array type used to hold dimension info in Shape.
    Definition: shape.hpp:48
    -
    EigenptrT< T > cube(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:536
    -
    EigenptrT< T > sin(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:234
    -
    EigenptrT< T > lt(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:810
    -
    TensMapT< T > make_tensmap(T *data, const ade::Shape &shape)
    Definition: eigen.hpp:164
    -
    EigenptrT< T > make_eigentensor(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
    Definition: eigen.hpp:128
    - -
    Definition: constant.hpp:9
    -
    iterator end(void)
    Return end iterator of internal array.
    Definition: shape.hpp:160
    -
    std::array< ade::RankT, N > dim_copy(std::vector< ade::RankT > d)
    Definition: operator.hpp:47
    -
    NElemT n_elems(void) const
    Return the total number of elements represented by the shape.
    Definition: shape.hpp:116
    -
    EigenptrT< T > tan(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:302
    -
    T * data_
    Definition: operator.hpp:32
    -
    EigenptrT< T > div(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:694
    -
    EigenptrT< T > convolution(ade::Shape &outshape, const OpArg< T > &input, const OpArg< T > &kernel)
    Definition: operator.hpp:1033
    -
    uint16_t DimT
    Definition: shape.hpp:29
    -
    EigenptrT< T > reduce_sum(ade::Shape &outshape, const OpArg< T > &in) template< typename T > EigenptrT< T > reduce_prod(ade
    Definition: operator.hpp:87
    -
    Eigen::TensorMap< TensorT< T > > TensMapT
    Definition: eigen.hpp:25
    -
    EigenptrT< T > min(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:893
    -
    EigenptrT< T > convolution_kernel_grad(ade::Shape &kernelshape, const OpArg< T > &image, const OpArg< T > &super_composite)
    Definition: operator.hpp:1119
    -
    EigenptrT< T > slice(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:133
    -
    EigenptrT< T > convolution_image_grad(ade::Shape &imageshape, const OpArg< T > &kernel, const OpArg< T > &super_composite)
    Definition: operator.hpp:1054
    -
    iterator begin(void)
    Return begin iterator of internal array.
    Definition: shape.hpp:154
    -
    OpArg(T *data, ade::Shape shape, CoordMap *coorder)
    Definition: operator.hpp:29
    -
    static bool is_2d(ade::Shape shape)
    Definition: operator.hpp:20
    -
    MatMapT< T > make_matmap(T *data, const ade::Shape &shape)
    Definition: eigen.hpp:154
    -
    CoordMap * coorder_
    Definition: operator.hpp:36
    -
    std::shared_ptr< iEigen< T > > EigenptrT
    Definition: eigen.hpp:76
    -
    Definition: operator.hpp:27
    -
    EigenptrT< T > gt(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:852
    -
    EigenptrT< T > matmul(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:1019
    -
    ade::Shape shape_
    Definition: operator.hpp:34
    -
    DimensionsT shape_convert(ade::Shape shape)
    -
    EigenptrT< T > pad(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:158
    -
    EigenptrT< T > round(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:406
    -
    Eigen::TensorReductionOp< OP, const std::array< ade::RankT, N >, const TensMapT< T > > ReduceOutT
    Definition: operator.hpp:41
    -
    uint8_t RankT
    Type used for shape rank.
    Definition: shape.hpp:23
    -
    EigenptrT< T > select(ade::Shape &outshape, const OpArg< T > &condition, const OpArg< T > &then, const OpArg< T > &otherwise)
    Definition: operator.hpp:987
    -
    Definition: shape.hpp:60
    -
    EigenptrT< T > neq(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:768
    -
    EigenptrT< T > max(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:924
    -
    std::array< CDimT, rank_cap > CoordT
    Definition: shape.hpp:54
    - -
    EigenptrT< T > cos(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:268
    -
    EigenptrT< T > tanh(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:490
    - -
    EigenptrT< T > abs(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:184
    -
    EigenptrT< T > exp(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:331
    -
    CoordptrT permute(std::vector< ade::RankT > dims)
    -
    #define _EAD_INTERNAL_V2A(PROCESS, RED)
    Definition: operator.hpp:61
    -
    EigenptrT< T > sigmoid(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:429
    -
    const RankT rank_cap
    Number of dimsensions in a shape/coordinate.
    Definition: shape.hpp:45
    -
    EigenptrT< T > pow(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:562
    -
    Eigen::Map< MatrixT< T > > MatMapT
    Definition: eigen.hpp:28
    -
    EigenptrT< T > sqrt(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:381
    -
    EigenptrT< T > add(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:601
    -
    EigenptrT< T > sigmoid_grad(ade::Shape &outshape, const OpArg< T > &in)
    Definition: operator.hpp:452
    -
    EigenptrT< T > make_eigenmatrix(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
    Definition: eigen.hpp:136
    -
    - - - - diff --git a/docs/opt_2parse_8hpp.html b/docs/opt_2parse_8hpp.html deleted file mode 100644 index 73c5ba4c2..000000000 --- a/docs/opt_2parse_8hpp.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Tenncor: opt/parse.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    parse.hpp File Reference
    -
    -
    -
    #include "opt/optimize.hpp"
    -
    -Include dependency graph for parse.hpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - -

    -Classes

    struct  opt::RulesContext
     
    struct  opt::iConverterBuilder
     
    - - - -

    -Namespaces

     opt
     
    - - - - - -

    -Functions

    OptCtx opt::parse (std::string content, const iConverterBuilder &builder)
     
    OptCtx opt::parse_file (std::string filename, const iConverterBuilder &builder)
     
    -
    - - - - diff --git a/docs/opt_2parse_8hpp__dep__incl.map b/docs/opt_2parse_8hpp__dep__incl.map deleted file mode 100644 index bdc77be5e..000000000 --- a/docs/opt_2parse_8hpp__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/opt_2parse_8hpp__dep__incl.md5 b/docs/opt_2parse_8hpp__dep__incl.md5 deleted file mode 100644 index 4186c1cf7..000000000 --- a/docs/opt_2parse_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -13e3a9b842327d539b19ce0ab88a890f \ No newline at end of file diff --git a/docs/opt_2parse_8hpp__dep__incl.png b/docs/opt_2parse_8hpp__dep__incl.png deleted file mode 100644 index f24cc1ac9..000000000 Binary files a/docs/opt_2parse_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/opt_2parse_8hpp__incl.map b/docs/opt_2parse_8hpp__incl.map deleted file mode 100644 index e2d674284..000000000 --- a/docs/opt_2parse_8hpp__incl.map +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/opt_2parse_8hpp__incl.md5 b/docs/opt_2parse_8hpp__incl.md5 deleted file mode 100644 index e6ca9db21..000000000 --- a/docs/opt_2parse_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -df764d55d37279c8aec0e3ab7d0655fa \ No newline at end of file diff --git a/docs/opt_2parse_8hpp__incl.png b/docs/opt_2parse_8hpp__incl.png deleted file mode 100644 index 1b37f6b0b..000000000 Binary files a/docs/opt_2parse_8hpp__incl.png and /dev/null differ diff --git a/docs/opt_2parse_8hpp_source.html b/docs/opt_2parse_8hpp_source.html deleted file mode 100644 index b799537d1..000000000 --- a/docs/opt_2parse_8hpp_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Tenncor: opt/parse.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    parse.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "opt/optimize.hpp"
    2 
    3 #ifndef OPT_PARSE_HPP
    4 #define OPT_PARSE_HPP
    5 
    6 namespace opt
    7 {
    8 
    9 struct RulesContext final
    10 {
    11  // maps declared symbol to any id
    12  std::unordered_set<std::string> symbols_;
    13 
    14  // maps functor/group label to properties set
    15  std::unordered_map<std::string,
    16  std::unordered_set<std::string>> properties_;
    17 };
    18 
    20 {
    21  virtual ~iConverterBuilder (void) = default;
    22 
    23  // return constant converter
    24  virtual CstConvertF build_cconv (void) const = 0;
    25 
    26  virtual ConvptrT build (const ::Subgraph* sg, const RulesContext& ctx) const = 0;
    27 
    28  // extended interface to create shaper
    29  virtual ade::CoordptrT shaperize (::NumList* list) const = 0;
    30 
    31  // extended interface to create coorder
    32  virtual ade::CoordptrT coorderize (::NumList* list) const = 0;
    33 };
    34 
    35 OptCtx parse (std::string content, const iConverterBuilder& builder);
    36 
    37 OptCtx parse_file (std::string filename, const iConverterBuilder& builder);
    38 
    39 }
    40 
    41 #endif // OPT_PARSE_HPP
    std::unordered_set< std::string > symbols_
    Definition: parse.hpp:12
    -
    virtual ConvptrT build(const ::Subgraph *sg, const RulesContext &ctx) const =0
    -
    Definition: list.h:13
    -
    std::shared_ptr< iCoordMap > CoordptrT
    Type of iCoordMap smartpointer.
    Definition: coord.hpp:106
    -
    Definition: candidate.hpp:11
    -
    Definition: parse.hpp:19
    -
    virtual ade::CoordptrT coorderize(::NumList *list) const =0
    -
    std::function< ade::TensptrT(ade::iTensor *)> CstConvertF
    Definition: optimize.hpp:10
    -
    Definition: optimize.hpp:12
    -
    virtual ~iConverterBuilder(void)=default
    -
    std::shared_ptr< iConverter > ConvptrT
    Definition: iconverter.hpp:23
    -
    OptCtx parse(std::string content, const iConverterBuilder &builder)
    -
    virtual CstConvertF build_cconv(void) const =0
    -
    Definition: parse.hpp:9
    -
    OptCtx parse_file(std::string filename, const iConverterBuilder &builder)
    -
    virtual ade::CoordptrT shaperize(::NumList *list) const =0
    -
    std::unordered_map< std::string, std::unordered_set< std::string > > properties_
    Definition: parse.hpp:16
    - -
    - - - - diff --git a/docs/optimize_8cpp.html b/docs/optimize_8cpp.html deleted file mode 100644 index cb071a4c4..000000000 --- a/docs/optimize_8cpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: opt/src/optimize.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    optimize.cpp File Reference
    -
    -
    -
    #include "opt/rmdups.hpp"
    -#include "opt/optimize.hpp"
    -
    -Include dependency graph for optimize.cpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/optimize_8cpp__incl.map b/docs/optimize_8cpp__incl.map deleted file mode 100644 index 7aeb50517..000000000 --- a/docs/optimize_8cpp__incl.map +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/optimize_8cpp__incl.md5 b/docs/optimize_8cpp__incl.md5 deleted file mode 100644 index a367cc8e0..000000000 --- a/docs/optimize_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -34cca8b13e0867fd3c660fc6d943e94e \ No newline at end of file diff --git a/docs/optimize_8cpp__incl.png b/docs/optimize_8cpp__incl.png deleted file mode 100644 index 1135cbdf3..000000000 Binary files a/docs/optimize_8cpp__incl.png and /dev/null differ diff --git a/docs/optimize_8hpp.html b/docs/optimize_8hpp.html deleted file mode 100644 index 5aa225bd2..000000000 --- a/docs/optimize_8hpp.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Tenncor: opt/optimize.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    optimize.hpp File Reference
    -
    -
    -
    #include "opt/matcher.hpp"
    -#include "opt/iconverter.hpp"
    -
    -Include dependency graph for optimize.hpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    struct  opt::OptCtx
     
    - - - -

    -Namespaces

     opt
     
    - - - -

    -Typedefs

    using opt::CstConvertF = std::function< ade::TensptrT(ade::iTensor *)>
     
    - - - -

    -Functions

    ade::TensT opt::optimize (ade::TensT roots, const OptCtx &opts)
     
    -
    - - - - diff --git a/docs/optimize_8hpp__dep__incl.map b/docs/optimize_8hpp__dep__incl.map deleted file mode 100644 index d2597e191..000000000 --- a/docs/optimize_8hpp__dep__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/optimize_8hpp__dep__incl.md5 b/docs/optimize_8hpp__dep__incl.md5 deleted file mode 100644 index 2400dc384..000000000 --- a/docs/optimize_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -cd0d93fa03d9d396d96c6d704f8ff2c7 \ No newline at end of file diff --git a/docs/optimize_8hpp__dep__incl.png b/docs/optimize_8hpp__dep__incl.png deleted file mode 100644 index 240f11fd0..000000000 Binary files a/docs/optimize_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/optimize_8hpp__incl.map b/docs/optimize_8hpp__incl.map deleted file mode 100644 index 6e6d94d5c..000000000 --- a/docs/optimize_8hpp__incl.map +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/optimize_8hpp__incl.md5 b/docs/optimize_8hpp__incl.md5 deleted file mode 100644 index e49daac05..000000000 --- a/docs/optimize_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b42d5f02898e6e08b56832bd7b455303 \ No newline at end of file diff --git a/docs/optimize_8hpp__incl.png b/docs/optimize_8hpp__incl.png deleted file mode 100644 index 0db21cb5e..000000000 Binary files a/docs/optimize_8hpp__incl.png and /dev/null differ diff --git a/docs/optimize_8hpp_source.html b/docs/optimize_8hpp_source.html deleted file mode 100644 index 0c81c8ff0..000000000 --- a/docs/optimize_8hpp_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: opt/optimize.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    optimize.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "opt/matcher.hpp"
    2 #include "opt/iconverter.hpp"
    3 
    4 #ifndef OPT_OPTIMIZE_HPP
    5 #define OPT_OPTIMIZE_HPP
    6 
    7 namespace opt
    8 {
    9 
    10 using CstConvertF = std::function<ade::TensptrT(ade::iTensor*)>;
    11 
    12 struct OptCtx
    13 {
    15 
    17 
    18  std::unordered_map<std::string,ConvptrT> converts_;
    19 };
    20 
    21 ade::TensT optimize (ade::TensT roots, const OptCtx& opts);
    22 
    23 }
    24 
    25 #endif // OPT_OPTIMIZE_HPP
    CstConvertF const_conv_
    Definition: optimize.hpp:16
    - -
    Definition: candidate.hpp:11
    -
    std::function< ade::TensptrT(ade::iTensor *)> CstConvertF
    Definition: optimize.hpp:10
    -
    Definition: optimize.hpp:12
    - -
    VoterPool voters_
    Definition: optimize.hpp:14
    -
    std::unordered_map< std::string, ConvptrT > converts_
    Definition: optimize.hpp:18
    -
    std::vector< TensptrT > TensT
    Vector representation of ade tensor pointers.
    Definition: funcarg.hpp:104
    -
    ade::TensT optimize(ade::TensT roots, const OptCtx &opts)
    -
    Definition: ivoter.hpp:219
    -
    - - - - diff --git a/docs/pages.html b/docs/pages.html deleted file mode 100644 index 9685565f9..000000000 --- a/docs/pages.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Related Pages - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Related Pages
    -
    - - - - - diff --git a/docs/parse_8cpp.html b/docs/parse_8cpp.html deleted file mode 100644 index 766dc448c..000000000 --- a/docs/parse_8cpp.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Tenncor: opt/src/parse.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    parse.cpp File Reference
    -
    -
    -
    #include <boost/uuid/uuid.hpp>
    -#include <boost/uuid/uuid_generators.hpp>
    -#include <boost/uuid/uuid_io.hpp>
    -#include "opt/voter.hpp"
    -#include "opt/parse.hpp"
    -
    -Include dependency graph for parse.cpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/parse_8cpp__incl.map b/docs/parse_8cpp__incl.map deleted file mode 100644 index cd54053b2..000000000 --- a/docs/parse_8cpp__incl.map +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/parse_8cpp__incl.md5 b/docs/parse_8cpp__incl.md5 deleted file mode 100644 index 4914fc153..000000000 --- a/docs/parse_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7effbd3ddea0d792ef4d38b9ca0f6285 \ No newline at end of file diff --git a/docs/parse_8cpp__incl.png b/docs/parse_8cpp__incl.png deleted file mode 100644 index 5c69a1714..000000000 Binary files a/docs/parse_8cpp__incl.png and /dev/null differ diff --git a/docs/prop_8cpp.html b/docs/prop_8cpp.html deleted file mode 100644 index bf272b82a..000000000 --- a/docs/prop_8cpp.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: tag/src/prop.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    prop.cpp File Reference
    -
    -
    -
    #include "tag/prop.hpp"
    -
    -Include dependency graph for prop.cpp:
    -
    -
    - - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/prop_8cpp__incl.map b/docs/prop_8cpp__incl.map deleted file mode 100644 index 8b0c921c7..000000000 --- a/docs/prop_8cpp__incl.map +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/prop_8cpp__incl.md5 b/docs/prop_8cpp__incl.md5 deleted file mode 100644 index e9f5bcba5..000000000 --- a/docs/prop_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9e17c4791cf533664a21b3749e545860 \ No newline at end of file diff --git a/docs/prop_8cpp__incl.png b/docs/prop_8cpp__incl.png deleted file mode 100644 index 849df50a2..000000000 Binary files a/docs/prop_8cpp__incl.png and /dev/null differ diff --git a/docs/prop_8hpp.html b/docs/prop_8hpp.html deleted file mode 100644 index 2d9d7d8b6..000000000 --- a/docs/prop_8hpp.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - -Tenncor: tag/prop.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    prop.hpp File Reference
    -
    -
    -
    #include "tag/tag.hpp"
    -
    -Include dependency graph for prop.hpp:
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - -

    -Classes

    struct  tag::PropTag
     PropTag (properties tag) define node properties. More...
     
    struct  tag::PropertyRegistry
     
    - - - -

    -Namespaces

     tag
     
    - - - -

    -Functions

    PropertyRegistry & tag::get_property_reg (void)
     
    - - - - - - - -

    -Variables

    const std::string tag::props_key = "properties"
     
    const std::string tag::commutative_tag = "commutative"
     
    const std::string tag::immutable_tag = "immutable"
     
    -
    - - - - diff --git a/docs/prop_8hpp__dep__incl.map b/docs/prop_8hpp__dep__incl.map deleted file mode 100644 index 7b476c700..000000000 --- a/docs/prop_8hpp__dep__incl.map +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/prop_8hpp__dep__incl.md5 b/docs/prop_8hpp__dep__incl.md5 deleted file mode 100644 index e4c6df3f7..000000000 --- a/docs/prop_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -bc4a26db9147f830e81f6064e455c2d7 \ No newline at end of file diff --git a/docs/prop_8hpp__dep__incl.png b/docs/prop_8hpp__dep__incl.png deleted file mode 100644 index 29ca9461f..000000000 Binary files a/docs/prop_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/prop_8hpp__incl.map b/docs/prop_8hpp__incl.map deleted file mode 100644 index 075850201..000000000 --- a/docs/prop_8hpp__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/prop_8hpp__incl.md5 b/docs/prop_8hpp__incl.md5 deleted file mode 100644 index aeae5b7d1..000000000 --- a/docs/prop_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1d79af6e19d3620190f164bdf3b69353 \ No newline at end of file diff --git a/docs/prop_8hpp__incl.png b/docs/prop_8hpp__incl.png deleted file mode 100644 index 85292d4c2..000000000 Binary files a/docs/prop_8hpp__incl.png and /dev/null differ diff --git a/docs/prop_8hpp_source.html b/docs/prop_8hpp_source.html deleted file mode 100644 index 97181d06f..000000000 --- a/docs/prop_8hpp_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Tenncor: tag/prop.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    prop.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "tag/tag.hpp"
    2 
    3 #ifndef TAG_PROP_HPP
    4 #define TAG_PROP_HPP
    5 
    6 namespace tag
    7 {
    8 
    9 const std::string props_key = "properties";
    10 
    11 // some property tags
    12 const std::string commutative_tag = "commutative";
    13 
    14 const std::string immutable_tag = "immutable";
    15 
    17 struct PropTag final : public iTag
    18 {
    19  PropTag (std::string init_label) : labels_({init_label}) {}
    20 
    21  size_t tag_id (void) const override
    22  {
    23  return tag_id_;
    24  }
    25 
    26  void absorb (TagptrT&& other) override
    27  {
    28  std::unordered_set<std::string>& olabels =
    29  static_cast<PropTag*>(other.get())->labels_;
    30  labels_.insert(olabels.begin(), olabels.end());
    31  }
    32 
    33  TagRepsT get_tags (void) const override
    34  {
    35  TagRepsT out;
    36  out.emplace(props_key, std::vector<std::string>(
    37  labels_.begin(), labels_.end()));
    38  return out;
    39  }
    40 
    41 private:
    42  std::unordered_set<std::string> labels_;
    43 
    44  static size_t tag_id_;
    45 };
    46 
    47 struct PropertyRegistry final
    48 {
    50  tag_reg_(registry) {}
    51 
    52  void property_tag (ade::TensrefT tens, std::string property)
    53  {
    54  tag_reg_.add_tag(tens, TagptrT(new PropTag(property)));
    55  }
    56 
    57  bool has_property (const ade::iTensor* tens, std::string property)
    58  {
    59  auto reps = tag_reg_.get_tags(tens);
    60  auto it = reps.find(props_key);
    61  if (reps.end() == it)
    62  {
    63  return false;
    64  }
    65  return estd::arr_has(it->second, property);
    66  }
    67 
    69 };
    70 
    72 
    73 }
    74 
    75 #endif // TAG_PROP_HPP
    void add_tag(ade::TensrefT tens, TagptrT tag)
    Definition: tag.hpp:137
    -
    PropTag(std::string init_label)
    Definition: prop.hpp:19
    -
    Definition: tag.hpp:16
    -
    TagRepsT get_tags(const ade::iTensor *tens)
    Definition: tag.hpp:152
    -
    Definition: tag.hpp:135
    -
    size_t tag_id(void) const override
    Definition: prop.hpp:21
    -
    const std::string props_key
    Definition: prop.hpp:9
    -
    PropTag (properties tag) define node properties.
    Definition: prop.hpp:17
    -
    Definition: group.hpp:10
    -
    std::unique_ptr< iTag > TagptrT
    Definition: tag.hpp:27
    -
    std::map< std::string, std::vector< std::string > > TagRepsT
    Definition: tag.hpp:12
    - -
    static size_t tag_id_
    Definition: prop.hpp:44
    -
    const std::string commutative_tag
    Definition: prop.hpp:12
    -
    void absorb(TagptrT &&other) override
    Definition: prop.hpp:26
    -
    TagRegistry & tag_reg_
    Definition: prop.hpp:68
    -
    PropertyRegistry(TagRegistry &registry=get_reg())
    Definition: prop.hpp:49
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    Definition: prop.hpp:47
    -
    std::unordered_set< std::string > labels_
    Definition: prop.hpp:42
    -
    TagRegistry & get_reg(void)
    -
    std::weak_ptr< iTensor > TensrefT
    Tensor weak pointers.
    Definition: itensor.hpp:52
    -
    PropertyRegistry & get_property_reg(void)
    -
    const std::string immutable_tag
    Definition: prop.hpp:14
    -
    TagRepsT get_tags(void) const override
    Definition: prop.hpp:33
    -
    bool has_property(const ade::iTensor *tens, std::string property)
    Definition: prop.hpp:57
    -
    void property_tag(ade::TensrefT tens, std::string property)
    Definition: prop.hpp:52
    -
    - - - - diff --git a/docs/pyapis_8py.html b/docs/pyapis_8py.html deleted file mode 100644 index c811eff96..000000000 --- a/docs/pyapis_8py.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins/pyapis.py File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pyapis.py File Reference
    -
    -
    - - - - -

    -Classes

    class  pyapis.PyAPIsPlugin
     
    - - - -

    -Namespaces

     pyapis
     
    - - - - - - - - - - - - - - - -

    -Functions

    def pyapis._sub_pybind (stmt, source)
     
    def pyapis._strip_template_prefix (template)
     
    def pyapis._wrap_func (idx, api, namespace)
     
    def pyapis._handle_pybind (pybind_type)
     
    def pyapis._handle_pybind_type (pybind_type)
     
    def pyapis._handle_unique_wrap (pybind_type, apis, namespace)
     
    def pyapis._handle_defs (pybind_type, apis, module_name, first_module)
     
    - - - - - - - - - - - -

    -Variables

    string pyapis._pybindt = 'PybindT'
     
    string pyapis._header_template
     
    string pyapis._source_template
     
    string pyapis._func_fmt
     
    string pyapis._plugin_id = 'PYBINDER'
     
    -
    - - - - diff --git a/docs/random_8cpp.html b/docs/random_8cpp.html deleted file mode 100644 index 428b2c777..000000000 --- a/docs/random_8cpp.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: ead/src/random.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    random.cpp File Reference
    -
    -
    -
    #include "ead/random.hpp"
    -
    -Include dependency graph for random.cpp:
    -
    -
    - - - -
    -
    - - - - diff --git a/docs/random_8cpp__incl.map b/docs/random_8cpp__incl.map deleted file mode 100644 index e90b5d5cf..000000000 --- a/docs/random_8cpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/random_8cpp__incl.md5 b/docs/random_8cpp__incl.md5 deleted file mode 100644 index 36f0e7103..000000000 --- a/docs/random_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -efb53241d955e79d5f9268ed70fca01b \ No newline at end of file diff --git a/docs/random_8cpp__incl.png b/docs/random_8cpp__incl.png deleted file mode 100644 index 656d9eb32..000000000 Binary files a/docs/random_8cpp__incl.png and /dev/null differ diff --git a/docs/random_8hpp.html b/docs/random_8hpp.html deleted file mode 100644 index 8c20f3556..000000000 --- a/docs/random_8hpp.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Tenncor: ead/random.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    random.hpp File Reference
    -
    -
    -
    #include <random>
    -#include <type_traits>
    -#include <functional>
    -
    -Include dependency graph for random.hpp:
    -
    -
    -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     ead
     
    - - - - - - - -

    -Typedefs

    using ead::EngineT = std::default_random_engine
     RNG engine used. More...
     
    template<typename T >
    using ead::GenF = std::function< T()>
     
    - - - - - - - - - - - - - - - - -

    -Functions

    EngineT & ead::get_engine (void)
     Return global random generator. More...
     
    template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    ead::unif (const T &a, const T &b)
     
    template<typename T , typename std::enable_if< std::is_integral< T >::value >::type * = nullptr>
    GenF< T > ead::unif_gen (const T &a, const T &b)
     
    template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    GenF< T > ead::unif_gen (T a, T b)
     
    template<typename T , typename std::enable_if<!std::is_integral< T >::value >::type * = nullptr>
    GenF< T > ead::norm_gen (T mean, T stdev)
     
    -
    - - - - diff --git a/docs/random_8hpp__dep__incl.map b/docs/random_8hpp__dep__incl.map deleted file mode 100644 index 6dfb39d15..000000000 --- a/docs/random_8hpp__dep__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/random_8hpp__dep__incl.md5 b/docs/random_8hpp__dep__incl.md5 deleted file mode 100644 index 2a4d7e0ce..000000000 --- a/docs/random_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -580b6d259ff21a46c8e8186cebc29757 \ No newline at end of file diff --git a/docs/random_8hpp__dep__incl.png b/docs/random_8hpp__dep__incl.png deleted file mode 100644 index ff8d3a189..000000000 Binary files a/docs/random_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/random_8hpp__incl.map b/docs/random_8hpp__incl.map deleted file mode 100644 index a3e5897cb..000000000 --- a/docs/random_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/random_8hpp__incl.md5 b/docs/random_8hpp__incl.md5 deleted file mode 100644 index 7e1b2013e..000000000 --- a/docs/random_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ea398438de5af3489ca10f485a1bb23f \ No newline at end of file diff --git a/docs/random_8hpp__incl.png b/docs/random_8hpp__incl.png deleted file mode 100644 index bac862b97..000000000 Binary files a/docs/random_8hpp__incl.png and /dev/null differ diff --git a/docs/random_8hpp_source.html b/docs/random_8hpp_source.html deleted file mode 100644 index ddf01d54d..000000000 --- a/docs/random_8hpp_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: ead/random.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    random.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include <random>
    2 #include <type_traits>
    3 #include <functional>
    4 
    5 #ifndef EAD_RANDOM_HPP
    6 #define EAD_RANDOM_HPP
    7 
    8 namespace ead
    9 {
    10 
    12 using EngineT = std::default_random_engine;
    13 
    14 template <typename T>
    15 using GenF = std::function<T()>;
    16 
    18 EngineT& get_engine (void);
    19 
    20 template <typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
    21 T unif (const T& a, const T& b)
    22 {
    23  std::uniform_int_distribution<T> dist(a, b);
    24  return dist(get_engine());
    25 }
    26 
    27 template <typename T, typename std::enable_if<!std::is_integral<T>::value>::type* = nullptr>
    28 T unif (const T& a, const T& b)
    29 {
    30  std::uniform_real_distribution<T> dist(a, b);
    31  return dist(get_engine());
    32 }
    33 
    34 template <typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
    35 GenF<T> unif_gen (const T& a, const T& b)
    36 {
    37  std::uniform_int_distribution<T> dist(a, b);
    38  return std::bind(dist, get_engine());;
    39 }
    40 
    41 template <typename T, typename std::enable_if<!std::is_integral<T>::value>::type* = nullptr>
    42 GenF<T> unif_gen (T a, T b)
    43 {
    44  std::uniform_real_distribution<T> dist(a, b);
    45  return std::bind(dist, get_engine());
    46 }
    47 
    48 template <typename T, typename std::enable_if<!std::is_integral<T>::value>::type* = nullptr>
    49 GenF<T> norm_gen (T mean, T stdev)
    50 {
    51  std::normal_distribution<T> dist(mean, stdev);
    52  return std::bind(dist, get_engine());
    53 }
    54 
    55 }
    56 
    57 #endif // EAD_RANDOM_HPP
    GenF< T > norm_gen(T mean, T stdev)
    Definition: random.hpp:49
    -
    std::function< T()> GenF
    Definition: random.hpp:15
    -
    Definition: constant.hpp:9
    -
    T unif(const T &a, const T &b)
    Definition: random.hpp:21
    -
    GenF< T > unif_gen(const T &a, const T &b)
    Definition: random.hpp:35
    -
    EngineT & get_engine(void)
    Return global random generator.
    -
    std::default_random_engine EngineT
    RNG engine used.
    Definition: random.hpp:12
    -
    - - - - diff --git a/docs/rmdups_8cpp.html b/docs/rmdups_8cpp.html deleted file mode 100644 index d5e5fd1da..000000000 --- a/docs/rmdups_8cpp.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Tenncor: opt/src/rmdups.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    rmdups.cpp File Reference
    -
    -
    -
    #include "opt/rmdups.hpp"
    -
    -Include dependency graph for rmdups.cpp:
    -
    -
    - - - - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/rmdups_8cpp__incl.map b/docs/rmdups_8cpp__incl.map deleted file mode 100644 index e37613742..000000000 --- a/docs/rmdups_8cpp__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/rmdups_8cpp__incl.md5 b/docs/rmdups_8cpp__incl.md5 deleted file mode 100644 index 6ea27f078..000000000 --- a/docs/rmdups_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7e82c640d1439d2bf31e1dcbe2034609 \ No newline at end of file diff --git a/docs/rmdups_8cpp__incl.png b/docs/rmdups_8cpp__incl.png deleted file mode 100644 index 8bf45f715..000000000 Binary files a/docs/rmdups_8cpp__incl.png and /dev/null differ diff --git a/docs/rmdups_8hpp.html b/docs/rmdups_8hpp.html deleted file mode 100644 index d3aa72bfa..000000000 --- a/docs/rmdups_8hpp.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Tenncor: opt/rmdups.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    rmdups.hpp File Reference
    -
    -
    -
    #include "opt/stats.hpp"
    -
    -Include dependency graph for rmdups.hpp:
    -
    -
    - - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     opt
     
    - - - - - -

    -Typedefs

    using opt::ImmutablesT = std::vector< ade::LeafptrT >
     
    using opt::HFunctorsT = std::vector< std::vector< ade::FuncptrT > >
     
    - - - - - - - - - - -

    -Functions

    void opt::replace_parents (const ade::ParentFinder &pfinder, ade::iTensor *source, ade::TensptrT target)
     
    template<typename T >
    std::vector< T > opt::remove_duplicates (ade::TensT &roots, std::vector< T > tens, const ade::ParentFinder &pfinder, tag::TagRegistry &registry=tag::get_reg())
     
    void opt::populate_graph (ImmutablesT &immutables, HFunctorsT &functors, const ade::TensT &roots)
     
    void opt::remove_all_duplicates (ade::TensT &roots, ImmutablesT &immutables, HFunctorsT &functors)
     
    -
    - - - - diff --git a/docs/rmdups_8hpp__dep__incl.map b/docs/rmdups_8hpp__dep__incl.map deleted file mode 100644 index 3c9e0c954..000000000 --- a/docs/rmdups_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/rmdups_8hpp__dep__incl.md5 b/docs/rmdups_8hpp__dep__incl.md5 deleted file mode 100644 index bf5adaecc..000000000 --- a/docs/rmdups_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -032f1592203f031d366ab1453f24abf8 \ No newline at end of file diff --git a/docs/rmdups_8hpp__dep__incl.png b/docs/rmdups_8hpp__dep__incl.png deleted file mode 100644 index 84918eb53..000000000 Binary files a/docs/rmdups_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/rmdups_8hpp__incl.map b/docs/rmdups_8hpp__incl.map deleted file mode 100644 index 84d00c197..000000000 --- a/docs/rmdups_8hpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/rmdups_8hpp__incl.md5 b/docs/rmdups_8hpp__incl.md5 deleted file mode 100644 index 49f308623..000000000 --- a/docs/rmdups_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -651659ae0d4871c01ed6a5b0f6e21f0a \ No newline at end of file diff --git a/docs/rmdups_8hpp__incl.png b/docs/rmdups_8hpp__incl.png deleted file mode 100644 index 445bfe831..000000000 Binary files a/docs/rmdups_8hpp__incl.png and /dev/null differ diff --git a/docs/rmdups_8hpp_source.html b/docs/rmdups_8hpp_source.html deleted file mode 100644 index 6afc7171b..000000000 --- a/docs/rmdups_8hpp_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Tenncor: opt/rmdups.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    rmdups.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "opt/stats.hpp"
    2 
    3 #ifndef OPT_RMDUPS_HPP
    4 #define OPT_RMDUPS_HPP
    5 
    6 namespace opt
    7 {
    8 
    9 void replace_parents (const ade::ParentFinder& pfinder,
    10  ade::iTensor* source, ade::TensptrT target);
    11 
    12 template <typename T>
    13 std::vector<T> remove_duplicates (ade::TensT& roots, std::vector<T> tens,
    14  const ade::ParentFinder& pfinder,
    15  tag::TagRegistry& registry = tag::get_reg())
    16 {
    17  if (tens.empty())
    18  {
    19  return {};
    20  }
    21 
    22  std::unordered_set<ade::iTensor*> priorities;
    23  std::unordered_map<ade::iTensor*,std::vector<size_t>> rindices;
    24  for (size_t i = 0, n = roots.size(); i < n; ++i)
    25  {
    26  ade::TensptrT& root = roots[i];
    27  priorities.emplace(root.get());
    28  rindices[root.get()].push_back(i);
    29  }
    30 
    31  std::sort(tens.begin(), tens.end(),
    32  [&priorities](T& a, T& b) { return lt(priorities, a.get(), b.get()); });
    33  T last = tens[0];
    34  std::vector<T> uniques = {last};
    35  size_t n = tens.size();
    36  uniques.reserve(n - 1);
    37  for (size_t i = 1; i < n; ++i)
    38  {
    39  T& cur = tens[i];
    40  if (is_equal(last.get(), cur.get()))
    41  {
    42  logs::debugf("replacing %s", cur->to_string().c_str());
    43  // remove equivalent node
    44  replace_parents(pfinder, cur.get(), last);
    45 
    46  auto it = rindices.find(cur.get());
    47  if (rindices.end() != it)
    48  {
    49  for (size_t ridx : it->second)
    50  {
    51  roots[ridx] = last;
    52  }
    53  }
    54 
    55  // todo: mark parents as uninitialized, reinitialize entire graph, or uninitialize everything to begin with
    56 
    57  // inherit tags
    58  registry.move_tags(last, cur.get());
    59  }
    60  else
    61  {
    62  uniques.push_back(cur);
    63  last = cur;
    64  }
    65  }
    66  return uniques;
    67 }
    68 
    69 using ImmutablesT = std::vector<ade::LeafptrT>;
    70 
    71 using HFunctorsT = std::vector<std::vector<ade::FuncptrT>>;
    72 
    73 // identify immutable leaves and organize functors by maxheight
    74 void populate_graph (ImmutablesT& immutables, HFunctorsT& functors,
    75  const ade::TensT& roots);
    76 
    77 // delete and update equivalent immutable leaves and functors
    79  ImmutablesT& immutables, HFunctorsT& functors);
    80 
    81 }
    82 
    83 #endif // OPT_RMDUPS_HPP
    bool lt(ade::CoordptrT a, ade::CoordptrT b)
    - -
    std::vector< T > remove_duplicates(ade::TensT &roots, std::vector< T > tens, const ade::ParentFinder &pfinder, tag::TagRegistry &registry=tag::get_reg())
    Definition: rmdups.hpp:13
    -
    Definition: tag.hpp:135
    -
    std::vector< std::vector< ade::FuncptrT > > HFunctorsT
    Definition: rmdups.hpp:71
    -
    bool is_equal(ade::CoordptrT a, ade::CoordptrT b)
    -
    Definition: candidate.hpp:11
    -
    void replace_parents(const ade::ParentFinder &pfinder, ade::iTensor *source, ade::TensptrT target)
    -
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    void populate_graph(ImmutablesT &immutables, HFunctorsT &functors, const ade::TensT &roots)
    -
    void remove_all_duplicates(ade::TensT &roots, ImmutablesT &immutables, HFunctorsT &functors)
    -
    TagRegistry & get_reg(void)
    -
    std::vector< ade::LeafptrT > ImmutablesT
    Definition: rmdups.hpp:69
    -
    std::vector< TensptrT > TensT
    Vector representation of ade tensor pointers.
    Definition: funcarg.hpp:104
    -
    Traveler that for each child tracks the relationship to all parents.
    Definition: traveler.hpp:166
    -
    - - - - diff --git a/docs/rules_8md.html b/docs/rules_8md.html deleted file mode 100644 index 64e7a0f07..000000000 --- a/docs/rules_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -Tenncor: opt/rules.md File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    opt/rules.md File Reference
    -
    -
    -
    - - - - diff --git a/docs/save_8hpp.html b/docs/save_8hpp.html deleted file mode 100644 index d4d1c5ee0..000000000 --- a/docs/save_8hpp.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Tenncor: pbm/save.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    save.hpp File Reference
    -
    -
    -
    #include <list>
    -#include <unordered_set>
    -#include "ade/traveler.hpp"
    -#include "ade/functor.hpp"
    -#include "pbm/data.hpp"
    -
    -Include dependency graph for save.hpp:
    -
    -
    - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Classes

    struct  pbm::GraphSaver< SAVER, >
     Graph serialization traveler. More...
     
    - - - -

    -Namespaces

     pbm
     
    - - - - -

    -Typedefs

    using pbm::PathedMapT = std::unordered_map< ade::TensptrT, StringsT >
     Map Tensptrs to a string path type. More...
     
    -
    - - - - diff --git a/docs/save_8hpp__incl.map b/docs/save_8hpp__incl.map deleted file mode 100644 index b02e14298..000000000 --- a/docs/save_8hpp__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/save_8hpp__incl.md5 b/docs/save_8hpp__incl.md5 deleted file mode 100644 index fe6e3e0f6..000000000 --- a/docs/save_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -661fcc62257e3ecc91b8bea5903c2484 \ No newline at end of file diff --git a/docs/save_8hpp__incl.png b/docs/save_8hpp__incl.png deleted file mode 100644 index 1df2f186e..000000000 Binary files a/docs/save_8hpp__incl.png and /dev/null differ diff --git a/docs/save_8hpp_source.html b/docs/save_8hpp_source.html deleted file mode 100644 index ffae75bf6..000000000 --- a/docs/save_8hpp_source.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: pbm/save.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    save.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include <list>
    10 #include <unordered_set>
    11 
    12 #include "ade/traveler.hpp"
    13 #include "ade/functor.hpp"
    14 
    15 #include "pbm/data.hpp"
    16 
    17 #ifndef PBM_SAVE_HPP
    18 #define PBM_SAVE_HPP
    19 
    20 namespace pbm
    21 {
    22 
    24 using PathedMapT = std::unordered_map<ade::TensptrT,StringsT>;
    25 
    27 template <typename SAVER,
    28  typename std::enable_if<
    29  std::is_base_of<iSaver,SAVER>::value>::type* = nullptr>
    30 struct GraphSaver final : public ade::iTraveler
    31 {
    33  void visit (ade::iLeaf* leaf) override
    34  {
    35  if (false == estd::has(visited_, leaf))
    36  {
    37  leaf->accept(stat);
    38  leaves_.push_back(leaf);
    39  visited_.emplace(leaf);
    40  }
    41  }
    42 
    44  void visit (ade::iFunctor* func) override
    45  {
    46  if (false == estd::has(visited_, func))
    47  {
    48  func->accept(stat);
    49  funcs_.push_back(func);
    50  visited_.emplace(func);
    51 
    52  ade::ArgsT children = func->get_children();
    53  for (auto& child : children)
    54  {
    55  child.get_tensor()->accept(*this);
    56  }
    57  }
    58  }
    59 
    61  void save (cortenn::Graph& out, PathedMapT labels = PathedMapT())
    62  {
    63  std::unordered_map<ade::iTensor*,StringsT> raw_labels;
    64  for (auto lpair : labels)
    65  {
    66  raw_labels[lpair.first.get()] = lpair.second;
    67  }
    68 
    69  // sort functions from the root with the smallest subtree to the largest
    70  // this ensures every children of a node appears before the parent,
    71  // as is the order of node creations
    72  funcs_.sort(
    73  [&](ade::iTensor* a, ade::iTensor* b)
    74  {
    75  return stat.graphsize_[a].upper_ < stat.graphsize_[b].upper_;
    76  });
    77 
    78  std::vector<ade::iFunctor*> funcs(funcs_.begin(), funcs_.end());
    79  std::vector<ade::iLeaf*> leaves(leaves_.begin(), leaves_.end());
    80 
    81  // all nodes in leaf appear before funcs
    82  std::unordered_map<ade::iTensor*,size_t> ordermap;
    83  size_t nleaves = leaves.size();
    84  for (size_t i = 0; i < nleaves; ++i)
    85  {
    86  ade::iLeaf* tens = leaves[i];
    87  ordermap[tens] = i;
    88 
    89  cortenn::Node* pb_node = out.add_nodes();
    90  auto it = raw_labels.find(tens);
    91  if (raw_labels.end() != it)
    92  {
    93  google::protobuf::RepeatedPtrField<std::string> vec(
    94  it->second.begin(), it->second.end());
    95  pb_node->mutable_labels()->Swap(&vec);
    96  }
    97  save_data(*pb_node->mutable_source(), tens);
    98  }
    99  for (size_t i = 0, n = funcs.size(); i < n; ++i)
    100  {
    101  ade::iFunctor* f = funcs[i];
    102  ordermap[f] = nleaves + i;
    103 
    104  cortenn::Node* pb_node = out.add_nodes();
    105  auto it = raw_labels.find(f);
    106  if (raw_labels.end() != it)
    107  {
    108  google::protobuf::RepeatedPtrField<std::string> vec(
    109  it->second.begin(), it->second.end());
    110  pb_node->mutable_labels()->Swap(&vec);
    111  }
    112  cortenn::Functor* func = pb_node->mutable_functor();
    113  ade::Opcode opcode = f->get_opcode();
    114  func->set_opname(opcode.name_);
    115  const ade::ArgsT& children = f->get_children();
    116  for (auto& child : children)
    117  {
    118  cortenn::NodeArg* arg = func->add_args();
    119  ade::iTensor* tens = child.get_tensor().get();
    120  arg->set_idx(ordermap[tens]);
    121  std::vector<double> shaper =
    122  saver_.save_shaper(child.get_shaper());
    123  std::vector<double> coorder =
    124  saver_.save_coorder(child.get_coorder());
    125  google::protobuf::RepeatedField<double> shaper_vec(
    126  shaper.begin(), shaper.end());
    127  google::protobuf::RepeatedField<double> coorder_vec(
    128  coorder.begin(), coorder.end());
    129  arg->mutable_shaper()->Swap(&shaper_vec);
    130  arg->mutable_coord()->Swap(&coorder_vec);
    131  arg->set_fwd(child.map_io());
    132  }
    133  }
    134  }
    135 
    137  std::list<ade::iLeaf*> leaves_;
    138 
    140  std::list<ade::iFunctor*> funcs_;
    141 
    143  std::unordered_set<ade::iTensor*> visited_;
    144 
    147 
    148 private:
    149  void save_data (cortenn::Source& out, ade::iLeaf* in)
    150  {
    151  const ade::Shape& shape = in->shape();
    152  bool is_const = false;
    153  out.set_shape(std::string(shape.begin(), shape.end()));
    154  out.set_data(saver_.save_leaf(is_const, in));
    155  out.set_typelabel(in->type_label());
    156  out.set_is_const(is_const);
    157  }
    158 
    159  SAVER saver_;
    160 };
    161 
    162 }
    163 
    164 #endif // PBM_SAVE_HPP
    SAVER saver_
    Definition: save.hpp:159
    -
    Interface of iOperation-defined operation node.
    Definition: ifunctor.hpp:28
    -
    std::list< ade::iFunctor * > funcs_
    List of functions visited (by depth-first)
    Definition: save.hpp:140
    - -
    Encoding of operation.
    Definition: ifunctor.hpp:18
    -
    void save_data(cortenn::Source &out, ade::iLeaf *in)
    Definition: save.hpp:149
    -
    std::string name_
    String representation of operation.
    Definition: ifunctor.hpp:21
    -
    void visit(ade::iFunctor *func) override
    Implementation of iTraveler.
    Definition: save.hpp:44
    -
    virtual const Shape & shape(void) const =0
    Return the shape held by this tensor.
    -
    void save(cortenn::Graph &out, PathedMapT labels=PathedMapT())
    Marshal all equation graphs in roots vector to protobuf object.
    Definition: save.hpp:61
    -
    void accept(iTraveler &visiter) override
    Implementation of iTensor.
    Definition: ifunctor.hpp:33
    -
    Leaf of the graph commonly representing the variable in an equation.
    Definition: ileaf.hpp:19
    -
    iterator end(void)
    Return end iterator of internal array.
    Definition: shape.hpp:160
    -
    Traveler that maps each tensor to its subtree&#39;s maximum depth.
    Definition: traveler.hpp:61
    -
    iterator begin(void)
    Return begin iterator of internal array.
    Definition: shape.hpp:154
    -
    virtual Opcode get_opcode(void) const =0
    Return operation encoding.
    - -
    std::list< ade::iLeaf * > leaves_
    List of leaves visited (left to right)
    Definition: save.hpp:137
    -
    Interface to travel through graph, treating iLeaf and iFunctor differently.
    Definition: itensor.hpp:22
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    virtual const ArgsT & get_children(void) const =0
    Return children nodes as a vector of raw pointers.
    -
    void visit(ade::iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: save.hpp:33
    -
    Definition: shape.hpp:60
    -
    ade::GraphStat stat
    Internal traveler.
    Definition: save.hpp:146
    -
    std::unordered_map< ade::TensptrT, StringsT > PathedMapT
    Map Tensptrs to a string path type.
    Definition: save.hpp:24
    -
    virtual std::string type_label(void) const =0
    Return data type label (for better readability)
    - -
    std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
    Definition: traveler.hpp:109
    -
    Graph serialization traveler.
    Definition: save.hpp:30
    -
    std::unordered_set< ade::iTensor * > visited_
    Visited nodes.
    Definition: save.hpp:143
    -
    void accept(iTraveler &visiter) override
    Implementation of iTensor.
    Definition: ileaf.hpp:24
    -
    Definition: data.hpp:18
    -
    std::vector< FuncArg > ArgsT
    Type of functor arguments.
    Definition: funcarg.hpp:101
    -
    - - - - diff --git a/docs/search/all_0.html b/docs/search/all_0.html deleted file mode 100644 index 5125b9400..000000000 --- a/docs/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_0.js b/docs/search/all_0.js deleted file mode 100644 index 2deb09bc7..000000000 --- a/docs/search/all_0.js +++ /dev/null @@ -1,48 +0,0 @@ -var searchData= -[ - ['_5fapply_5fstyles',['_apply_styles',['../namespacecsv__to__png.html#ac86331e1e4dd1f1e9b13863664c002e2',1,'csv_to_png']]], - ['_5fconvert_5ftmp',['_convert_tmp',['../namespacedtypes.html#acfaee5bd1db436ebd94e8f942863eb68',1,'dtypes']]], - ['_5fdecl_5ffunc',['_decl_func',['../namespaceapis.html#af082b6ddf4f3e76c469d78d5e5cf3558',1,'apis']]], - ['_5fdecl_5ftmp',['_decl_tmp',['../namespaceapis.html#a1c289e4c987f4a9bbc8318463b469a2a',1,'apis']]], - ['_5fdefn_5ffunc',['_defn_func',['../namespaceapis.html#a17c0ec59cc3da40d742d6663955561da',1,'apis']]], - ['_5fdefn_5ftmp',['_defn_tmp',['../namespaceapis.html#a11a09a0d2a8f355b7abae71ad7b22c68',1,'apis']]], - ['_5fead_5finternal_5fv2a',['_EAD_INTERNAL_V2A',['../operator_8hpp.html#a858db6a0d26c8da53588d111218592e5',1,'operator.hpp']]], - ['_5fead_5finternal_5fv2a_5fcase',['_EAD_INTERNAL_V2A_CASE',['../operator_8hpp.html#ac77627e3581774e8670ac02df25c6cb5',1,'operator.hpp']]], - ['_5ffunc_5ffmt',['_func_fmt',['../namespacepyapis.html#aa7a6eb29bfb82479901f9a8c8a4e5b1b',1,'pyapis']]], - ['_5fget_5ftype_5ftmp',['_get_type_tmp',['../namespacedtypes.html#a9c668ee51cadf33bb17279e8b63728d5',1,'dtypes']]], - ['_5fhandle_5fapi_5fheader',['_handle_api_header',['../namespaceapis.html#af86173c808ed77da53e37d4cd03b8094',1,'apis']]], - ['_5fhandle_5fapi_5fsource',['_handle_api_source',['../namespaceapis.html#aba7642663c01a1b1a164ae7360b890da',1,'apis']]], - ['_5fhandle_5fapi_5ftemplates',['_handle_api_templates',['../namespaceapis.html#a8b241bdb2f87afcf9f16711bd2977c69',1,'apis']]], - ['_5fhandle_5fcases',['_handle_cases',['../namespacedtypes.html#a59abb9b3a6af9014eb82ce4eb73be9aa',1,'dtypes']]], - ['_5fhandle_5fcode2names',['_handle_code2names',['../namespaceopcodes.html#a953b248a8c756ad1023b141dcf9e29c0',1,'opcodes']]], - ['_5fhandle_5fconversions',['_handle_conversions',['../namespacedtypes.html#acd10e772b3401d1a5660095120dac150',1,'dtypes']]], - ['_5fhandle_5fdefs',['_handle_defs',['../namespacepyapis.html#af0889a8a12bed9318c7a203efe57ad8c',1,'pyapis']]], - ['_5fhandle_5fenumeration',['_handle_enumeration',['../namespacedtypes.html#ac7fa3ef5957ddef6f7e9fc4a48a8ad63',1,'dtypes']]], - ['_5fhandle_5fget_5ftypes',['_handle_get_types',['../namespacedtypes.html#a74abe913b159de1a8769079e13ea3414',1,'dtypes']]], - ['_5fhandle_5fmapping',['_handle_mapping',['../namespacedtypes.html#a2edb6aa02f84533951e4fe2f62487a7e',1,'dtypes']]], - ['_5fhandle_5fname2codes',['_handle_name2codes',['../namespaceopcodes.html#ad1895613e67d988a780e3eb777cd2fb7',1,'opcodes']]], - ['_5fhandle_5fname2types',['_handle_name2types',['../namespacedtypes.html#a1bd0f7501c8ab16cc0bc5403cc0d9d77',1,'dtypes']]], - ['_5fhandle_5fopcodes',['_handle_opcodes',['../namespaceopcodes.html#a6d3d757032d6e2bc310e006785a35f50',1,'opcodes']]], - ['_5fhandle_5fops',['_handle_ops',['../namespaceopcodes.html#a1a985e12456f8c3d1e7d00a3c1d8f056',1,'opcodes']]], - ['_5fhandle_5fparams',['_handle_params',['../namespaceopcodes.html#ab16ea018a0b3190d540e12f47ee4b1d3',1,'opcodes']]], - ['_5fhandle_5fpybind',['_handle_pybind',['../namespacepyapis.html#a3f4b0246eb682c73d3f8acaa9ff1ce15',1,'pyapis']]], - ['_5fhandle_5fpybind_5ftype',['_handle_pybind_type',['../namespacepyapis.html#acdaf923477ea8d3a85be7b0dfa1ea279',1,'pyapis']]], - ['_5fhandle_5ftype2names',['_handle_type2names',['../namespacedtypes.html#aed8efcb38bd1c1d18be75ed1751a6e19',1,'dtypes']]], - ['_5fhandle_5ftypesizes',['_handle_typesizes',['../namespacedtypes.html#a30455ea929612fcf124b075bfcf3d1eb',1,'dtypes']]], - ['_5fhandle_5funique_5fwrap',['_handle_unique_wrap',['../namespacepyapis.html#a863d3af16bee0276179e7c7cf190a5de',1,'pyapis']]], - ['_5fheader_5ftemplate',['_header_template',['../namespaceapis.html#ab60264f2bf65f99e6adfefcfa8fa0f67',1,'apis._header_template()'],['../namespacedtypes.html#aa7f980069f5af0c639129be6ee52255b',1,'dtypes._header_template()'],['../namespaceopcodes.html#aae636a56d4222ea8c80da402dc1e3220',1,'opcodes._header_template()'],['../namespacepyapis.html#a1e8aa2432682aa5ae79c28398beda129',1,'pyapis._header_template()']]], - ['_5fns_5ftemplate',['_ns_template',['../namespaceapis.html#ab965234b46c6741efd3eb3192a947421',1,'apis']]], - ['_5fnullcheck',['_nullcheck',['../namespaceapis.html#adc1252319a39d043cec653420558d44a',1,'apis']]], - ['_5fout_5fgeneric',['_OUT_GENERIC',['../serialize_8hpp.html#ae0ebf6b431161a56e356f988d9f7bc07',1,'serialize.hpp']]], - ['_5fparse_5fargs',['_parse_args',['../namespaceapis.html#a9940ca508507d48152e1e16a84b1351d',1,'apis']]], - ['_5fplugin_5fid',['_plugin_id',['../namespaceapis.html#a2293308dacd433bfd5d478bd5b5d8987',1,'apis._plugin_id()'],['../namespacedtypes.html#a813f03b05838c10111a6e11cfab6423f',1,'dtypes._plugin_id()'],['../namespaceopcodes.html#aa8f338443e959cc7a2182f1d22584f03',1,'opcodes._plugin_id()'],['../namespacepyapis.html#adfa58074fd6c9997ddcce505689f923f',1,'pyapis._plugin_id()']]], - ['_5fpybindt',['_pybindt',['../namespacepyapis.html#a77fcf3bc082bc4e8c80db1ba987dd7b0',1,'pyapis']]], - ['_5fsource_5ftemplate',['_source_template',['../namespaceapis.html#a02903a1bbb93c82c7ff6c1c98d99c789',1,'apis._source_template()'],['../namespacedtypes.html#aff7a28ee6cb3b04b74b8ccb587316124',1,'dtypes._source_template()'],['../namespaceopcodes.html#a86f4ca2518f4b05594843ecfe1b51d96',1,'opcodes._source_template()'],['../namespacepyapis.html#af3b0115839e4736e8c47f924fee22cc2',1,'pyapis._source_template()']]], - ['_5fstr_5fclean',['_str_clean',['../namespacecsv__to__png.html#aae6cf0944862b60f2cfc3ee2c2d96730',1,'csv_to_png']]], - ['_5fstrip_5ftemplate_5fprefix',['_strip_template_prefix',['../namespacepyapis.html#acb0427e0309100c1e01b667299be08e8',1,'pyapis']]], - ['_5fstyles',['_styles',['../namespacecsv__to__png.html#a7e0968f2662f00259b4669bd3d0c90cd',1,'csv_to_png']]], - ['_5fsub_5fpybind',['_sub_pybind',['../namespacepyapis.html#a7bdc64b92170f29fe2b1a29ba29e36ac',1,'pyapis']]], - ['_5ftemplate_5fdefn_5ffunc',['_template_defn_func',['../namespaceapis.html#a8d9ca43392e67c4f728dfa88458e378d',1,'apis']]], - ['_5ftemplate_5fdefn_5ftmp',['_template_defn_tmp',['../namespaceapis.html#a02e893e69fea4cc5e526ad3b742ccbe7',1,'apis']]], - ['_5fwrap_5ffunc',['_wrap_func',['../namespacepyapis.html#a777c2746d7789dd51e925fd22f0bf6be',1,'pyapis']]] -]; diff --git a/docs/search/all_1.html b/docs/search/all_1.html deleted file mode 100644 index b8ff87111..000000000 --- a/docs/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_1.js b/docs/search/all_1.js deleted file mode 100644 index 9efe49474..000000000 --- a/docs/search/all_1.js +++ /dev/null @@ -1,38 +0,0 @@ -var searchData= -[ - ['abs',['abs',['../namespaceead.html#a985b9842da98b32da173414884218750',1,'ead']]], - ['absorb',['absorb',['../structtag_1_1_group_tag.html#addf234c45c9f3ec096f7f958ba9520b0',1,'tag::GroupTag::absorb()'],['../structtag_1_1_prop_tag.html#a530f65de30fe452f627a586697113cd3',1,'tag::PropTag::absorb()'],['../structtag_1_1i_tag.html#a98aeed3b29efd4164d38e73c2de92707',1,'tag::iTag::absorb()'],['../structtag_1_1_tag_collective.html#a85e27fa9f47bd09d3fe75477d82c324b',1,'tag::TagCollective::absorb()']]], - ['accept',['accept',['../structade_1_1i_functor.html#a66d87d6447e6d7336e2c118cc1e18a55',1,'ade::iFunctor::accept()'],['../structade_1_1i_leaf.html#aacdc7e234e8a75007f9610352c7ba43e',1,'ade::iLeaf::accept()'],['../structade_1_1i_tensor.html#aa7a69b3831cc43a6d173c08848662b24',1,'ade::iTensor::accept()']]], - ['access',['access',['../structade_1_1i_coord_map.html#a180b66d9db3782b17d7507bfe6967236',1,'ade::iCoordMap::access()'],['../structade_1_1_coord_map.html#aa0509214368694f866addb0df5df784a',1,'ade::CoordMap::access()'],['../structead_1_1_coord_map.html#a8afe688ec42e555d696864627042c441',1,'ead::CoordMap::access()']]], - ['add',['add',['../structade_1_1i_gradient_builder.html#a6450def2b42f1a6a23c0288c8f9d9f4a',1,'ade::iGradientBuilder::add()'],['../structead_1_1_gradient_builder.html#a27a929338ca7211bd735ef15cf6c7cbb',1,'ead::GradientBuilder::add()'],['../structtag_1_1_tag_collective.html#ad17d5481aa71b9f9c1046f8ea3b13c08',1,'tag::TagCollective::add()'],['../namespaceead.html#aa77a63938d5564b0ea2b811e74633095',1,'ead::add()']]], - ['add_5ftag',['add_tag',['../structtag_1_1_tag_registry.html#a7e7641626bfed3949f9ff756d0b376f3',1,'tag::TagRegistry']]], - ['ade',['ade',['../namespaceade.html',1,'']]], - ['ade_2ehpp',['ade.hpp',['../ade_2ade_8hpp.html',1,'(Global Namespace)'],['../dbg_2stream_2ade_8hpp.html',1,'(Global Namespace)']]], - ['ade_5fcsv_2ehpp',['ade_csv.hpp',['../ade__csv_8hpp.html',1,'']]], - ['adjacencies',['adjacencies',['../namespacetag.html#ab4b6ab2660636d5db56a3aa17e7b9d59',1,'tag']]], - ['adjmapt',['AdjMapT',['../namespacetag.html#a9cba46943ca1c23cb7f1c104a02ef2b5',1,'tag']]], - ['agen',['agen',['../namespaceagen.html',1,'']]], - ['agen_2epy',['agen.py',['../agen_8py.html',1,'']]], - ['agroupst',['AGroupsT',['../namespacetag.html#adc952604313a2e54d27b022e4334e420',1,'tag']]], - ['any',['ANY',['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3baa00374190265e7b6447db44977a7dff1',1,'def.h']]], - ['any_5f',['any_',['../struct_subgraph.html#ab39420d626f1f5c81b14e736740aae70',1,'Subgraph']]], - ['any_5fid_5f',['any_id_',['../structead_1_1_any_convr.html#afa1c6afc7dfe33cc003d1bc936348a36',1,'ead::AnyConvr']]], - ['anyconvr',['AnyConvr',['../structead_1_1_any_convr.html',1,'ead::AnyConvr< T >'],['../structead_1_1_any_convr.html#a36b5edb6e05b5e1d977a08541e1369b7',1,'ead::AnyConvr::AnyConvr()']]], - ['anys_5f',['anys_',['../structopt_1_1_seg_v_args.html#afcc685787379e287f5d28c11c88cdaae',1,'opt::SegVArgs']]], - ['api_5fheader',['api_header',['../namespaceapis.html#afa05a85a1a9a9451ebfd1fd7b66728ab',1,'apis']]], - ['apis',['apis',['../namespaceapis.html',1,'']]], - ['apis_2epy',['apis.py',['../apis_8py.html',1,'']]], - ['apisplugin',['APIsPlugin',['../classapis_1_1_a_p_is_plugin.html',1,'apis']]], - ['apply_5fshaper',['apply_shaper',['../namespaceade.html#aca8ab70c54a4bdfb4e58b2a3155c7510',1,'ade']]], - ['arg',['Arg',['../struct_arg.html',1,'']]], - ['arg_5f',['arg_',['../structead_1_1_builder_arg.html#a9dfc174de047420138e7bd9511c2a658',1,'ead::BuilderArg']]], - ['arg_5frecursive_5ffree',['arg_recursive_free',['../def_8h.html#a7ad5a8e7ad6cb90bf8674ee8cf842e41',1,'def.h']]], - ['args',['args',['../namespacecsv__to__png.html#afef0a68f8837a61d487d981b4fab5644',1,'csv_to_png']]], - ['args_5f',['args_',['../structade_1_1_functor.html#a2c261d16440fc9d99a95a7a95c0573ce',1,'ade::Functor::args_()'],['../structead_1_1_eigen_tens_op.html#aa5c05c4025d3ad7caab6e0f217fe3aa6',1,'ead::EigenTensOp::args_()'],['../structead_1_1_eigen_mat_op.html#a8bf032355a7cbbd431a0c995781f8df3',1,'ead::EigenMatOp::args_()'],['../structead_1_1_functor.html#a2ae92afb314a89ed4604f0e72e5a5281',1,'ead::Functor::args_()'],['../structead_1_1_func_convr.html#a2f25edec4178204e8d07d2b427bd9512',1,'ead::FuncConvr::args_()'],['../structead_1_1_group_convr.html#a031ad114ab22505b95d9df0238540761',1,'ead::GroupConvr::args_()'],['../struct_branch.html#ac3e2e665e32f26c65e1acb921781ccc0',1,'Branch::args_()'],['../structopt_1_1_ordr_voter.html#a4083912a3b141f7ca6e6000187761d65',1,'opt::OrdrVoter::args_()'],['../structopt_1_1_comm_voter.html#a2474522e00bcfd0492ed38c053c2ab45',1,'opt::CommVoter::args_()'],['../structopt_1_1_variadic_voter.html#a5c1275915f344dff1f3cf67b5b62104e',1,'opt::VariadicVoter::args_()']]], - ['argst',['ArgsT',['../namespaceade.html#a9db559f9967702ac0d7ce882e73e8f15',1,'ade::ArgsT()'],['../namespaceead.html#ab8fc1bf6d7132e0d7993b4d951780216',1,'ead::ArgsT()']]], - ['argument',['ARGUMENT',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899a0d4af967003ab5a27e677af0b336aec2',1,'def.h']]], - ['arr2vec',['arr2vec',['../namespacepyead.html#a2734c2b4c56ba88a92b2e1e42c23f92c',1,'pyead']]], - ['assign',['assign',['../structead_1_1i_eigen.html#ab4f98cb444314f25d980fdd297e7d7b0',1,'ead::iEigen::assign()'],['../structead_1_1_eigen_tens_op.html#a16e384834eaa6e95b23c4e60c78c52c9',1,'ead::EigenTensOp::assign()'],['../structead_1_1_eigen_mat_op.html#a465dab7f8af269ea96b87943e3a93f7b',1,'ead::EigenMatOp::assign()'],['../structead_1_1_variable.html#a1785383e0b1ac8e3e61f3216d3a56c5d',1,'ead::Variable::assign()'],['../structead_1_1_variable_node.html#a3b6bf413ca25876f793ea17201b0b7b9',1,'ead::VariableNode::assign(T *input, ade::Shape shape)'],['../structead_1_1_variable_node.html#a0afc7346086ada6cbe95374337d25965',1,'ead::VariableNode::assign(TensMapT< T > *tensmap)']]], - ['at',['at',['../structade_1_1_shape.html#a692d84faa24ca653440b0a6f5a4eda6d',1,'ade::Shape']]], - ['ade_20_28automatic_20differentiation_20engine_29',['ADE (Automatic Differentiation Engine)',['../md_ade__r_e_a_d_m_e__a_d_e.html',1,'']]] -]; diff --git a/docs/search/all_10.html b/docs/search/all_10.html deleted file mode 100644 index 50bc449e1..000000000 --- a/docs/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_10.js b/docs/search/all_10.js deleted file mode 100644 index d9f3baa99..000000000 --- a/docs/search/all_10.js +++ /dev/null @@ -1,37 +0,0 @@ -var searchData= -[ - ['rand_5funiform',['rand_uniform',['../namespaceead.html#a866f17bd3f6581a6bd17251b72a8dfe5',1,'ead']]], - ['random_2ecpp',['random.cpp',['../random_8cpp.html',1,'']]], - ['random_2ehpp',['random.hpp',['../random_8hpp.html',1,'']]], - ['rank_5fcap',['rank_cap',['../namespaceade.html#a010f58650ea19a281182bf10d0f26440',1,'ade']]], - ['rankt',['RankT',['../namespaceade.html#a635d7c8da15c71a8b2dd58b8753db6d1',1,'ade']]], - ['read_5fgraph',['read_graph',['../namespacecsv__to__png.html#a06c638337bb6669277a8a872a6cac313',1,'csv_to_png']]], - ['readme_2emd',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]], - ['readme_5fade_2emd',['README_ADE.md',['../_r_e_a_d_m_e___a_d_e_8md.html',1,'']]], - ['readme_5fdbg_2emd',['README_DBG.md',['../_r_e_a_d_m_e___d_b_g_8md.html',1,'']]], - ['readme_5fead_2emd',['README_EAD.md',['../_r_e_a_d_m_e___e_a_d_8md.html',1,'']]], - ['readme_5fpbm_2emd',['README_PBM.md',['../_r_e_a_d_m_e___p_b_m_8md.html',1,'']]], - ['recursive_5fgroup_5ftag',['recursive_group_tag',['../namespacetag.html#a190dd220f8248370fa8b2f492dce0ffe',1,'tag']]], - ['reduce',['reduce',['../namespaceade.html#a8266683bc19759b285aa18af454d6bbc',1,'ade::reduce()'],['../namespaceead.html#a275163a943d39158a31bb4d8756a51b9',1,'ead::reduce()']]], - ['reduce_5f1d_5fmap',['reduce_1d_map',['../namespaceade.html#a0ad993df72af5b4ebb660e32ccd5ee86',1,'ade']]], - ['reduce_5fgrad',['reduce_grad',['../namespaceead.html#abac42b06ca349173da5340ad9c21d555',1,'ead']]], - ['reduce_5fmap',['reduce_map',['../namespaceade.html#a1930fa4f380973154941ec6743c48ec5',1,'ade::reduce_map()'],['../namespaceead.html#a2a4ad670f80aa2d0f5ac7d6246fd6f2e',1,'ead::reduce_map()']]], - ['reduce_5fsum',['reduce_sum',['../namespaceead.html#a0e94c6e046df21229ab894d41149cfa0',1,'ead']]], - ['reduceoutt',['ReduceOutT',['../namespaceead.html#a2b4d50388fac9ab85319e3b0def59b5b',1,'ead']]], - ['ref_5f',['ref_',['../struct_group.html#acaeea356a198e72b941ed73b386563ed',1,'Group::ref_()'],['../structtag_1_1_tens_key.html#a5f002593f3b75c7a78292a98d73f0b0d',1,'tag::TensKey::ref_()']]], - ['reference_5f',['reference_',['../structopt_1_1_symbol.html#a491d94ed5f671e365984012ce77a069c',1,'opt::Symbol']]], - ['register_5fbuilder',['register_builder',['../namespaceead.html#a207fe1e7b4eba126de1b67baed286ae7',1,'ead']]], - ['registry_5f',['registry_',['../structdbg_1_1_interactive_session.html#a6f5715a68eb3f41223749c1ae8694101',1,'dbg::InteractiveSession::registry_()'],['../structtag_1_1_tag_registry.html#aa0a43a93779cb22de02053d3fa96b347',1,'tag::TagRegistry::registry_()']]], - ['remove_5fall_5fduplicates',['remove_all_duplicates',['../namespaceopt.html#a42486c385f72159c1411aeb991a0a47c',1,'opt']]], - ['remove_5fduplicates',['remove_duplicates',['../namespaceopt.html#adcf72478749d57afeae94ebfde68814e',1,'opt']]], - ['replace_5fparents',['replace_parents',['../namespaceopt.html#a5b10340d6ebbd69f3014a844424ac688',1,'opt']]], - ['request_5fduration_5f',['request_duration_',['../structdbg_1_1_client_config.html#a68d6885c4210cb28b00c455c91f8f909',1,'dbg::ClientConfig']]], - ['requirements_5f',['requirements_',['../structead_1_1_session.html#a44d289b7c19e6f4b52662768a0a8c4c4',1,'ead::Session']]], - ['reverse',['reverse',['../structade_1_1i_coord_map.html#aefa18191949c10d211e16c7d07957f88',1,'ade::iCoordMap::reverse()'],['../structade_1_1_coord_map.html#a729c3bc4daf89f8185d22c199dab88a4',1,'ade::CoordMap::reverse()'],['../structead_1_1_coord_map.html#a6115a4baee1592dae3eff57be0c92ea6',1,'ead::CoordMap::reverse()']]], - ['rmdups_2ecpp',['rmdups.cpp',['../rmdups_8cpp.html',1,'']]], - ['rmdups_2ehpp',['rmdups.hpp',['../rmdups_8hpp.html',1,'']]], - ['roots_5f',['roots_',['../structpbm_1_1_graph_info.html#ad415f1f762db303c520b2f88d8b656c4',1,'pbm::GraphInfo']]], - ['round',['round',['../namespaceead.html#adbfe0695708e636848909677a5730702',1,'ead']]], - ['rules_2emd',['rules.md',['../rules_8md.html',1,'']]], - ['rulescontext',['RulesContext',['../structopt_1_1_rules_context.html',1,'opt']]] -]; diff --git a/docs/search/all_11.html b/docs/search/all_11.html deleted file mode 100644 index b35c8bf0e..000000000 --- a/docs/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_11.js b/docs/search/all_11.js deleted file mode 100644 index 15db7402e..000000000 --- a/docs/search/all_11.js +++ /dev/null @@ -1,68 +0,0 @@ -var searchData= -[ - ['save',['save',['../structpbm_1_1_graph_saver.html#a4adc0412df712a75b1aecc1846ead430',1,'pbm::GraphSaver']]], - ['save_2ehpp',['save.hpp',['../save_8hpp.html',1,'']]], - ['save_5fcoorder',['save_coorder',['../structead_1_1_e_a_d_saver.html#a280dae3aef034c38a35f26ec67a4c1dd',1,'ead::EADSaver::save_coorder()'],['../structpbm_1_1i_saver.html#ada31f4e14147dc5ad211035d026d3017',1,'pbm::iSaver::save_coorder()']]], - ['save_5fdata',['save_data',['../structpbm_1_1_graph_saver.html#af4a4f0936cafb9cf19a17dfb3949efde',1,'pbm::GraphSaver']]], - ['save_5fleaf',['save_leaf',['../structead_1_1_e_a_d_saver.html#ac512e1b9654cb224fe90fed667538ec9',1,'ead::EADSaver::save_leaf()'],['../structpbm_1_1i_saver.html#aaca6cba63f17eb3d8d687edd9811e3fa',1,'pbm::iSaver::save_leaf()']]], - ['save_5fshaper',['save_shaper',['../structead_1_1_e_a_d_saver.html#a14a83536ef5cf15d8b9d63e8fa76615f',1,'ead::EADSaver::save_shaper()'],['../structpbm_1_1i_saver.html#a1f8a32969dcb33173932b3966382c6f2',1,'pbm::iSaver::save_shaper()']]], - ['saver_5f',['saver_',['../structpbm_1_1_graph_saver.html#af810671efe6177d2e4fc27abed65813c',1,'pbm::GraphSaver']]], - ['scalar',['SCALAR',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75aa5cab2e5396fa71f27366f731881a982',1,'opt::SCALAR()'],['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3ba7efbb6cac96595e63e8fa171bde1eb68',1,'SCALAR(): def.h']]], - ['scalar_5f',['scalar_',['../structead_1_1_scalar_convr.html#a644e836b5eaf4c5e0ce7d3e439a6d8da',1,'ead::ScalarConvr::scalar_()'],['../struct_subgraph.html#a709ac00c627381823a8d5c6ce258fd74',1,'Subgraph::scalar_()']]], - ['scalarconvr',['ScalarConvr',['../structead_1_1_scalar_convr.html',1,'ead::ScalarConvr< T >'],['../structead_1_1_scalar_convr.html#af641034f44c901e8d7428b3841448e14',1,'ead::ScalarConvr::ScalarConvr()']]], - ['scalarize_5f',['scalarize_',['../structopt_1_1_matcher.html#a0d2a437469665ffaf52b234f8180d328',1,'opt::Matcher']]], - ['scalars_5f',['scalars_',['../structopt_1_1_seg_v_args.html#a8eae2b4197d1d98b54a92315453b51de',1,'opt::SegVArgs']]], - ['segvargs',['SegVArgs',['../structopt_1_1_seg_v_args.html',1,'opt']]], - ['select',['select',['../namespaceead.html#abb6fe9924b5a618c6205ecd2f5776fb5',1,'ead']]], - ['sequential_5fjobs_5f',['sequential_jobs_',['../structdbg_1_1_graph_emitter_client.html#ae7fb55a3ddb3424f4ef80df766eddd6b',1,'dbg::GraphEmitterClient']]], - ['serialize_2ehpp',['serialize.hpp',['../serialize_8hpp.html',1,'']]], - ['sess_5f',['sess_',['../structdbg_1_1_interactive_session.html#a260ec45d945c43d3d701e338b462e2ad',1,'dbg::InteractiveSession']]], - ['sess_5fid_5f',['sess_id_',['../structdbg_1_1_interactive_session.html#ac2872b2785f43fb25e0300f68f25d922',1,'dbg::InteractiveSession']]], - ['session',['Session',['../structead_1_1_session.html',1,'ead']]], - ['session_2ehpp',['session.hpp',['../dbg_2grpc_2session_8hpp.html',1,'(Global Namespace)'],['../ead_2session_8hpp.html',1,'(Global Namespace)']]], - ['set_5flabelled',['set_labelled',['../structpbm_1_1_pathed_tens.html#a2752eaf099d564b6fca95df9dfcda777',1,'pbm::PathedTens::set_labelled(StringsT path, ade::TensptrT tens)'],['../structpbm_1_1_pathed_tens.html#a7b8f2299d16fcf3e1af3b2b78b198cf3',1,'pbm::PathedTens::set_labelled(StringsT::iterator path_begin, StringsT::iterator path_end, ade::TensptrT tens)']]], - ['sgraphptrt',['SgraphptrT',['../namespacetag.html#a799daa4d02d6030d2815541ca8148442',1,'tag']]], - ['shape',['Shape',['../structade_1_1_shape.html',1,'ade::Shape'],['../structade_1_1_shape.html#a75d3e1cea374e9aa648fac6b4cadbb04',1,'ade::Shape::Shape(void)'],['../structade_1_1_shape.html#a30248491a0ecde17ae698ff6419917c6',1,'ade::Shape::Shape(std::vector< DimT > dims)'],['../structade_1_1_shape.html#a4f965312d8df445063305ea750220b3d',1,'ade::Shape::Shape(const Shape &other)=default'],['../structade_1_1_shape.html#ab5dd96f6f468e8b17e66e94ec22a9b41',1,'ade::Shape::Shape(Shape &&other)'],['../structade_1_1_func_arg.html#a189e187f3d8a65ea9426b40ca980c2c9',1,'ade::FuncArg::shape()'],['../structade_1_1_functor.html#a00c3cbc202d5c94ab9a2fa2270e3a688',1,'ade::Functor::shape()'],['../structade_1_1i_tensor.html#a782c626a29501f974532905657c8d66b',1,'ade::iTensor::shape()'],['../structead_1_1_func_arg.html#a4d65dcb32a5a17feb521ae3266ab577e',1,'ead::FuncArg::shape()'],['../structead_1_1_functor.html#a320d3e31eddb68598285b835dd177f31',1,'ead::Functor::shape()'],['../structead_1_1i_leaf.html#ad9b29c9c19aaa524def3e11b25d939db',1,'ead::iLeaf::shape()'],['../structead_1_1i_node.html#a87bb7df12b81a143fcc77544209dc011',1,'ead::iNode::shape()']]], - ['shape_2ecpp',['shape.cpp',['../shape_8cpp.html',1,'']]], - ['shape_2ehpp',['shape.hpp',['../shape_8hpp.html',1,'']]], - ['shape_5f',['shape_',['../structade_1_1_functor.html#a99fbfe6298c8fea43e632ea75bf68973',1,'ade::Functor::shape_()'],['../struct_graph_emitter_impl_1_1_node.html#a7697ceb4d9083b1355328bc7d1de5420',1,'GraphEmitterImpl::Node::shape_()'],['../structead_1_1_functor.html#a08742ded550e11f608f810319132aa8c',1,'ead::Functor::shape_()'],['../structead_1_1i_leaf.html#a57a3e92dd3c2097fae2bec09c0174182',1,'ead::iLeaf::shape_()'],['../structead_1_1_op_arg.html#acd3c36ad5064ca4abc9920e9263ccf4e',1,'ead::OpArg::shape_()']]], - ['shape_5fconvert',['shape_convert',['../namespaceead.html#a3a7fab6f3fdb81404805e3dc8aae2047',1,'ead']]], - ['shaper_5f',['shaper_',['../structade_1_1_func_arg.html#ae6274a8217d8c583899d096731d44891',1,'ade::FuncArg::shaper_()'],['../struct_graph_emitter_impl_1_1_edge.html#a02b103e555a65a74ec5c8741c69fda83',1,'GraphEmitterImpl::Edge::shaper_()'],['../structead_1_1_func_arg.html#a12b0aef4de13a59a3a2575645e5546b5',1,'ead::FuncArg::shaper_()'],['../structead_1_1_builder_arg.html#a461db70893a0835236ebb94f48586298',1,'ead::BuilderArg::shaper_()'],['../structopt_1_1_cand_arg.html#ad14eac35a88e5bc96663ba76a5e42534',1,'opt::CandArg::shaper_()'],['../structopt_1_1_voter_arg.html#a3994680773420f8948ba9f452178a52f',1,'opt::VoterArg::shaper_()'],['../struct_arg.html#aae44ba002042e3fdd5cccb8b6711d596',1,'Arg::shaper_()']]], - ['shaperize',['shaperize',['../structead_1_1_converter_builder.html#a836c7845f5a138ee6292e176d83adcb2',1,'ead::ConverterBuilder::shaperize()'],['../structopt_1_1i_converter_builder.html#a3529b654307e6971dc7cf91cac920890',1,'opt::iConverterBuilder::shaperize()']]], - ['shapet',['ShapeT',['../namespaceade.html#ae85a1831aeb0b2b43c3730301cbaec30',1,'ade']]], - ['showshape_5f',['showshape_',['../struct_pretty_equation.html#ad2a0130cedb1cddd2fecaaceaf332bf2',1,'PrettyEquation::showshape_()'],['../struct_c_s_v_equation.html#a7d8694b119898b5a1a41343a54457675',1,'CSVEquation::showshape_()']]], - ['sigmoid',['sigmoid',['../namespaceead.html#a622fa13086169584c2a28dabb11f5ca0',1,'ead']]], - ['sigmoid_5fgrad',['sigmoid_grad',['../namespaceead.html#a9b4ac8fb00f70530ddc1cbf3506313b8',1,'ead']]], - ['sin',['sin',['../namespaceead.html#ac763d3ee825349c13f893a0a9bbf0eee',1,'ead']]], - ['size',['size',['../structopt_1_1_seg_v_args.html#afd46de7c887464ecfb1a7482500c465d',1,'opt::SegVArgs']]], - ['sizet',['SizeT',['../structead_1_1_size_t.html',1,'ead']]], - ['slice',['slice',['../namespaceead.html#aee082fcad74faf79411b69b784966a83',1,'ead']]], - ['sort_5fvargs',['sort_vargs',['../namespaceopt.html#a82042ef61fa117e6043258fad6d3f3e0',1,'opt']]], - ['source_5f',['source_',['../struct_conversion.html#adaf67dbd28c968bde529a491ab8e2f15',1,'Conversion']]], - ['sqrt',['sqrt',['../namespaceead.html#af38aa9cdb5497816b00841aafd3fa0da',1,'ead']]], - ['square',['square',['../namespaceead.html#ab178565824fe7ad714708beb0db21b2d',1,'ead']]], - ['stat',['stat',['../structpbm_1_1_graph_saver.html#a332322e0e0bc21b3924b51ccfa490aed',1,'pbm::GraphSaver']]], - ['stat_5f',['stat_',['../structead_1_1_session.html#a3a0015ba5ec1b64074902c26fb2905c1',1,'ead::Session']]], - ['statement',['Statement',['../struct_statement.html',1,'Statement'],['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899a24a370d8aa13b62e0e1af648e6073044',1,'STATEMENT(): def.h']]], - ['statement_5frecursive_5ffree',['statement_recursive_free',['../def_8h.html#a5eb3733fc9892fdf3295f911ab815aa5',1,'def.h']]], - ['statements_5ffree',['statements_free',['../def_8h.html#aa5db2e5bd68548686b769026540ff669',1,'def.h']]], - ['stats_2ecpp',['stats.cpp',['../stats_8cpp.html',1,'']]], - ['stats_2ehpp',['stats.hpp',['../stats_8hpp.html',1,'']]], - ['stmt_5ftype',['STMT_TYPE',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0',1,'def.h']]], - ['stop',['stop',['../structdbg_1_1_interactive_session.html#aeba1a7f96134d320eda0aad9e9fa8827',1,'dbg::InteractiveSession']]], - ['stream_2ecpp',['stream.cpp',['../stream_8cpp.html',1,'']]], - ['stream_5fduration_5f',['stream_duration_',['../structdbg_1_1_client_config.html#abc7106be41bff8a0cd14060c6e728b77',1,'dbg::ClientConfig']]], - ['stringst',['StringsT',['../namespacepbm.html#a786a0ff59fd4c78d1e89d85fdd9e18b9',1,'pbm']]], - ['stub_5f',['stub_',['../structdbg_1_1_graph_emitter_client.html#a7419edf952445a577f4fc969c3cd3881',1,'dbg::GraphEmitterClient::stub_()'],['../structdbg_1_1_interactive_session.html#ae618f5fb29a0d401b83c8f1bbc4d6384',1,'dbg::InteractiveSession::stub_()']]], - ['sub',['sub',['../namespaceead.html#a3f6e594d3a97892742c8ebf7142f41a8',1,'ead']]], - ['subgraph',['Subgraph',['../struct_subgraph.html',1,'Subgraph'],['../structtag_1_1_subgraph.html',1,'tag::Subgraph'],['../structtag_1_1_subgraph.html#a50654962fb29dfc2020671f8ed001532',1,'tag::Subgraph::Subgraph()']]], - ['subgraph_5f',['subgraph_',['../struct_arg.html#a9ec966245875382456e3963bbf832431',1,'Arg']]], - ['subgraph_5frecursive_5ffree',['subgraph_recursive_free',['../def_8h.html#abd24793f19c71815eda01fce4827d734',1,'def.h']]], - ['subgraph_5ftype',['SUBGRAPH_TYPE',['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3b',1,'def.h']]], - ['subgraphassocst',['SubgraphAssocsT',['../namespacetag.html#ac2f24f29bddead334851d7de69798871',1,'tag']]], - ['subgraphst',['SubgraphsT',['../namespacetag.html#a33ee08663a9b9fd39bfc61dcf47604fa',1,'tag']]], - ['symbol',['Symbol',['../structopt_1_1_symbol.html',1,'opt']]], - ['symbol_5fdef',['SYMBOL_DEF',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a956a8ae3d7691567516700fa0910737d',1,'def.h']]], - ['symbolhash',['SymbolHash',['../structopt_1_1_symbol_hash.html',1,'opt']]], - ['symbols_5f',['symbols_',['../structopt_1_1_rules_context.html#a42b1753f4ab513ad5a4032c0ab096448',1,'opt::RulesContext']]] -]; diff --git a/docs/search/all_12.html b/docs/search/all_12.html deleted file mode 100644 index fd265245b..000000000 --- a/docs/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_12.js b/docs/search/all_12.js deleted file mode 100644 index 0cceffba6..000000000 --- a/docs/search/all_12.js +++ /dev/null @@ -1,55 +0,0 @@ -var searchData= -[ - ['tenncor',['Tenncor',['../index.html',1,'']]], - ['tag',['tag',['../namespacetag.html',1,'']]], - ['tag_2ecpp',['tag.cpp',['../tag_8cpp.html',1,'']]], - ['tag_2ehpp',['tag.hpp',['../tag_8hpp.html',1,'']]], - ['tag_5f',['tag_',['../struct_group.html#a45cb8d93da9c4cd39716b5f683452c31',1,'Group']]], - ['tag_5fid',['tag_id',['../structtag_1_1_group_tag.html#ab0e230388213b2894b67a1f17a2726d9',1,'tag::GroupTag::tag_id()'],['../structtag_1_1_prop_tag.html#a2e89ad78d0103508a1a22283c3757b3f',1,'tag::PropTag::tag_id()'],['../structtag_1_1i_tag.html#af374ac0bd33246450ba8b8fe029e8222',1,'tag::iTag::tag_id()']]], - ['tag_5fid_5f',['tag_id_',['../structtag_1_1_group_tag.html#ade8a1254d6779558bb278b03996915c1',1,'tag::GroupTag::tag_id_()'],['../structtag_1_1_prop_tag.html#a9ded5999e8e7086ac0442548fda7c993',1,'tag::PropTag::tag_id_()']]], - ['tag_5fnode_5ftype',['tag_node_type',['../namespacedbg.html#a1ad32dbde86ce488ab8728e4be7ca693',1,'dbg']]], - ['tag_5freg_5f',['tag_reg_',['../structtag_1_1_group_registry.html#ac50eae63eb1cd6b49080477a5fcf2d0b',1,'tag::GroupRegistry::tag_reg_()'],['../structtag_1_1_property_registry.html#ad419eafc76287387c7f4562ba184696d',1,'tag::PropertyRegistry::tag_reg_()']]], - ['tag_5fstr_5fkey',['tag_str_key',['../namespacedbg.html#acc1229f84db46962e4cd8258a42ccbef',1,'dbg']]], - ['tagcollective',['TagCollective',['../structtag_1_1_tag_collective.html',1,'tag::TagCollective'],['../structtag_1_1_tag_collective.html#ae6e513a6b74bdccc23b100fa3f41e7c2',1,'tag::TagCollective::TagCollective(void)=default'],['../structtag_1_1_tag_collective.html#a0e09d7ef987552ddcf654a0432f3c02e',1,'tag::TagCollective::TagCollective(TagCollective &&other)']]], - ['tagptrt',['TagptrT',['../namespacetag.html#afc9a6249e41256c44b77accfebc7b8d7',1,'tag']]], - ['tagregistry',['TagRegistry',['../structtag_1_1_tag_registry.html',1,'tag']]], - ['tagrepst',['TagRepsT',['../namespacetag.html#ac049e8dda273046c337417103805d260',1,'tag']]], - ['tags_5f',['tags_',['../struct_graph_emitter_impl_1_1_node.html#a35e1332a950243f603d5d25182cabc46',1,'GraphEmitterImpl::Node::tags_()'],['../structtag_1_1_tag_collective.html#a45f14552504d872c2f87586e50025a1e',1,'tag::TagCollective::tags_()']]], - ['tail_5f',['tail_',['../struct_num_list.html#a1989b00d4d2ce52492ac55877b5085c3',1,'NumList::tail_()'],['../struct_ptr_list.html#af0ff1b9b9c3ba6762a5ceb43ff211832',1,'PtrList::tail_()']]], - ['tan',['tan',['../namespaceead.html#a011a1b2f6656f2dc145aa7c761fa9c2d',1,'ead']]], - ['tanh',['tanh',['../namespaceead.html#a2b1a3b72e262aecf6302d23147e225c3',1,'ead']]], - ['target_5f',['target_',['../structade_1_1_path_finder.html#ade3a284e63e52e2cf2ea395e9a512207',1,'ade::PathFinder']]], - ['template',['template',['../namespacetemplate.html',1,'']]], - ['template_2epy',['template.py',['../template_8py.html',1,'']]], - ['tens_5f',['tens_',['../structpbm_1_1_pathed_tens.html#a637a31b5c0382eea4e431bc37765fcdc',1,'pbm::PathedTens::tens_()'],['../structpbm_1_1_graph_info.html#ab272d0e997a381b95f1988cbf6edac36',1,'pbm::GraphInfo::tens_()']]], - ['tens_5fto_5fmatmap',['tens_to_matmap',['../namespaceead.html#addf851de2d1ef37c044346e91d45b27e',1,'ead']]], - ['tens_5fto_5ftensmap',['tens_to_tensmap',['../namespaceead.html#a9b680a69478b60259c8df5cce7142b33',1,'ead']]], - ['tenskey',['TensKey',['../structtag_1_1_tens_key.html',1,'tag::TensKey'],['../structtag_1_1_tens_key.html#a57f5b519e0251cd82813b17a7b77c1e1',1,'tag::TensKey::TensKey(ade::TensrefT tens)'],['../structtag_1_1_tens_key.html#a447c15bef91e648a72a679590b713d59',1,'tag::TensKey::TensKey(ade::iTensor *tens)'],['../structtag_1_1_tens_key.html#adfe52dd8a46cf238d7c7dc98565cec62',1,'tag::TensKey::TensKey(const ade::iTensor *tens)']]], - ['tenskeyhash',['TensKeyHash',['../structtag_1_1_tens_key_hash.html',1,'tag']]], - ['tensmap_5fto_5fmatmap',['tensmap_to_matmap',['../namespaceead.html#a48d1b586ff981dda2e3d3cfd998f4885',1,'ead']]], - ['tensmapt',['TensMapT',['../namespaceead.html#a9bcd8d5e06e2e0f4e7f11f316dbbc3b7',1,'ead']]], - ['tensor_2ehpp',['tensor.hpp',['../tensor_8hpp.html',1,'']]], - ['tensor_5f',['tensor_',['../structade_1_1_func_arg.html#a726efc0b14782597b951b54819c88d9b',1,'ade::FuncArg::tensor_()'],['../structopt_1_1_cand_arg.html#ac8c4e833c941450f50e279d0f3a5c7d6',1,'opt::CandArg::tensor_()']]], - ['tensorbase_5f',['tensorbase_',['../structead_1_1_eigen_tens_op.html#a2cbd8821e76024dd8d7facb5c078d40e',1,'ead::EigenTensOp']]], - ['tensort',['TensorT',['../namespaceead.html#a5ba9c7a56044f2edf8061bba74702e65',1,'ead']]], - ['tensptrt',['TensptrT',['../namespaceade.html#aceac6eb9293c8b2001737f3b26667993',1,'ade']]], - ['tensreft',['TensrefT',['../namespaceade.html#a0cd5d0a139b258e530ac3140bc7ccbb1',1,'ade']]], - ['tenssett',['TensSetT',['../namespaceead.html#aff90e1546478c326db915993e541d4a0',1,'ead::TensSetT()'],['../namespacetag.html#addf439ead4f6f407bc96336c93f7567c',1,'tag::TensSetT()']]], - ['tenst',['TensT',['../namespaceade.html#ab4db19108073a8a4dc5b8cb6aa85ad42',1,'ade::TensT()'],['../namespacepbm.html#a8fdfbc53d17d97799b9bf964dddccced',1,'pbm::TensT()']]], - ['to_5fargs',['to_args',['../namespaceade.html#a5d1ecf1bbfdd240df4b5b5f1f516a14b',1,'ade']]], - ['to_5fnode',['to_node',['../structead_1_1_node_converters.html#a086239d80d6458d7c150f358d809d756',1,'ead::NodeConverters']]], - ['to_5fstream',['to_stream',['../struct_c_s_v_equation.html#a4090e11c35dee348a54d148964e19416',1,'CSVEquation']]], - ['to_5fstream_5f',['to_stream_',['../struct_pretty_tree.html#ac5426949bc1f8afee0a52a80dd6cc8f2',1,'PrettyTree']]], - ['to_5fstring',['to_string',['../structade_1_1i_coord_map.html#a1303dc91fea22702ba403732ba25227f',1,'ade::iCoordMap::to_string()'],['../structade_1_1_coord_map.html#a35bd718362918b31a1f0f2a86c2a3c3b',1,'ade::CoordMap::to_string()'],['../structade_1_1_functor.html#a4503e570f95a289825384be36689be9a',1,'ade::Functor::to_string()'],['../structade_1_1i_tensor.html#a01138fc6bce780fcd4b4e495ca050fce',1,'ade::iTensor::to_string()'],['../structade_1_1_shape.html#a92348dfc2c555cae7d1d42a48f59bd6d',1,'ade::Shape::to_string()'],['../structead_1_1_constant.html#aca4a38253b029052ddee905d5b54b413',1,'ead::Constant::to_string()'],['../structead_1_1_coord_map.html#a3715b7b1d10d510f7151a0030a1372ce',1,'ead::CoordMap::to_string()'],['../structead_1_1_functor.html#a85b2391934227fe0e04a6fb9261f7c3c',1,'ead::Functor::to_string()'],['../structead_1_1_scalar_convr.html#a28ea281f57278c1f20dbf96e8325b8f7',1,'ead::ScalarConvr::to_string()'],['../structead_1_1_any_convr.html#a2cf04fdc9cd89c61bd7bcf486dd4a0ba',1,'ead::AnyConvr::to_string()'],['../structead_1_1_func_convr.html#a53a70b1a9f3113c70f3c7b57302247e7',1,'ead::FuncConvr::to_string()'],['../structead_1_1_group_convr.html#a16b3be6544c2b868cea4a90ee89212e5',1,'ead::GroupConvr::to_string()'],['../structead_1_1_variable.html#a190c05ccfe0b41c5fbf7b1c84bca330b',1,'ead::Variable::to_string()'],['../structopt_1_1i_converter.html#a4afeaa790ebe8ec50ee3353a6aa99b1e',1,'opt::iConverter::to_string()'],['../namespaceade.html#adf0ae4c17a6835d771a3e8e1502f9ad6',1,'ade::to_string()'],['../namespaceopt.html#ac970dc5d6e5dee60c06931dbbf0e8d21',1,'opt::to_string()']]], - ['track',['track',['../structdbg_1_1_interactive_session.html#afe0a26dcce85231ed7b8dff50abf2cb4',1,'dbg::InteractiveSession::track()'],['../structead_1_1i_session.html#a9eb6d1e722cf3b308bb81ac6a2b16bac',1,'ead::iSession::track()'],['../structead_1_1_session.html#aa52df8690a41caa1afc07b770e77039b',1,'ead::Session::track()']]], - ['track_5fowners',['track_owners',['../namespaceade.html#a52b49963a902c80984ac8247abdef055',1,'ade']]], - ['tracked_5f',['tracked_',['../structead_1_1_session.html#a55f62907f74db7beb6ecd37549cb92d5',1,'ead::Session']]], - ['traveler_2ecpp',['traveler.cpp',['../traveler_8cpp.html',1,'']]], - ['traveler_2ehpp',['traveler.hpp',['../traveler_8hpp.html',1,'']]], - ['traverser_5f',['traverser_',['../struct_pretty_tree.html#a5d0af76976c4af9df6018337a25a949a',1,'PrettyTree']]], - ['tree_2ehpp',['tree.hpp',['../tree_8hpp.html',1,'']]], - ['type_5f',['type_',['../structopt_1_1_symbol.html#a9c0cb2bfc96161b4bd27c66f2e86e12e',1,'opt::Symbol::type_()'],['../structopt_1_1_voter_arg.html#a9a4bf202dbc95cc72d403cd19cad4976',1,'opt::VoterArg::type_()'],['../struct_subgraph.html#a21ca32aa177d0d16e9715f928ae08a78',1,'Subgraph::type_()'],['../struct_statement.html#a852b46e62a7977a2dc0df63103da0d77',1,'Statement::type_()'],['../struct_ptr_list.html#ad1e31dd216f80ce8b055de2049f07ccf',1,'PtrList::type_()']]], - ['type_5fcode',['type_code',['../structade_1_1i_data.html#a82fcc81f250c65c6d51849db2a39dbfe',1,'ade::iData::type_code()'],['../structead_1_1_functor.html#a3d5417f064f7930d308e0f4c6f5af986',1,'ead::Functor::type_code()'],['../structead_1_1i_leaf.html#a048e25c90ae0d58c897c7ac76fd03567',1,'ead::iLeaf::type_code()']]], - ['type_5flabel',['type_label',['../structade_1_1i_data.html#ab9257870f91c7898e75cf9746ab120df',1,'ade::iData::type_label()'],['../structead_1_1_functor.html#ad8d9e9b89f8bbbb65584c8daf383a525',1,'ead::Functor::type_label()'],['../structead_1_1i_leaf.html#af4978cc829bbb88c1da4620f02598f16',1,'ead::iLeaf::type_label()']]], - ['typedata_5fto_5farray',['typedata_to_array',['../namespacepyead.html#a66e75bf12201fc347cb5b5edeeed81ec',1,'pyead']]] -]; diff --git a/docs/search/all_13.html b/docs/search/all_13.html deleted file mode 100644 index 04f66e2fe..000000000 --- a/docs/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_13.js b/docs/search/all_13.js deleted file mode 100644 index e5506edb4..000000000 --- a/docs/search/all_13.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['unif',['unif',['../namespaceead.html#a1d811040e6873d4b24107644325b5854',1,'ead']]], - ['unif_5fgen',['unif_gen',['../namespaceead.html#a0825892810780328b4908b21458762c9',1,'ead::unif_gen(const T &a, const T &b)'],['../namespaceead.html#a234da556606c6cd2596ba0bfc02c34f3',1,'ead::unif_gen(T a, T b)']]], - ['uninitialize',['uninitialize',['../structead_1_1_functor.html#ac84b9ba44ff0d19c8534fffbf6c5c7c2',1,'ead::Functor']]], - ['update',['update',['../structade_1_1i_operable_func.html#a7d62bff87fa70aeb87b5a598102a54cc',1,'ade::iOperableFunc::update()'],['../structdbg_1_1_interactive_session.html#a551a74148628ba15d384e8f30a525124',1,'dbg::InteractiveSession::update()'],['../structead_1_1_constant_node.html#a3ab0028bdc7b081949cf9287b1cff02e',1,'ead::ConstantNode::update()'],['../structead_1_1_functor.html#a2334ce2784155f68dda7969b4bca416c',1,'ead::Functor::update()'],['../structead_1_1_functor_node.html#aac638e0a6d43910fc804b90371f7f7b2',1,'ead::FunctorNode::update()'],['../structead_1_1i_node.html#ac561b6999afeedc384fbd89df5a8dd73',1,'ead::iNode::update()'],['../structead_1_1i_session.html#adc979f16a2d03ea7ec4430519a5c9c7f',1,'ead::iSession::update()'],['../structead_1_1_session.html#a10e4ce15709901f6ec94d7a05c7810b7',1,'ead::Session::update()'],['../structead_1_1_variable_node.html#a294a946a51e1fdc2d54e4fdf3908dff9',1,'ead::VariableNode::update()']]], - ['update_5fchild',['update_child',['../structade_1_1_functor.html#a0451b730e978e70f9a17d9750bf1a86d',1,'ade::Functor::update_child()'],['../structade_1_1i_functor.html#a121313edee1dcbfe1a2039670263dc7b',1,'ade::iFunctor::update_child()'],['../structead_1_1_functor.html#a318fc8ebf9f7a588dc2be20d90cb9d6c',1,'ead::Functor::update_child()']]], - ['update_5fgraph',['update_graph',['../structdbg_1_1_graph_emitter_client.html#ae5cdac1d92a7219f4b05fec72a5a838b',1,'dbg::GraphEmitterClient']]], - ['update_5fit_5f',['update_it_',['../structdbg_1_1_interactive_session.html#aac5619e6a7c0d237cd066669e612f0dc',1,'dbg::InteractiveSession']]], - ['update_5fnode_5fdata',['update_node_data',['../structdbg_1_1_graph_emitter_client.html#aa90224c0b466f9434222634f68c5c90a',1,'dbg::GraphEmitterClient']]], - ['update_5ftarget',['update_target',['../structdbg_1_1_interactive_session.html#ade870427e4e82657e932cd12b9a1608b',1,'dbg::InteractiveSession::update_target()'],['../structead_1_1i_session.html#a569a7bf347f81dad30b9f645a247ebe1',1,'ead::iSession::update_target()'],['../structead_1_1_session.html#a865256e1e6c86df96f7eeae46d910907',1,'ead::Session::update_target()']]], - ['updategraph',['UpdateGraph',['../struct_graph_emitter_impl.html#a2cfb36501bd3fafb84e9f99f1c80ca4e',1,'GraphEmitterImpl']]], - ['updatenodedata',['UpdateNodeData',['../struct_graph_emitter_impl.html#afa696b4c85a7d080ffce8c0d6e8524f9',1,'GraphEmitterImpl']]], - ['uuid_5fgen_5f',['uuid_gen_',['../structdbg_1_1_interactive_session.html#ab18efc5b35ec80474398fc95e965fc38',1,'dbg::InteractiveSession']]] -]; diff --git a/docs/search/all_14.html b/docs/search/all_14.html deleted file mode 100644 index 285f34bd2..000000000 --- a/docs/search/all_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_14.js b/docs/search/all_14.js deleted file mode 100644 index fb43e5fb3..000000000 --- a/docs/search/all_14.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['val_5f',['val_',['../struct_subgraph.html#aea50bf753ab0c13cb633547957ffa0c3',1,'Subgraph::val_()'],['../struct_statement.html#ab9d41946e5d8a562facf3c39f53a176c',1,'Statement::val_()'],['../struct_num_node.html#aa78cd7f880c42447b190a578926eeb33',1,'NumNode::val_()'],['../struct_ptr_node.html#afd67e41f3a912f15c0f93c27db652c17',1,'PtrNode::val_()'],['../structtag_1_1_tens_key.html#a6ce14a66d03872eb1c53bff08b2caa74',1,'tag::TensKey::val_()']]], - ['var_5f',['var_',['../structead_1_1_variable_node.html#af99f52b62e4249234c2973bbbcfd6301',1,'ead::VariableNode']]], - ['variable',['Variable',['../structead_1_1_variable.html',1,'ead::Variable< T >'],['../structead_1_1_variable.html#a95d27d62b4626ccb79dcad69fcffd952',1,'ead::Variable::Variable(T *data, ade::Shape shape, std::string label)'],['../structead_1_1_variable.html#a518a1ba7d96442d589200c28fc7c54ff',1,'ead::Variable::Variable(const Variable< T > &other)=default'],['../structead_1_1_variable.html#ad7cfafd6adfc668e20073b0532b4776b',1,'ead::Variable::Variable(Variable< T > &&other)=default'],['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a39031ce5df6f91d3778590d6d644b9ea',1,'VARIABLE(): ade_csv.hpp']]], - ['variable_2ehpp',['variable.hpp',['../variable_8hpp.html',1,'']]], - ['variablenode',['VariableNode',['../structead_1_1_variable_node.html',1,'ead::VariableNode< T >'],['../structead_1_1_variable_node.html#a114573f37b0bf88157276e125dcf867a',1,'ead::VariableNode::VariableNode()']]], - ['variadic_5f',['variadic_',['../structead_1_1_group_convr.html#a53b19c23d166b67fd0bf296ee2526b61',1,'ead::GroupConvr::variadic_()'],['../struct_branch.html#a4a08c32938b916d53eef060d35e8f586',1,'Branch::variadic_()'],['../structopt_1_1_variadic_voter.html#ad1eab8226416d090526c5ae1f91bc648',1,'opt::VariadicVoter::variadic_()']]], - ['variadicvoter',['VariadicVoter',['../structopt_1_1_variadic_voter.html',1,'opt::VariadicVoter'],['../structopt_1_1_variadic_voter.html#a596111132de72a05a5d8be2d4b1e5e72',1,'opt::VariadicVoter::VariadicVoter()']]], - ['varptrt',['VarptrT',['../namespaceead.html#a1451e5cadddfff816e2e2b1f43b469b5',1,'ead']]], - ['vector_5fassign',['vector_assign',['../structade_1_1_shape.html#ad84123094695df9886c8cc8f76d4d21e',1,'ade::Shape']]], - ['vectorize',['vectorize',['../namespaceead.html#a1a960c373a79500164308c5c5237160a',1,'ead']]], - ['vert_5fbranch',['vert_branch',['../tree_8hpp.html#ac7f4e72d3a369493e1924fab641b2c2a',1,'tree.hpp']]], - ['visit',['visit',['../structade_1_1i_traveler.html#a65fd050e7a346733f1eacc59eea299b1',1,'ade::iTraveler::visit(iLeaf *leaf)=0'],['../structade_1_1i_traveler.html#a6ae5c7df26de362b580a70928a3096dd',1,'ade::iTraveler::visit(iFunctor *func)=0'],['../structade_1_1_once_traveler.html#a2adc9c10796912946729ee9b928fa4b4',1,'ade::OnceTraveler::visit(iLeaf *leaf) override'],['../structade_1_1_once_traveler.html#ab7e645c1710c7bd1db073c46d837dafc',1,'ade::OnceTraveler::visit(iFunctor *func) override'],['../structade_1_1_graph_stat.html#ab3376f6cde9c0d483a32ff63632acbc9',1,'ade::GraphStat::visit(iLeaf *leaf) override'],['../structade_1_1_graph_stat.html#af8a2799b9d659d088ae7a32815dd15fb',1,'ade::GraphStat::visit(iFunctor *func) override'],['../structade_1_1_path_finder.html#a56fd6fb9ab097926addcbb91e83ad778',1,'ade::PathFinder::visit(iLeaf *leaf) override'],['../structade_1_1_path_finder.html#a57a63c9dcad0c13df7af259622c9350b',1,'ade::PathFinder::visit(iFunctor *func) override'],['../structade_1_1_parent_finder.html#a2b76a5eb1fd617c061b4bdf16843938f',1,'ade::ParentFinder::visit(iLeaf *leaf) override'],['../structade_1_1_parent_finder.html#a9d16f3731fd8b69e231d5af30e8679b1',1,'ade::ParentFinder::visit(iFunctor *func) override'],['../struct_c_s_v_equation.html#a81b44fd9adfcd74b513c76b765338273',1,'CSVEquation::visit(ade::iLeaf *leaf) override'],['../struct_c_s_v_equation.html#a782d78f9817c7aa354e13fd7967b5d65',1,'CSVEquation::visit(ade::iFunctor *func) override'],['../structopt_1_1_matcher.html#a56afdc8fa0e990fd73f28121420d8239',1,'opt::Matcher::visit(ade::iLeaf *leaf) override'],['../structopt_1_1_matcher.html#aa8d492d2aeb88ead7c6d8bd7f5b2ed32',1,'opt::Matcher::visit(ade::iFunctor *func) override'],['../structpbm_1_1_graph_saver.html#a8092b1d128a4cc598ee37416cf9ff3e2',1,'pbm::GraphSaver::visit(ade::iLeaf *leaf) override'],['../structpbm_1_1_graph_saver.html#a096ff5ccecabb1584830715240454f4e',1,'pbm::GraphSaver::visit(ade::iFunctor *func) override'],['../structtag_1_1_subgraph.html#aa43d9d88ff77af19ebe9bb1c1346099e',1,'tag::Subgraph::visit(ade::iLeaf *leaf) override'],['../structtag_1_1_subgraph.html#afb5873f32d3ba8d40f034c8b49e9cf7c',1,'tag::Subgraph::visit(ade::iFunctor *func) override']]], - ['visit_5ffunc',['visit_func',['../structade_1_1_once_traveler.html#ab5525147afc93284c5dc0fbf2c4d44b0',1,'ade::OnceTraveler']]], - ['visit_5fleaf',['visit_leaf',['../structade_1_1_once_traveler.html#af912a123939911b19b301af391218e0a',1,'ade::OnceTraveler']]], - ['visited_5f',['visited_',['../structade_1_1_once_traveler.html#af6782e674d9cf230b039d82e070d337e',1,'ade::OnceTraveler::visited_()'],['../structpbm_1_1_graph_saver.html#a1904087cc32f31e16619e6e1de8ca75f',1,'pbm::GraphSaver::visited_()']]], - ['voter_2ehpp',['voter.hpp',['../voter_8hpp.html',1,'']]], - ['voterarg',['VoterArg',['../structopt_1_1_voter_arg.html',1,'opt::VoterArg'],['../structopt_1_1_voter_arg.html#a18da605db6859feedda52fd2908c7c8a',1,'opt::VoterArg::VoterArg()']]], - ['voterargst',['VoterArgsT',['../namespaceopt.html#adf3ffa45c46a2277d45cb2e2c159a7fe',1,'opt']]], - ['voterpool',['VoterPool',['../structopt_1_1_voter_pool.html',1,'opt']]], - ['voters_5f',['voters_',['../structopt_1_1_matcher.html#ae942b0004f814490505906ca821a78f8',1,'opt::Matcher::voters_()'],['../structopt_1_1_opt_ctx.html#a25caf2c6daeeb1b88873bddf13ad9132',1,'opt::OptCtx::voters_()']]], - ['votptrt',['VotptrT',['../namespaceopt.html#a16dab447400162efdad40dad769938d4',1,'opt']]] -]; diff --git a/docs/search/all_15.html b/docs/search/all_15.html deleted file mode 100644 index 0ed74e012..000000000 --- a/docs/search/all_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_15.js b/docs/search/all_15.js deleted file mode 100644 index 0311cf265..000000000 --- a/docs/search/all_15.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['_7eiconverter',['~iConverter',['../structopt_1_1i_converter.html#a934a4aeecbfa33329ded300d48edcc90',1,'opt::iConverter']]], - ['_7eiconverterbuilder',['~iConverterBuilder',['../structopt_1_1i_converter_builder.html#a7ef9b562d90dbefa70a353862a6b6a3d',1,'opt::iConverterBuilder']]], - ['_7eicoordmap',['~iCoordMap',['../structade_1_1i_coord_map.html#a4e8f4d22d68fbf9512f97bfb4d317009',1,'ade::iCoordMap']]], - ['_7eidata',['~iData',['../structade_1_1i_data.html#a066353626db599d549d0fb4d5ab7589d',1,'ade::iData']]], - ['_7eieigen',['~iEigen',['../structead_1_1i_eigen.html#af380100ef38b78f8370c9a96a2bd0f6a',1,'ead::iEigen']]], - ['_7eifunctor',['~iFunctor',['../structade_1_1i_functor.html#a9f5aebb693faea7cc5a822ca403f40c0',1,'ade::iFunctor']]], - ['_7eigradientbuilder',['~iGradientBuilder',['../structade_1_1i_gradient_builder.html#a099e3bf0f646b3da65bd566812261a8a',1,'ade::iGradientBuilder']]], - ['_7eileaf',['~iLeaf',['../structade_1_1i_leaf.html#a3aac6caf3028d56c722a8938f7b5ee71',1,'ade::iLeaf::~iLeaf()'],['../structead_1_1i_leaf.html#a35f51ea6df7c838536ac81ed99bfc210',1,'ead::iLeaf::~iLeaf()']]], - ['_7einode',['~iNode',['../structead_1_1i_node.html#ab9fbcdf0af11a55022dc501a80963fdb',1,'ead::iNode']]], - ['_7eioperablefunc',['~iOperableFunc',['../structade_1_1i_operable_func.html#a04e4bbebb371646563081b0738a85f67',1,'ade::iOperableFunc']]], - ['_7eisession',['~iSession',['../structead_1_1i_session.html#abdfa7282cbfcaa7c76c79a8c561bbe04',1,'ead::iSession']]], - ['_7eitag',['~iTag',['../structtag_1_1i_tag.html#a56bcbb355744938085c000d9d96491b1',1,'tag::iTag']]], - ['_7eitensor',['~iTensor',['../structade_1_1i_tensor.html#a1eb974b967ef2da732ee074e73631342',1,'ade::iTensor']]], - ['_7eitraveler',['~iTraveler',['../structade_1_1i_traveler.html#af8279cb7fbe1363298287f4e2061254a',1,'ade::iTraveler']]], - ['_7eivoter',['~iVoter',['../structopt_1_1i_voter.html#aaf2505ff1b23f19eed593d721b73db36',1,'opt::iVoter']]], - ['_7eoncetraveler',['~OnceTraveler',['../structade_1_1_once_traveler.html#aae9cb5b0173743bafb69b142c81813dd',1,'ade::OnceTraveler']]], - ['_7epathedtens',['~PathedTens',['../structpbm_1_1_pathed_tens.html#ae4d37d286dfcb6dc4891acab5166d740',1,'pbm::PathedTens']]] -]; diff --git a/docs/search/all_2.html b/docs/search/all_2.html deleted file mode 100644 index 2f17735ef..000000000 --- a/docs/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_2.js b/docs/search/all_2.js deleted file mode 100644 index 20e4a1acf..000000000 --- a/docs/search/all_2.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['beautify_5fgroups',['beautify_groups',['../namespacetag.html#a60139f3d71faad8153bf0a24f818c80e',1,'tag']]], - ['begin',['begin',['../structade_1_1_shape.html#ac5bcad1a815356a3623978f9608abf50',1,'ade::Shape::begin(void)'],['../structade_1_1_shape.html#ad677c4671e1b24bedaf1736bfddc1dac',1,'ade::Shape::begin(void) const']]], - ['bijective_5f',['bijective_',['../structead_1_1_coord_map.html#a1eb46bf30055179d9a5b3a86d8ef48e5',1,'ead::CoordMap']]], - ['branch',['Branch',['../struct_branch.html',1,'Branch'],['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3bad9b20a9207fb2cd3021b9eb0b7c6fe5e',1,'BRANCH(): def.h']]], - ['branch_5f',['branch_',['../struct_subgraph.html#a9577756df81a792e06cc7adeb9be7427',1,'Subgraph']]], - ['branch_5flength_5f',['branch_length_',['../struct_pretty_tree.html#a47becca7692e9630bba1234dcdded85c',1,'PrettyTree']]], - ['branches_5f',['branches_',['../structopt_1_1_seg_v_args.html#a6286bd6e23198ef71cc235192db24f60',1,'opt::SegVArgs::branches_()'],['../structopt_1_1_voter_pool.html#a743ebf82707e1ee2efd4f33868388b3f',1,'opt::VoterPool::branches_()']]], - ['build',['build',['../structead_1_1_scalar_convr.html#ac09b032c4e0723d7efa7ae18ea8a8838',1,'ead::ScalarConvr::build()'],['../structead_1_1_any_convr.html#a34e6c2a470aaa4542858f6d898eb5d06',1,'ead::AnyConvr::build()'],['../structead_1_1_func_convr.html#a262bafe2c53db304d5b305db4d581882',1,'ead::FuncConvr::build()'],['../structead_1_1_group_convr.html#ad9c7797af4e7e29082bc263cbed896e4',1,'ead::GroupConvr::build()'],['../structead_1_1_converter_builder.html#ae03599d3d98ad248560ccf1331946026',1,'ead::ConverterBuilder::build()'],['../structopt_1_1i_converter.html#a4aed636cb3dfb28d30cef31362696d32',1,'opt::iConverter::build()'],['../structopt_1_1i_converter_builder.html#a2bfdea93718b822237f54ae4ee76e1c9',1,'opt::iConverterBuilder::build()']]], - ['build_5fcconv',['build_cconv',['../structead_1_1_converter_builder.html#ab01a1304db803da584e12c809c55605b',1,'ead::ConverterBuilder::build_cconv()'],['../structopt_1_1i_converter_builder.html#a109b8bf8282bf0ff5ad1765b5fcc3e52',1,'opt::iConverterBuilder::build_cconv()']]], - ['build_5ftemplate',['build_template',['../namespacetemplate.html#ad97e0669d2fc38b861c79c2cf6b87921',1,'template']]], - ['builderarg',['BuilderArg',['../structead_1_1_builder_arg.html',1,'ead::BuilderArg'],['../structead_1_1_builder_arg.html#a84b78c5642bd7e2f97d044ee41834de7',1,'ead::BuilderArg::BuilderArg()']]], - ['builderargst',['BuilderArgsT',['../namespaceead.html#ad4e749f733e8f8c103a941723c8f1d97',1,'ead']]], - ['builders_5f',['builders_',['../structead_1_1_node_converters.html#af3ee716170365ee4be686f4ac2aa2926',1,'ead::NodeConverters']]] -]; diff --git a/docs/search/all_3.html b/docs/search/all_3.html deleted file mode 100644 index a3e6f7dbb..000000000 --- a/docs/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_3.js b/docs/search/all_3.js deleted file mode 100644 index 8611300d5..000000000 --- a/docs/search/all_3.js +++ /dev/null @@ -1,67 +0,0 @@ -var searchData= -[ - ['c2pshape',['c2pshape',['../namespacepyead.html#a2a71ae2a75ca20b0be914d1eeac5ab5c',1,'pyead']]], - ['cached_5ffunc',['CACHED_FUNC',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a2863c64ae18d085219d24a53418b0c68',1,'ade_csv.hpp']]], - ['cand_5ftype',['CAND_TYPE',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75',1,'opt']]], - ['candarg',['CandArg',['../structopt_1_1_cand_arg.html',1,'opt']]], - ['candargst',['CandArgsT',['../namespaceopt.html#abe088a56f57ea4ec30237b5aad94a7c5',1,'opt']]], - ['candidate_2ehpp',['candidate.hpp',['../candidate_8hpp.html',1,'']]], - ['candidates_5f',['candidates_',['../structopt_1_1_cand_arg.html#aca5646d51023b449fb5b23da3cc149d7',1,'opt::CandArg::candidates_()'],['../structopt_1_1_matcher.html#aa3804ec677cfee22185fe92627e8a341',1,'opt::Matcher::candidates_()']]], - ['candst',['CandsT',['../namespaceopt.html#ac27cf0ca8a59c842f6736b669ddab492',1,'opt']]], - ['cdimt',['CDimT',['../namespaceade.html#acdc2096f51fe9d232e19a346fc95d5e7',1,'ade']]], - ['cfg_5f',['cfg_',['../structdbg_1_1_graph_emitter_client.html#a0ea47f63debde5ba173e7abb0ca3f231',1,'dbg::GraphEmitterClient']]], - ['chain_5frule',['chain_rule',['../structade_1_1i_gradient_builder.html#a0be45dfc304950c34ee21dd262887cc7',1,'ade::iGradientBuilder::chain_rule()'],['../structead_1_1_gradient_builder.html#a2dce59e6ac88e590ea28a1be91f3682d',1,'ead::GradientBuilder::chain_rule()']]], - ['child_5f',['child_',['../structdbg_1_1_edge_info.html#aca2e6f53260486e961908a96bde1a816',1,'dbg::EdgeInfo::child_()'],['../struct_c_s_v_equation_1_1_edge.html#a566da224fdbd2e88802ebed28e9ece11',1,'CSVEquation::Edge::child_()']]], - ['child_5fid_5f',['child_id_',['../struct_graph_emitter_impl_1_1_edge.html#a4139ba8e5425436d93d130d40f3859e2',1,'GraphEmitterImpl::Edge']]], - ['children_5f',['children_',['../structpbm_1_1_pathed_tens.html#a4265e683cd1ffeab4b957a101bb93dfb',1,'pbm::PathedTens::children_()'],['../structtag_1_1_subgraph.html#abe793e8144ad3cf81d712a62ec27ce87',1,'tag::Subgraph::children_()']]], - ['clear',['clear',['../structdbg_1_1_graph_emitter_client.html#a979aec91073f6a919356c4008c3c3621',1,'dbg::GraphEmitterClient']]], - ['client_2ehpp',['client.hpp',['../client_8hpp.html',1,'']]], - ['client_5f',['client_',['../structdbg_1_1_interactive_session.html#af959894054e0f96ecc563795e9561792',1,'dbg::InteractiveSession']]], - ['clientconfig',['ClientConfig',['../structdbg_1_1_client_config.html',1,'dbg::ClientConfig'],['../structdbg_1_1_client_config.html#aef1cabacb3cb2f2258aab9459bee3459',1,'dbg::ClientConfig::ClientConfig(void)=default'],['../structdbg_1_1_client_config.html#a53544e72731acfb47e347ec6bb0d3251',1,'dbg::ClientConfig::ClientConfig(std::chrono::duration< int64_t, std::milli > request_duration, std::chrono::duration< int64_t, std::milli > stream_duration)']]], - ['code_5f',['code_',['../structade_1_1_opcode.html#a37bc6502405df1638aa87ba8204f558f',1,'ade::Opcode']]], - ['commhasher',['CommHasher',['../structopt_1_1_comm_hasher.html',1,'opt']]], - ['commutative_5ftag',['commutative_tag',['../namespacetag.html#a87d5b1be905e77f9a527bb187da4bbb8',1,'tag']]], - ['commvoter',['CommVoter',['../structopt_1_1_comm_voter.html',1,'opt::CommVoter'],['../structopt_1_1_comm_voter.html#a3185b0b6ebcb85de14f336f7c5f2f3ef',1,'opt::CommVoter::CommVoter()']]], - ['compatible_5fafter',['compatible_after',['../structade_1_1_shape.html#a18e381848d5ba2a286f4c24894f2595c',1,'ade::Shape']]], - ['compatible_5fbefore',['compatible_before',['../structade_1_1_shape.html#a1509b9d4c6e1834e35f715c20dca2c57',1,'ade::Shape']]], - ['connect',['connect',['../structade_1_1i_coord_map.html#a6ce3ec1fdf4f6a5d12e78a6877a873b7',1,'ade::iCoordMap::connect()'],['../structade_1_1_coord_map.html#aa713ce0d727e6b086ca279d13f401de0',1,'ade::CoordMap::connect()'],['../structead_1_1_coord_map.html#ac35de2d94759073abd83c53bc87c795f',1,'ead::CoordMap::connect()']]], - ['connected_5f',['connected_',['../structdbg_1_1_graph_emitter_client.html#ab9c65d707e61e4000c26e60c9b65ef07',1,'dbg::GraphEmitterClient']]], - ['const',['CONST',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75a57a910804e02bfb580e5dd05c7d3aec9',1,'opt']]], - ['const_5fconv_5f',['const_conv_',['../structopt_1_1_opt_ctx.html#a7aa3765da6f66663e91b3aa04092bda7',1,'opt::OptCtx']]], - ['const_5fiterator',['const_iterator',['../structade_1_1_shape.html#af5d9eb48851f23a0ea928618459da7c7',1,'ade::Shape']]], - ['constant',['Constant',['../structead_1_1_constant.html',1,'ead::Constant< T >'],['../structead_1_1_constant.html#a2151363638c275f18641490a7c0468fb',1,'ead::Constant::Constant(const Constant< T > &other)=delete'],['../structead_1_1_constant.html#a104175b1a7a353fd1ac201f9770784ae',1,'ead::Constant::Constant(Constant< T > &&other)=delete'],['../structead_1_1_constant.html#aa6ebd289ee4324b77dcb9cb3857eff04',1,'ead::Constant::Constant(T *data, ade::Shape shape)']]], - ['constant_2ehpp',['constant.hpp',['../constant_8hpp.html',1,'']]], - ['constantnode',['ConstantNode',['../structead_1_1_constant_node.html',1,'ead::ConstantNode< T >'],['../structead_1_1_constant_node.html#ad9576ce9a0380be496118bb00d6b046b',1,'ead::ConstantNode::ConstantNode()']]], - ['content_5f',['content_',['../structtag_1_1_subgraph.html#af04084c22d5b4f35bf4c28a301091472',1,'tag::Subgraph']]], - ['context',['ContexT',['../namespaceopt.html#aad2b7aa7d628257aa90d3c00252fadb7',1,'opt']]], - ['conversion',['Conversion',['../struct_conversion.html',1,'Conversion'],['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a887fe80282266674d58a6f070e001b1d',1,'CONVERSION(): def.h']]], - ['conversion_5frecursive_5ffree',['conversion_recursive_free',['../def_8h.html#a0fa9276c3ec1c49d8efedb773b2f3077',1,'def.h']]], - ['convert_5fto_5fnode',['convert_to_node',['../namespaceead.html#a39e1958b555bf0e45a6976002180bf1c',1,'ead']]], - ['converterbuilder',['ConverterBuilder',['../structead_1_1_converter_builder.html',1,'ead']]], - ['converts_5f',['converts_',['../structopt_1_1_opt_ctx.html#adcc833ef4e7c82028ce1729985806054',1,'opt::OptCtx']]], - ['convolution',['convolution',['../namespaceead.html#a83db51ca93bca5003c405a6034a0fd4d',1,'ead']]], - ['convolution_5fimage_5fgrad',['convolution_image_grad',['../namespaceead.html#adf070e815b80d0c3db38fcf63e808427',1,'ead']]], - ['convolution_5fkernel_5fgrad',['convolution_kernel_grad',['../namespaceead.html#a0f454f8d79227bae3a802d4ed6fa2141',1,'ead']]], - ['convptrt',['ConvptrT',['../namespaceopt.html#a9309debb487ca336943cfc15c5e54f11',1,'opt']]], - ['convrt',['CONVRT',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75add7ad5cb827b2955c8e47010ddf03be5',1,'opt']]], - ['coord_2ecpp',['coord.cpp',['../ade_2src_2coord_8cpp.html',1,'(Global Namespace)'],['../ead_2src_2coord_8cpp.html',1,'(Global Namespace)']]], - ['coord_2ehpp',['coord.hpp',['../ade_2coord_8hpp.html',1,'(Global Namespace)'],['../ead_2coord_8hpp.html',1,'(Global Namespace)']]], - ['coorder_5f',['coorder_',['../structade_1_1_func_arg.html#a816fdce0468ebd56faa5413969fe68cd',1,'ade::FuncArg::coorder_()'],['../struct_graph_emitter_impl_1_1_edge.html#a5ad5be2ccfb46a7331a8895b3c6a43af',1,'GraphEmitterImpl::Edge::coorder_()'],['../struct_c_s_v_equation_1_1_edge.html#a51865ad41c86bc7d3b5e75fc7d75a04b',1,'CSVEquation::Edge::coorder_()'],['../structead_1_1_func_arg.html#a2044aedf583e08338aa803a91421d821',1,'ead::FuncArg::coorder_()'],['../structead_1_1_op_arg.html#abaa6b56e0f56d28d22c4be7fe612f2f9',1,'ead::OpArg::coorder_()'],['../structead_1_1_builder_arg.html#ab7a4cd32649acf59e55cf760043fc1a0',1,'ead::BuilderArg::coorder_()'],['../structopt_1_1_cand_arg.html#af4282fdcbed674811e5e86e732d942e2',1,'opt::CandArg::coorder_()'],['../structopt_1_1_voter_arg.html#a9b86027a2936a333260baf2f962ff896',1,'opt::VoterArg::coorder_()'],['../struct_arg.html#ab5e011bc5dd2c97ccfa6f70426b61718',1,'Arg::coorder_()']]], - ['coorderize',['coorderize',['../structead_1_1_converter_builder.html#a69684cd238de19ab3ee0bfbe35e1b87f',1,'ead::ConverterBuilder::coorderize()'],['../structopt_1_1i_converter_builder.html#ab3fd40706d6bb6a4ebc8cf2b7fe977a0',1,'opt::iConverterBuilder::coorderize()'],['../namespaceead.html#ae45d62ba20b2e27b42ba3d2b56eebedb',1,'ead::coorderize()']]], - ['coorders_5f',['coorders_',['../struct_c_s_v_equation.html#ab39250d4e536eeea4f96541378035080',1,'CSVEquation']]], - ['coordinate',['coordinate',['../namespaceade.html#a785be8ee10cd4af039c458e057b32263',1,'ade']]], - ['coordmap',['CoordMap',['../structade_1_1_coord_map.html',1,'ade::CoordMap'],['../structead_1_1_coord_map.html',1,'ead::CoordMap'],['../structade_1_1_coord_map.html#afb5c1dcf8267026e74f1fe3b3997785f',1,'ade::CoordMap::CoordMap()'],['../structead_1_1_coord_map.html#a60884e3a44dba7804524c1583f65b4b3',1,'ead::CoordMap::CoordMap()']]], - ['coordptrt',['CoordptrT',['../namespaceade.html#ae79e5f62f19677e24148be5a1f8b1afd',1,'ade::CoordptrT()'],['../namespaceead.html#aac572ca05022d1196f622f6e652f404a',1,'ead::CoordptrT()']]], - ['coordt',['CoordT',['../namespaceade.html#a2abdde771b6a0fd0afdafaed7ab00c48',1,'ade']]], - ['cos',['cos',['../namespaceead.html#a193a7df66d2d2630b6643c69bc01ef4e',1,'ead']]], - ['create_5fgraph',['create_graph',['../structdbg_1_1_graph_emitter_client.html#a00e2a752fca0c627efcae184f73f07c0',1,'dbg::GraphEmitterClient']]], - ['creategraph',['CreateGraph',['../struct_graph_emitter_impl.html#a3b92f029f9dbd09e2e2f9a823b669895',1,'GraphEmitterImpl']]], - ['cst_5f',['cst_',['../structead_1_1_constant_node.html#abc353df03c3710ded3310bd8aff2d2df',1,'ead::ConstantNode']]], - ['cstconvertf',['CstConvertF',['../namespaceopt.html#a1defc2ba52cbd29514de443d558a52c6',1,'opt']]], - ['csv_5fto_5fpng',['csv_to_png',['../namespacecsv__to__png.html',1,'csv_to_png'],['../namespacecsv__to__png.html#ab71631d71a986f4cbdbafe10eff3680d',1,'csv_to_png.csv_to_png()']]], - ['csv_5fto_5fpng_2epy',['csv_to_png.py',['../csv__to__png_8py.html',1,'']]], - ['csvequation',['CSVEquation',['../struct_c_s_v_equation.html',1,'CSVEquation'],['../struct_c_s_v_equation.html#a273be56d825ba9ef2b427f5ed81a7e83',1,'CSVEquation::CSVEquation()']]], - ['ctxst',['CtxsT',['../namespaceopt.html#ae033afaaacf8beefe1f58ee429c559aa',1,'opt']]], - ['ctxvalt',['CtxValT',['../namespaceopt.html#ad185bcd4c426ac08ee69fe7f8e968979',1,'opt']]], - ['cube',['cube',['../namespaceead.html#ad05090f76cc3fc52d71f277d95a45f0f',1,'ead']]] -]; diff --git a/docs/search/all_4.html b/docs/search/all_4.html deleted file mode 100644 index 6452295dc..000000000 --- a/docs/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_4.js b/docs/search/all_4.js deleted file mode 100644 index 051ea10bb..000000000 --- a/docs/search/all_4.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['d',['d',['../structead_1_1_size_t.html#a11639b09e5e72ad82ee99fd3feccd79c',1,'ead::SizeT']]], - ['data',['data',['../structade_1_1i_data.html#aee8fdf4137569691381d0714f8b81255',1,'ade::iData::data(void)=0'],['../structade_1_1i_data.html#a874c76e7fc49331a9292a4ab59dc10e1',1,'ade::iData::data(void) const =0'],['../structead_1_1_constant_node.html#aa012ca0866d2432410e63bfdcca6854d',1,'ead::ConstantNode::data()'],['../structead_1_1_functor.html#aa20fe744212bde904397163324bbb8a8',1,'ead::Functor::data(void) override'],['../structead_1_1_functor.html#a9b0b0b611cf8636987e1ab0fd10dde41',1,'ead::Functor::data(void) const override'],['../structead_1_1_functor_node.html#a0294cc202606e23a884d198b5af88291',1,'ead::FunctorNode::data()'],['../structead_1_1i_leaf.html#a0d71e11f67386639f4f13c810092b05a',1,'ead::iLeaf::data(void) override'],['../structead_1_1i_leaf.html#a668fb373ad6399ddb7ccef7a7ea0aa51',1,'ead::iLeaf::data(void) const override'],['../structead_1_1i_node.html#ab98c0fac375371d64bf09947e526e848',1,'ead::iNode::data()'],['../structead_1_1_variable_node.html#abc21dc6e58adfdf155681a74a0a310c4',1,'ead::VariableNode::data()']]], - ['data_2ehpp',['data.hpp',['../data_8hpp.html',1,'']]], - ['data_5f',['data_',['../structead_1_1_eigen_tens_op.html#a4e24cbfe1951069d1079db5d85b712c5',1,'ead::EigenTensOp::data_()'],['../structead_1_1_eigen_mat_op.html#a4686898691564e953ec5381b495cf644',1,'ead::EigenMatOp::data_()'],['../structead_1_1i_leaf.html#aff680597b1a7e671427fc8c06179b4c4',1,'ead::iLeaf::data_()'],['../structead_1_1_op_arg.html#ad9917eab8754f016e0ee4535dec4b486',1,'ead::OpArg::data_()']]], - ['data_5fsync_5finterval',['data_sync_interval',['../namespacedbg.html#a07f38263b65f2d0dc5c3e50acfedc71e',1,'dbg']]], - ['datalimit_5f',['datalimit_',['../struct_pretty_tensor.html#aa9f13ddcae6a546c21a73fa636d5fc32',1,'PrettyTensor']]], - ['dbg',['dbg',['../namespacedbg.html',1,'']]], - ['dbg_5fsession_5fhpp',['DBG_SESSION_HPP',['../dbg_2grpc_2session_8hpp.html#a6a6c4cb73d88d6cdf35289d7efad9e43',1,'session.hpp']]], - ['dbg_5fwrapper',['dbg_wrapper',['../namespacedbg__wrapper.html',1,'']]], - ['dbg_5fwrapper_2epy',['dbg_wrapper.py',['../dbg__wrapper_8py.html',1,'']]], - ['def_2ec',['def.c',['../def_8c.html',1,'']]], - ['def_2eh',['def.h',['../def_8h.html',1,'']]], - ['default',['default',['../namespacecsv__to__png.html#acf337991348f4b26a7d60cdcc8b461c3',1,'csv_to_png']]], - ['derive',['derive',['../structade_1_1i_gradient_builder.html#a3ac2ff8731d7b130df20050ee3ed0a68',1,'ade::iGradientBuilder::derive()'],['../namespaceead.html#a77639acd784f50c29e75e1ae93213bd0',1,'ead::derive()']]], - ['dest_5f',['dest_',['../struct_conversion.html#abd22c1dc06d1d2895a4d3a704d85478c',1,'Conversion']]], - ['determinant',['determinant',['../namespaceade.html#aecb7b9f5d18655665d51992ee73d3e43',1,'ade']]], - ['dim_5fcopy',['dim_copy',['../namespaceead_1_1internal.html#a55516717263395348d93245fcd6f667c',1,'ead::internal']]], - ['dimensionst',['DimensionsT',['../namespaceead.html#aafd88e301e71d371854132d1dd37f06a',1,'ead']]], - ['dims_5f',['dims_',['../structade_1_1_shape.html#a0ed417376c158cf66d6803dd88262446',1,'ade::Shape']]], - ['dimt',['DimT',['../namespaceade.html#a82682490754c8b3ba8409170d9869500',1,'ade']]], - ['div',['div',['../namespaceead.html#a603649aa34499c5f571482150c38ee89',1,'ead']]], - ['drawer_5f',['drawer_',['../struct_pretty_equation.html#acb1e69a87e7d374a5070dd31a4a5eae2',1,'PrettyEquation']]], - ['dtypes',['dtypes',['../namespacedtypes.html',1,'']]], - ['dtypes_2epy',['dtypes.py',['../dtypes_8py.html',1,'']]], - ['dtypesplugin',['DTypesPlugin',['../classdtypes_1_1_d_types_plugin.html',1,'dtypes']]], - ['debugger_20_28dbg_29',['Debugger (DBG)',['../md_dbg__r_e_a_d_m_e__d_b_g.html',1,'']]] -]; diff --git a/docs/search/all_5.html b/docs/search/all_5.html deleted file mode 100644 index e59e1d536..000000000 --- a/docs/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_5.js b/docs/search/all_5.js deleted file mode 100644 index ccbd44a68..000000000 --- a/docs/search/all_5.js +++ /dev/null @@ -1,30 +0,0 @@ -var searchData= -[ - ['ead',['ead',['../namespaceead.html',1,'']]], - ['ead_2ecpp',['ead.cpp',['../ead_8cpp.html',1,'']]], - ['ead_2ehpp',['ead.hpp',['../ead_8hpp.html',1,'']]], - ['eadloader',['EADLoader',['../structead_1_1_e_a_d_loader.html',1,'ead']]], - ['eadsaver',['EADSaver',['../structead_1_1_e_a_d_saver.html',1,'ead']]], - ['edge',['Edge',['../struct_graph_emitter_impl_1_1_edge.html',1,'GraphEmitterImpl::Edge'],['../struct_c_s_v_equation_1_1_edge.html',1,'CSVEquation::Edge']]], - ['edge_5flabel_5f',['edge_label_',['../struct_c_s_v_equation_1_1_edge.html#a1189aa1950816beb4796d794316ff56f',1,'CSVEquation::Edge']]], - ['edge_5flabel_5ffmt',['edge_label_fmt',['../namespacedbg.html#a60e744ab67b98f4a24e5defe0d90e1c2',1,'dbg']]], - ['edgeinfo',['EdgeInfo',['../structdbg_1_1_edge_info.html',1,'dbg']]], - ['edgeinfohash',['EdgeInfoHash',['../structdbg_1_1_edge_info_hash.html',1,'dbg']]], - ['edges_5f',['edges_',['../structdbg_1_1_interactive_session.html#a13dc483479f4b45f3c6f172f638488ce',1,'dbg::InteractiveSession::edges_()'],['../struct_graph_emitter_impl.html#a4a856d16c147eefb31056b8086b643e1',1,'GraphEmitterImpl::edges_()'],['../struct_c_s_v_equation.html#a05bd7b5dabb52c85d317612045833ad5',1,'CSVEquation::edges_()']]], - ['eigen_2ecpp',['eigen.cpp',['../eigen_8cpp.html',1,'']]], - ['eigen_2ehpp',['eigen.hpp',['../eigen_8hpp.html',1,'']]], - ['eigenmatop',['EigenMatOp',['../structead_1_1_eigen_mat_op.html',1,'ead::EigenMatOp< T, EigenSource, EigenArgs >'],['../structead_1_1_eigen_mat_op.html#a40ec92bb3321f493f8baf423436d561f',1,'ead::EigenMatOp::EigenMatOp()']]], - ['eigenptrt',['EigenptrT',['../namespaceead.html#a3ea4a5ddf09b2f98a3aa203fb6edaf70',1,'ead']]], - ['eigentensop',['EigenTensOp',['../structead_1_1_eigen_tens_op.html',1,'ead::EigenTensOp< T, EigenSource, EigenArgs >'],['../structead_1_1_eigen_tens_op.html#ab225f3d24bdd1ee4514fc1196f2455e5',1,'ead::EigenTensOp::EigenTensOp()']]], - ['emplace',['emplace',['../structopt_1_1i_voter.html#a0d2584849d54d10af40675bafc5aa072',1,'opt::iVoter::emplace()'],['../structopt_1_1_ordr_voter.html#aad4b49f22b7ee38c143a007a06b29584',1,'opt::OrdrVoter::emplace()'],['../structopt_1_1_comm_voter.html#a2e74260ddafdd546d5ecbf4352dbe89c',1,'opt::CommVoter::emplace()'],['../structopt_1_1_variadic_voter.html#a681f3ec955ceefedc9412d57ab428425',1,'opt::VariadicVoter::emplace()']]], - ['end',['end',['../structade_1_1_shape.html#a85700f185320892b5dde0474c88fd33c',1,'ade::Shape::end(void)'],['../structade_1_1_shape.html#a8df8b0d454942a59441c8adcebdc176a',1,'ade::Shape::end(void) const']]], - ['enginet',['EngineT',['../namespaceead.html#aad5a8ad7506541238ad6a4a13ed9e5b9',1,'ead']]], - ['eq',['eq',['../namespaceead.html#a2eba8cc1a701098927bb668fd923f553',1,'ead']]], - ['exp',['exp',['../namespaceead.html#aab849f4595164d20f014d4c1c177b052',1,'ead']]], - ['expired',['expired',['../structtag_1_1_tens_key.html#a8d490729aad7574a4a590f4b376927bc',1,'tag::TensKey']]], - ['extend',['extend',['../namespaceade.html#a81038de1791ea646379829c0b884e855',1,'ade::extend()'],['../namespaceead.html#a9c07ab787e2e6570d28f7c70bdbaaaa7',1,'ead::extend()']]], - ['extend_5fgrad',['extend_grad',['../namespaceead.html#a7027ae743dfaf2faf4abb8180a19fa9f',1,'ead']]], - ['extend_5fmap',['extend_map',['../namespaceade.html#a412292f5b0fc59e97067f20f7a3a7472',1,'ade::extend_map()'],['../namespaceead.html#a4c1bb3a6c6786d1848b6e5766b0b286f',1,'ead::extend_map()']]], - ['internal',['internal',['../namespaceead_1_1internal.html',1,'ead']]], - ['ead_20_28eigen_2dade_29',['EAD (Eigen-ADE)',['../md_ead__r_e_a_d_m_e__e_a_d.html',1,'']]] -]; diff --git a/docs/search/all_6.html b/docs/search/all_6.html deleted file mode 100644 index f75a754e9..000000000 --- a/docs/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_6.js b/docs/search/all_6.js deleted file mode 100644 index dbd175b6a..000000000 --- a/docs/search/all_6.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['filter_5fhead',['filter_head',['../namespacetag.html#ad69a8c01b57b92a62b370bec143f106c',1,'tag']]], - ['flip',['flip',['../namespaceade.html#af18a7a81026deb0cac924914a1f5a0c0',1,'ade']]], - ['flip_5fmap',['flip_map',['../namespaceade.html#a141f823de42b05265505c4ddffbe377b',1,'ade']]], - ['forward',['forward',['../structade_1_1i_coord_map.html#abc27f1c79994569812647d63401e208d',1,'ade::iCoordMap::forward()'],['../structade_1_1_coord_map.html#a179711b98f6980bd4e5e8f592fccb0c6',1,'ade::CoordMap::forward()'],['../structead_1_1_coord_map.html#a3b7c08ed2ff52929eb09af234686c8b8',1,'ead::CoordMap::forward()']]], - ['func_5f',['func_',['../struct_c_s_v_equation_1_1_edge.html#a4f3fb5902af0c4e1d249c6b2e22ac278',1,'CSVEquation::Edge::func_()'],['../structead_1_1_functor_node.html#aa77ef1d7341b2ae1165571370de66506',1,'ead::FunctorNode::func_()']]], - ['funcarg',['FuncArg',['../structead_1_1_func_arg.html',1,'ead::FuncArg< T >'],['../structade_1_1_func_arg.html',1,'ade::FuncArg'],['../structade_1_1_func_arg.html#a5b402e888ff1825d682239ab7b6881e7',1,'ade::FuncArg::FuncArg(TensptrT tensor, CoordptrT shaper)'],['../structade_1_1_func_arg.html#ae8a6b8bb1a4160cd56d09a040dcac22b',1,'ade::FuncArg::FuncArg(TensptrT tensor, CoordptrT shaper, bool map_io, CoordptrT coorder)'],['../structead_1_1_func_arg.html#a6f5807799eb69e654fb2e3af9a5e7fc4',1,'ead::FuncArg::FuncArg()']]], - ['funcarg_2ecpp',['funcarg.cpp',['../funcarg_8cpp.html',1,'']]], - ['funcarg_2ehpp',['funcarg.hpp',['../ade_2funcarg_8hpp.html',1,'(Global Namespace)'],['../ead_2funcarg_8hpp.html',1,'(Global Namespace)']]], - ['funcconvr',['FuncConvr',['../structead_1_1_func_convr.html',1,'ead::FuncConvr< T >'],['../structead_1_1_func_convr.html#a6c45115ca42f8cb8d5fcf2f3b6ff534c',1,'ead::FuncConvr::FuncConvr()']]], - ['funcptrt',['FuncptrT',['../namespaceade.html#a769e13e66ecc72f0d142a85dc7395591',1,'ade']]], - ['funcs_5f',['funcs_',['../structade_1_1_height_matrix.html#a797c002d2a2ca416d923f22253494399',1,'ade::HeightMatrix::funcs_()'],['../structpbm_1_1_graph_saver.html#a889b990b34164c5e058ed6dfe29435ac',1,'pbm::GraphSaver::funcs_()']]], - ['functor',['Functor',['../structade_1_1_functor.html',1,'ade::Functor'],['../structead_1_1_functor.html',1,'ead::Functor< T >'],['../structade_1_1_functor.html#a50b66b702948e0c4f40acb4ab9dd623d',1,'ade::Functor::Functor(Opcode opcode, Shape shape, ArgsT args)'],['../structade_1_1_functor.html#af892aba37262c64ec01d6156f3342e38',1,'ade::Functor::Functor(const Functor &other)=default'],['../structade_1_1_functor.html#a08759b547e2005ce0eb16c7ea488951f',1,'ade::Functor::Functor(Functor &&other)=default'],['../structead_1_1_functor.html#a0a07466c94b01bf43a46acf23097633c',1,'ead::Functor::Functor(const Functor< T > &other)=delete'],['../structead_1_1_functor.html#a2bef78d86db9164cf8e39e3f332bee79',1,'ead::Functor::Functor(ade::Opcode opcode, ade::Shape shape, ade::ArgsT args)'],['../structead_1_1_functor.html#a2a7f2dbee3eb9fb44e76526c173e80f2',1,'ead::Functor::Functor(Functor< T > &&other)=default'],['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a59318967319c9027fe12f098f854ef37',1,'FUNCTOR(): ade_csv.hpp']]], - ['functor_2ehpp',['functor.hpp',['../ade_2functor_8hpp.html',1,'(Global Namespace)'],['../ead_2functor_8hpp.html',1,'(Global Namespace)']]], - ['functornode',['FunctorNode',['../structead_1_1_functor_node.html',1,'ead::FunctorNode< T >'],['../structead_1_1_functor_node.html#a5db0e6a012a136ef27cb3b191a252ab3',1,'ead::FunctorNode::FunctorNode()']]], - ['fwd_5f',['fwd_',['../structade_1_1_coord_map.html#ad0bb539056fd8f8acce96109ff41f6da',1,'ade::CoordMap']]] -]; diff --git a/docs/search/all_7.html b/docs/search/all_7.html deleted file mode 100644 index 88acd9466..000000000 --- a/docs/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_7.js b/docs/search/all_7.js deleted file mode 100644 index 9942f53e7..000000000 --- a/docs/search/all_7.js +++ /dev/null @@ -1,55 +0,0 @@ -var searchData= -[ - ['generate_5fcoorder',['generate_coorder',['../structead_1_1_e_a_d_loader.html#addaba19dd5ff4813e7b130b91deeb8cc',1,'ead::EADLoader::generate_coorder()'],['../structpbm_1_1i_loader.html#a6a12d5a4ae29bba1880d14a0de51d923',1,'pbm::iLoader::generate_coorder()']]], - ['generate_5ffunc',['generate_func',['../structead_1_1_e_a_d_loader.html#a803c175f6d239818b868ee7900827f90',1,'ead::EADLoader::generate_func()'],['../structpbm_1_1i_loader.html#adc256f8b3a450bf750e0e458083baeaf',1,'pbm::iLoader::generate_func()']]], - ['generate_5fleaf',['generate_leaf',['../structead_1_1_e_a_d_loader.html#a0f76982ce2370688459cafa5c149dba7',1,'ead::EADLoader::generate_leaf()'],['../structpbm_1_1i_loader.html#a6328ed884dfafb45f36bc9e113b9de65',1,'pbm::iLoader::generate_leaf()']]], - ['generate_5fshaper',['generate_shaper',['../structead_1_1_e_a_d_loader.html#a35d2f21b3f2567e14c527d05be52f3e7',1,'ead::EADLoader::generate_shaper()'],['../structpbm_1_1i_loader.html#a9b8b503279ed69d6032a8e882ebd13f7',1,'pbm::iLoader::generate_shaper()']]], - ['genf',['GenF',['../namespaceead.html#ad265e95fa887ba847c00105e4697f332',1,'ead']]], - ['get',['get',['../structade_1_1_functor.html#a64dca909ffd6ddc578e352774a05e4da',1,'ade::Functor::get(Opcode opcode, ArgsT args)'],['../structade_1_1_functor.html#af4919bd1040571d3e95fe037366b1af5',1,'ade::Functor::get(const Functor &other)'],['../structade_1_1_functor.html#a6b165cddd9747bb829009a12d4d2b8ef',1,'ade::Functor::get(Functor &&other)'],['../structead_1_1_constant.html#af037e8482e6ef2dcb2c81f71cd22dba1',1,'ead::Constant::get()'],['../structead_1_1_functor.html#a8b5adb9c94668edea1829eee1ffe9f13',1,'ead::Functor::get(ade::Opcode opcode, ArgsT< T > args)'],['../structead_1_1_functor.html#a5c9101174e2ef9d8ecf98601ee0fcb89',1,'ead::Functor::get(Functor< T > &&other)'],['../structead_1_1_variable.html#a318b7a02f8e4e9318bb595a406fcded0',1,'ead::Variable::get(T *ptr, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a6b66566e867b7b42f81a169e12f82ca9',1,'ead::Variable::get(ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a9b51e33d72fd676e523d762211f35c63',1,'ead::Variable::get(T scalar, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#aff960098f751c21a02078c8dcd377e67',1,'ead::Variable::get(std::vector< T > data, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a3abb376cc6927816f10b68c94f457a87',1,'ead::Variable::get(const Variable< T > &other)'],['../structead_1_1_variable.html#a4ea9f7b97ac781c065ea961bc590b1d4',1,'ead::Variable::get(Variable< T > &&other)']]], - ['get_5fchildren',['get_children',['../structade_1_1_functor.html#ab15cc2bb1f427f25b16d78080f5a0572',1,'ade::Functor::get_children()'],['../structade_1_1i_functor.html#a074e2f5304eb5d59e585e480d27f8953',1,'ade::iFunctor::get_children()'],['../structead_1_1_functor.html#ae6167c35b9829f6d2ed9f9a0075c11c4',1,'ead::Functor::get_children()']]], - ['get_5fconst_5fone',['get_const_one',['../structade_1_1i_gradient_builder.html#ae6d798a19cfb9d4b509ce337e2199a93',1,'ade::iGradientBuilder::get_const_one()'],['../structead_1_1_gradient_builder.html#a8be9983bf7925a3b515216b1fdc54f6e',1,'ead::GradientBuilder::get_const_one()']]], - ['get_5fconst_5fzero',['get_const_zero',['../structade_1_1i_gradient_builder.html#a8135ef40f87ea7928ca40694910035f6',1,'ade::iGradientBuilder::get_const_zero()'],['../structead_1_1_gradient_builder.html#abe92b6d7310a92a723ddc2ee489afb27',1,'ead::GradientBuilder::get_const_zero()']]], - ['get_5fcoorder',['get_coorder',['../structade_1_1_func_arg.html#ab5c06f187d8cb2583b518ffda6365dc3',1,'ade::FuncArg::get_coorder()'],['../structead_1_1_func_arg.html#a9a9b1752d173711101c0c6a225648722',1,'ead::FuncArg::get_coorder()']]], - ['get_5fengine',['get_engine',['../namespaceead.html#a4599741f2f5ed160bb373e51ae9bf496',1,'ead']]], - ['get_5fftype_5f',['get_ftype_',['../struct_c_s_v_equation.html#a58a31844c3d8f65e093cceb5e3dc1fce',1,'CSVEquation']]], - ['get_5fgroup_5freg',['get_group_reg',['../namespacetag.html#a8e04df7870f604a8504beb991ff14729',1,'tag']]], - ['get_5flabel',['get_label',['../structead_1_1_variable_node.html#a736506df3e0984a9adef3ba7242c4f75',1,'ead::VariableNode']]], - ['get_5flabelled',['get_labelled',['../structpbm_1_1_pathed_tens.html#add9847212fdfd105531afaa2f8e938c2',1,'pbm::PathedTens::get_labelled(StringsT path) const'],['../structpbm_1_1_pathed_tens.html#a297b28ac518f082ed01b0d0f3f344cd8',1,'pbm::PathedTens::get_labelled(StringsT::iterator path_begin, StringsT::iterator path_end) const']]], - ['get_5fnode',['get_node',['../structead_1_1_func_arg.html#af5bad15611738414d35ad19762d7d288',1,'ead::FuncArg']]], - ['get_5fopcode',['get_opcode',['../structade_1_1_functor.html#a340d59fb5237a9f14ec907221f1c2d26',1,'ade::Functor::get_opcode()'],['../structade_1_1i_functor.html#a7150b4b4697bd99719b6f424b1fd219c',1,'ade::iFunctor::get_opcode()'],['../structead_1_1_functor.html#a6450bffe52ee26c1255efb9abc265461',1,'ead::Functor::get_opcode()']]], - ['get_5fproperty_5freg',['get_property_reg',['../namespacetag.html#a8645c33a6750979e7a7ee65821b58b63',1,'tag']]], - ['get_5fptr',['get_ptr',['../structead_1_1i_eigen.html#a63258dfb7ba3d6f521798938664c3111',1,'ead::iEigen::get_ptr()'],['../structead_1_1_eigen_tens_op.html#aad54d43f98be168eae695cb2d90b5f5e',1,'ead::EigenTensOp::get_ptr()'],['../structead_1_1_eigen_mat_op.html#ad246ab599ebd172e2b6ccf263334fbe4',1,'ead::EigenMatOp::get_ptr()']]], - ['get_5freg',['get_reg',['../namespacetag.html#ad59098e3480c1d395b4b72098a6c0ab7',1,'tag']]], - ['get_5fscalar',['get_scalar',['../structead_1_1_constant.html#ae4962a1c5075fd795fd47b6570dce4e4',1,'ead::Constant']]], - ['get_5fsession_5fid',['get_session_id',['../structdbg_1_1_interactive_session.html#ad38888517811d24cb51337a9c0efa4d5',1,'dbg::InteractiveSession']]], - ['get_5fshape',['get_shape',['../namespaceead.html#abbaf2225cdf1be2a7894587e9deb4094',1,'ead::get_shape(const TensorT< T > &tens)'],['../namespaceead.html#a8f857c575ce071c45444029f06dd545e',1,'ead::get_shape(const TensMapT< T > &tens)']]], - ['get_5fshaper',['get_shaper',['../structade_1_1_func_arg.html#ab8ad50e0a9249daf935880482efbce6b',1,'ade::FuncArg::get_shaper()'],['../structead_1_1_func_arg.html#a1e4dafa139e345351015f254bba4eda6',1,'ead::FuncArg::get_shaper()']]], - ['get_5ftags',['get_tags',['../structtag_1_1_group_tag.html#a7d5da1205a35e24fe169c5195669d95a',1,'tag::GroupTag::get_tags()'],['../structtag_1_1_prop_tag.html#a71b8d072405362061acf497c46b8e559',1,'tag::PropTag::get_tags()'],['../structtag_1_1i_tag.html#ab6fe462fe6b128a7c2519933b126555e',1,'tag::iTag::get_tags()'],['../structtag_1_1_tag_collective.html#a0baed2294016bee286f1045767237122',1,'tag::TagCollective::get_tags()'],['../structtag_1_1_tag_registry.html#a92bc87b5b2203885e60f182394b406da',1,'tag::TagRegistry::get_tags()']]], - ['get_5ftensor',['get_tensor',['../structade_1_1_func_arg.html#ac1b78c0db5f3415f7a2e92c6062342df',1,'ade::FuncArg::get_tensor()'],['../structead_1_1_constant_node.html#a52a4ccce5009b3992808ac43376889f0',1,'ead::ConstantNode::get_tensor()'],['../structead_1_1_func_arg.html#ab8d109f56bf81ef2c3f30bb6728e0c11',1,'ead::FuncArg::get_tensor()'],['../structead_1_1_functor_node.html#a8449d0d0ab12020cd12235d88624f2fa',1,'ead::FunctorNode::get_tensor()'],['../structead_1_1i_node.html#a5534da810e7394b7a1227066089aca8a',1,'ead::iNode::get_tensor()'],['../structead_1_1_variable_node.html#a2cfd210c608ccfa31e1a020669d290d4',1,'ead::VariableNode::get_tensor()']]], - ['gettypef',['GetTypeF',['../ade__csv_8hpp.html#a28a681b652bb0dc99bac8b43bba2e2cb',1,'ade_csv.hpp']]], - ['gid_5f',['gid_',['../struct_graph_emitter_impl.html#ab5b3703a478eef41c866e398730fb6d6',1,'GraphEmitterImpl']]], - ['grad_5fdef_2ehpp',['grad_def.hpp',['../grad__def_8hpp.html',1,'']]], - ['grader_2ehpp',['grader.hpp',['../grader_8hpp.html',1,'']]], - ['gradientbuilder',['GradientBuilder',['../structead_1_1_gradient_builder.html',1,'ead']]], - ['graph_5fto_5fcsvimg',['graph_to_csvimg',['../namespacedbg__wrapper.html#adc10b4628cfe24563cd960299caea32e',1,'dbg_wrapper']]], - ['graphemitterclient',['GraphEmitterClient',['../structdbg_1_1_graph_emitter_client.html',1,'dbg::GraphEmitterClient'],['../structdbg_1_1_graph_emitter_client.html#a040a0c146378d295cea5511f4cb00958',1,'dbg::GraphEmitterClient::GraphEmitterClient()']]], - ['graphemitterimpl',['GraphEmitterImpl',['../struct_graph_emitter_impl.html',1,'']]], - ['graphinfo',['GraphInfo',['../structpbm_1_1_graph_info.html',1,'pbm']]], - ['graphsaver',['GraphSaver',['../structpbm_1_1_graph_saver.html',1,'pbm']]], - ['graphsize_5f',['graphsize_',['../structade_1_1_graph_stat.html#aada9c11ed84364702aa2ac4422af057d',1,'ade::GraphStat']]], - ['graphstat',['GraphStat',['../structade_1_1_graph_stat.html',1,'ade']]], - ['group',['Group',['../struct_group.html',1,'']]], - ['group_2ecpp',['group.cpp',['../group_8cpp.html',1,'']]], - ['group_2ehpp',['group.hpp',['../group_8hpp.html',1,'']]], - ['group_5f',['group_',['../structead_1_1_group_convr.html#a53550d9234f8cdf8db3db7a1932ebc8a',1,'ead::GroupConvr::group_()'],['../structtag_1_1_subgraph.html#a8053868c95b7677366951278d483a5a5',1,'tag::Subgraph::group_()']]], - ['group_5fhead_5f',['group_head_',['../structopt_1_1_matcher.html#a3266c70735f4c4edb57e97f6d5c001e3',1,'opt::Matcher']]], - ['group_5fprefix',['group_prefix',['../namespaceopt.html#a880213957cf570053ec5c49c0fe6556d',1,'opt']]], - ['group_5ftag',['group_tag',['../structtag_1_1_group_registry.html#afdde050d51d5c2e03ca47778e0af1779',1,'tag::GroupRegistry']]], - ['groupconvr',['GroupConvr',['../structead_1_1_group_convr.html',1,'ead::GroupConvr< T >'],['../structead_1_1_group_convr.html#a6d15667b6d0002bbc3f17ae425cb049b',1,'ead::GroupConvr::GroupConvr()']]], - ['groupregistry',['GroupRegistry',['../structtag_1_1_group_registry.html',1,'tag::GroupRegistry'],['../structtag_1_1_group_registry.html#a5ff8741125edf33227400a80fbdddcd8',1,'tag::GroupRegistry::GroupRegistry()']]], - ['groups_5f',['groups_',['../structtag_1_1_group_registry.html#a2b24b3ab82c5ba9fd5f955c8b005b627',1,'tag::GroupRegistry']]], - ['groups_5fkey',['groups_key',['../namespacetag.html#ad4535d497218819b944e949497c4aa29',1,'tag']]], - ['grouptag',['GroupTag',['../structtag_1_1_group_tag.html',1,'tag::GroupTag'],['../structtag_1_1_group_tag.html#a81a71662564f6eb973985a3f43799128',1,'tag::GroupTag::GroupTag()']]], - ['grpc_2ecpp',['grpc.cpp',['../grpc_8cpp.html',1,'']]], - ['gt',['gt',['../namespaceead.html#a14b2e8de30f9f279de9b758fc56dcc5c',1,'ead']]] -]; diff --git a/docs/search/all_8.html b/docs/search/all_8.html deleted file mode 100644 index b74d5fd80..000000000 --- a/docs/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_8.js b/docs/search/all_8.js deleted file mode 100644 index 6f8d14cfc..000000000 --- a/docs/search/all_8.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['has_5fproperty',['has_property',['../structtag_1_1_property_registry.html#a0c5a3cfa7ae978ee7d9c9cd77660355c',1,'tag::PropertyRegistry']]], - ['hash_5fcombine',['hash_combine',['../structopt_1_1_ordr_hasher.html#afa16fed81ca2a2918d6220b419515a80',1,'opt::OrdrHasher']]], - ['hasher_5f',['hasher_',['../structopt_1_1_comm_hasher.html#ad21e3eac1f7a236939cc7110b1f3ed98',1,'opt::CommHasher']]], - ['head_5f',['head_',['../struct_num_list.html#a00536bfb06aab7c733c7e32ce902e24c',1,'NumList::head_()'],['../struct_ptr_list.html#abe044f286dbb5c9634386e87110f4e41',1,'PtrList::head_()']]], - ['health_5fchecker_5f',['health_checker_',['../structdbg_1_1_graph_emitter_client.html#a1317f1772a06b30210189054f382a958',1,'dbg::GraphEmitterClient']]], - ['healthcheck',['HealthCheck',['../struct_graph_emitter_impl.html#a0dad93088c2067ba52d024e7e48b29b4',1,'GraphEmitterImpl']]], - ['heightmatrix',['HeightMatrix',['../structade_1_1_height_matrix.html',1,'ade::HeightMatrix'],['../structade_1_1_height_matrix.html#a6a5bfc118047005beac24d84dc4bb56b',1,'ade::HeightMatrix::HeightMatrix()']]], - ['help',['help',['../namespacecsv__to__png.html#a559aa984c4f3de06d113fed7a4dc73c0',1,'csv_to_png']]], - ['hfunctorst',['HFunctorsT',['../namespaceopt.html#a6f1d9ed513006bb76ffa455e79afdfc0',1,'opt']]] -]; diff --git a/docs/search/all_9.html b/docs/search/all_9.html deleted file mode 100644 index 95e88dd25..000000000 --- a/docs/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_9.js b/docs/search/all_9.js deleted file mode 100644 index f5ec34260..000000000 --- a/docs/search/all_9.js +++ /dev/null @@ -1,53 +0,0 @@ -var searchData= -[ - ['iconverter',['iConverter',['../structopt_1_1i_converter.html',1,'opt']]], - ['iconverter_2ehpp',['iconverter.hpp',['../iconverter_8hpp.html',1,'']]], - ['iconverterbuilder',['iConverterBuilder',['../structopt_1_1i_converter_builder.html',1,'opt']]], - ['icoordmap',['iCoordMap',['../structade_1_1i_coord_map.html',1,'ade']]], - ['id_5f',['id_',['../struct_c_s_v_equation_1_1_node.html#acd46e58a0d1ae621d26d67aaa53f672e',1,'CSVEquation::Node']]], - ['idata',['iData',['../structade_1_1i_data.html',1,'ade']]], - ['idata_2ehpp',['idata.hpp',['../idata_8hpp.html',1,'']]], - ['identity',['identity',['../namespaceade.html#a51de3f8cb4058a56fc0e51a7b7b564c3',1,'ade']]], - ['identity_5fmap',['identity_map',['../namespaceade.html#a417f117d12812d13411a2e306c4a7f70',1,'ade::identity_map()'],['../namespaceead.html#ac90a9cdeaaff8ac9e8be98fcd7135eb3',1,'ead::identity_map()']]], - ['ieigen',['iEigen',['../structead_1_1i_eigen.html',1,'ead']]], - ['ifunctor',['iFunctor',['../structade_1_1i_functor.html',1,'ade']]], - ['ifunctor_2ehpp',['ifunctor.hpp',['../ifunctor_8hpp.html',1,'']]], - ['igradientbuilder',['iGradientBuilder',['../structade_1_1i_gradient_builder.html',1,'ade']]], - ['ileaf',['iLeaf',['../structade_1_1i_leaf.html',1,'ade::iLeaf'],['../structead_1_1i_leaf.html',1,'ead::iLeaf< T >'],['../structead_1_1i_leaf.html#a136d4076405a80eae76a8bff88b7e585',1,'ead::iLeaf::iLeaf()']]], - ['ileaf_2ehpp',['ileaf.hpp',['../ade_2ileaf_8hpp.html',1,'(Global Namespace)'],['../ead_2ileaf_8hpp.html',1,'(Global Namespace)']]], - ['iloader',['iLoader',['../structpbm_1_1i_loader.html',1,'pbm']]], - ['immutable_5ftag',['immutable_tag',['../namespacetag.html#ad9cbcc3428600060081653e38c3c611a',1,'tag']]], - ['immutables_5f',['immutables_',['../structopt_1_1_voter_pool.html#aa2323084992842ead71d30f8b67c0e08',1,'opt::VoterPool']]], - ['immutablest',['ImmutablesT',['../namespaceopt.html#a2715f8fde83ed98c3c68c01981bd7c12',1,'opt']]], - ['index',['index',['../namespaceade.html#ae4b0a59c967fe9699b5b66de3c8fab49',1,'ade']]], - ['indices_5f',['indices_',['../structead_1_1_coord_map.html#a2d64bbfcf49fccfd79dfa132b88257aa',1,'ead::CoordMap']]], - ['initialize',['initialize',['../structead_1_1_functor.html#a908d687c1fb5066f379149439f3e5347',1,'ead::Functor']]], - ['inode',['iNode',['../structead_1_1i_node.html',1,'ead']]], - ['inode_2ehpp',['inode.hpp',['../inode_8hpp.html',1,'']]], - ['inspect',['inspect',['../structopt_1_1i_voter.html#aa0063d0de7125d66b16bfb5111d18b5f',1,'opt::iVoter::inspect()'],['../structopt_1_1_ordr_voter.html#a2a5f1b942c7963be3facbf3fb77f83b3',1,'opt::OrdrVoter::inspect()'],['../structopt_1_1_comm_voter.html#a477b861a5fd5796bbf560531eb01c737',1,'opt::CommVoter::inspect()'],['../structopt_1_1_variadic_voter.html#a4aa1709569d93f8f5e15348e2e490fbb',1,'opt::VariadicVoter::inspect()']]], - ['interactivesession',['InteractiveSession',['../structdbg_1_1_interactive_session.html',1,'dbg::InteractiveSession'],['../structdbg_1_1_interactive_session.html#a0f596deccf30ea9fcdb48fc74fd09092',1,'dbg::InteractiveSession::InteractiveSession(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig client_cfg=ClientConfig(), tag::TagRegistry &registry=tag::get_reg())'],['../structdbg_1_1_interactive_session.html#a33604dc325cde2f7f21f547cafb16c18',1,'dbg::InteractiveSession::InteractiveSession(std::string host, ClientConfig client_cfg=ClientConfig())']]], - ['interm',['INTERM',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75a2136fec4bc854238c15c965fd2672e78',1,'opt']]], - ['inverse',['inverse',['../namespaceade.html#ad9cbea696e35b2eca835de3a246409d0',1,'ade']]], - ['ioperablefunc',['iOperableFunc',['../structade_1_1i_operable_func.html',1,'ade']]], - ['iopfunc_2ehpp',['iopfunc.hpp',['../iopfunc_8hpp.html',1,'']]], - ['is_5f2d',['is_2d',['../namespaceead.html#a10007e976ea08b26dab5f53d4d6a64a3',1,'ead']]], - ['is_5fbig_5fendian',['is_big_endian',['../namespaceead.html#a00787ba51b486ef26e17b45998db1e82',1,'ead']]], - ['is_5fbijective',['is_bijective',['../structade_1_1i_coord_map.html#a072c0cba065ec82893e0f5ab3f543298',1,'ade::iCoordMap::is_bijective()'],['../structade_1_1_coord_map.html#a279588a2420e26c56caf34acb363dddd',1,'ade::CoordMap::is_bijective()'],['../structead_1_1_coord_map.html#a2ebf42ff3d94f11baa93d1326ec1226b',1,'ead::CoordMap::is_bijective()']]], - ['is_5fconnected',['is_connected',['../structdbg_1_1_graph_emitter_client.html#a0e1e390951a6eed4b276317f034d1023',1,'dbg::GraphEmitterClient']]], - ['is_5fconst',['is_const',['../structead_1_1_constant.html#a1363156a444a0983e4a37d15d18f72d4',1,'ead::Constant::is_const()'],['../structead_1_1i_leaf.html#ab685d664b34cbc4d631aef74bc2786d4',1,'ead::iLeaf::is_const()'],['../structead_1_1_variable.html#a2e4f44cbd4ea63b610dc77f3fd432283',1,'ead::Variable::is_const()']]], - ['is_5fequal',['is_equal',['../namespaceopt.html#a95b700d353e5437dbab0ca839bc4f98a',1,'opt::is_equal(ade::CoordptrT a, ade::CoordptrT b)'],['../namespaceopt.html#a769f90cb246dabf273262abdade3d913',1,'opt::is_equal(ade::iLeaf *a, ade::iLeaf *b)'],['../namespaceopt.html#a8023a6147a99d898f27d5a828f6826d7',1,'opt::is_equal(ade::iFunctor *a, ade::iFunctor *b)']]], - ['is_5fgroup_5f',['is_group_',['../struct_branch.html#a0265850333aab95ae1f034de322fe204',1,'Branch::is_group_()'],['../struct_property.html#aa60235e724f7b910c8a278c0138ce11e',1,'Property::is_group_()']]], - ['is_5fidentity',['is_identity',['../namespaceade.html#a6b6c4cd25145a806179fdf02a9402163',1,'ade']]], - ['is_5fscalar',['is_scalar',['../structead_1_1_constant.html#a827aac59b78043b7093eeaaac19980dd',1,'ead::Constant::is_scalar()'],['../namespaceopt.html#a290c1d0101729a984fefa1b4e9e15e07',1,'opt::is_scalar()']]], - ['is_5funinit',['is_uninit',['../structead_1_1_functor.html#a6a3c61c7415c19be772bacdf4d1a6b6a',1,'ead::Functor']]], - ['isaver',['iSaver',['../structpbm_1_1i_saver.html',1,'pbm']]], - ['isession',['iSession',['../structead_1_1i_session.html',1,'ead']]], - ['itag',['iTag',['../structtag_1_1i_tag.html',1,'tag']]], - ['itensor',['iTensor',['../structade_1_1i_tensor.html',1,'ade']]], - ['itensor_2ehpp',['itensor.hpp',['../itensor_8hpp.html',1,'']]], - ['iterator',['iterator',['../structade_1_1_shape.html#a724478494d1b325cc5f16e35d3c72172',1,'ade::Shape']]], - ['itraveler',['iTraveler',['../structade_1_1i_traveler.html',1,'ade']]], - ['ivoter',['iVoter',['../structopt_1_1i_voter.html',1,'opt']]], - ['ivoter_2ecpp',['ivoter.cpp',['../ivoter_8cpp.html',1,'']]], - ['ivoter_2ehpp',['ivoter.hpp',['../ivoter_8hpp.html',1,'']]] -]; diff --git a/docs/search/all_a.html b/docs/search/all_a.html deleted file mode 100644 index 3148a8e51..000000000 --- a/docs/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_a.js b/docs/search/all_a.js deleted file mode 100644 index 41ec7efe6..000000000 --- a/docs/search/all_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['join',['join',['../structdbg_1_1_graph_emitter_client.html#a9abf2fc9f92de79cc6faf9a428609056',1,'dbg::GraphEmitterClient::join()'],['../structdbg_1_1_interactive_session.html#a707c6a647d924b6e82034dc237b5085c',1,'dbg::InteractiveSession::join()'],['../structpbm_1_1_pathed_tens.html#a28fb6ead967a36caf8fa3bb6a752ac2f',1,'pbm::PathedTens::join()']]], - ['join_5fthen_5fstop',['join_then_stop',['../structdbg_1_1_interactive_session.html#a1750d043ef4d86d5548a9fd305cea108',1,'dbg::InteractiveSession']]] -]; diff --git a/docs/search/all_b.html b/docs/search/all_b.html deleted file mode 100644 index f2a3c8d0e..000000000 --- a/docs/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_b.js b/docs/search/all_b.js deleted file mode 100644 index 46f3b488a..000000000 --- a/docs/search/all_b.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['label_5f',['label_',['../structdbg_1_1_edge_info.html#aef8e45abf92014e64c0a8eb6354917fb',1,'dbg::EdgeInfo::label_()'],['../struct_graph_emitter_impl_1_1_edge.html#a2010387621c5b582681f795167add9c0',1,'GraphEmitterImpl::Edge::label_()'],['../struct_c_s_v_equation_1_1_node.html#a88b8528800f93c79a7f8d1dc15d52f91',1,'CSVEquation::Node::label_()'],['../structead_1_1_variable.html#a64a1f8be23a3ec245630fbb2430ef59e',1,'ead::Variable::label_()'],['../structopt_1_1_voter_arg.html#a6b2e2459023c61c4a27cb7556ab74d9a',1,'opt::VoterArg::label_()'],['../struct_branch.html#a46c5f86a8074c0287f4105f94b8bd940',1,'Branch::label_()'],['../struct_property.html#a2ea81549cdff2474a3858d0430320026',1,'Property::label_()'],['../structopt_1_1_ordr_voter.html#a40d5452f483d234e5fb2ada0a4315ee6',1,'opt::OrdrVoter::label_()'],['../structopt_1_1_comm_voter.html#a7bc3f602957a945392063cd24e0a23ee',1,'opt::CommVoter::label_()'],['../structopt_1_1_variadic_voter.html#a63f0cef6cde431e0ad1956ec72551122',1,'opt::VariadicVoter::label_()']]], - ['label_5fdelim',['label_delim',['../ade__csv_8hpp.html#abe66766bd31aecbdbde62e22f2e53b52',1,'ade_csv.hpp']]], - ['label_5flimit',['label_limit',['../namespaceead.html#a26f3aaccd06e1e585408119bda2db44d',1,'ead']]], - ['labels_5f',['labels_',['../struct_pretty_equation.html#a48e82321023511d6d996d143373d62e6',1,'PrettyEquation::labels_()'],['../struct_c_s_v_equation.html#a907bbbcee85d465621531ef43de20451',1,'CSVEquation::labels_()'],['../structtag_1_1_group_tag.html#a8e7be9cd8aad902769c68d61025b5a11',1,'tag::GroupTag::labels_()'],['../structtag_1_1_prop_tag.html#a4af44491ae89b354912d06c3ff184d7f',1,'tag::PropTag::labels_()']]], - ['labelsmapt',['LabelsMapT',['../dbg_2stream_2ade_8hpp.html#a7839363f7778d49f27d87010378e2050',1,'ade.hpp']]], - ['leafptrt',['LeafptrT',['../namespaceade.html#a1bdf3657cc8a95dd974ad6aa36e2230f',1,'ade']]], - ['leaves_5f',['leaves_',['../structade_1_1_height_matrix.html#a90ca063c213023ec930d9b5ea3824a7d',1,'ade::HeightMatrix::leaves_()'],['../structpbm_1_1_graph_saver.html#a018275de799a0dffc764226e5cf01039',1,'pbm::GraphSaver::leaves_()']]], - ['list_2ec',['list.c',['../list_8c.html',1,'']]], - ['list_2eh',['list.h',['../list_8h.html',1,'']]], - ['load_2ehpp',['load.hpp',['../load_8hpp.html',1,'']]], - ['load_5fgraph',['load_graph',['../namespacepbm.html#a0eb7a587fc51c6c771fcb8dfc34fa14d',1,'pbm']]], - ['local_5fderivative',['local_derivative',['../structade_1_1i_gradient_builder.html#a7b85b61f7f97303e9096d4abfc6c3daf',1,'ade::iGradientBuilder::local_derivative()'],['../structead_1_1_gradient_builder.html#a17d5286ea660de65a1954bfc837b44bf',1,'ead::GradientBuilder::local_derivative()']]], - ['log',['log',['../namespaceead.html#adee5b0a9fee0b12f0b4db958d4f0cc85',1,'ead']]], - ['lt',['lt',['../namespaceead.html#ada43674595b3569e7e8de84e82262d28',1,'ead::lt()'],['../namespaceopt.html#a9b94363d0ba133c3226bbab16c665997',1,'opt::lt(ade::CoordptrT a, ade::CoordptrT b)'],['../namespaceopt.html#abcd7703ce112b840a7a38b9a79cdd53b',1,'opt::lt(std::unordered_set< ade::iTensor *> priorities, ade::iLeaf *a, ade::iLeaf *b)'],['../namespaceopt.html#a611bae815562b1297db8143ef6b1f993',1,'opt::lt(std::unordered_set< ade::iTensor *> priorities, ade::iFunctor *a, ade::iFunctor *b)']]] -]; diff --git a/docs/search/all_c.html b/docs/search/all_c.html deleted file mode 100644 index 637681075..000000000 --- a/docs/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_c.js b/docs/search/all_c.js deleted file mode 100644 index 29c2dd195..000000000 --- a/docs/search/all_c.js +++ /dev/null @@ -1,40 +0,0 @@ -var searchData= -[ - ['main',['main',['../mockserver_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): mockserver.cpp'],['../namespaceagen.html#a8b965e262997529d545f1ea3919768e0',1,'agen.main()']]], - ['make_5fconstant',['make_constant',['../namespaceead.html#a30c71c08197b081487e0e74f7834dadf',1,'ead']]], - ['make_5fconstant_5fscalar',['make_constant_scalar',['../namespaceead.html#a7daa32c4e74e9c6ded85c137b40949c1',1,'ead']]], - ['make_5feigenmatrix',['make_eigenmatrix',['../namespaceead.html#a30b8b3a5422b434785a677cde36ce445',1,'ead']]], - ['make_5feigentensor',['make_eigentensor',['../namespaceead.html#a02af73f8c93a9c9bf61be66507d3c2eb',1,'ead']]], - ['make_5ffunctor',['make_functor',['../namespaceead.html#a88515e723bac6d093f759fb0a0c2d796',1,'ead']]], - ['make_5fmatmap',['make_matmap',['../namespaceead.html#a26f160615acaa04c9484a16794937529',1,'ead']]], - ['make_5ftensmap',['make_tensmap',['../namespaceead.html#a36b66d1c50602a5fe3804f8f22d5ec0d',1,'ead']]], - ['make_5ftensor',['make_tensor',['../namespaceead.html#a2610489aa7df2c916bfbf7a1245151f7',1,'ead']]], - ['make_5fvariable',['make_variable',['../namespaceead.html#ac71510b7bd5527a2665e9162143f7327',1,'ead::make_variable(ade::Shape shape, std::string label="")'],['../namespaceead.html#a74381e11e517dc2a330c196724093e46',1,'ead::make_variable(T *data, ade::Shape shape, std::string label="")']]], - ['make_5fvariable_5fscalar',['make_variable_scalar',['../namespaceead.html#ac26aa70368c108d7925b1bab052b77f3',1,'ead']]], - ['map_5fio',['map_io',['../structade_1_1_func_arg.html#a796958637a08f71fd41b58488c969d4c',1,'ade::FuncArg::map_io()'],['../structead_1_1_func_arg.html#a63e97cbb08a951e732b1ee3b82b3121a',1,'ead::FuncArg::map_io()']]], - ['map_5fio_5f',['map_io_',['../structade_1_1_func_arg.html#a40ca3f8562d24fb00519d40e5a90308d',1,'ade::FuncArg']]], - ['mat_5fdim',['mat_dim',['../namespaceade.html#aef5340f38e0071d8c292cc099722a980',1,'ade']]], - ['mat_5fsize',['mat_size',['../namespaceade.html#a2510c0d77a622cfaa58a0865d86ce8d5',1,'ade']]], - ['mat_5fto_5fmatmap',['mat_to_matmap',['../namespaceead.html#a699ecace7b1bac414b11d08567c47c57',1,'ead']]], - ['mat_5fto_5ftensmap',['mat_to_tensmap',['../namespaceead.html#ab594c8e34443366a95a732414a20b476',1,'ead']]], - ['match',['match',['../structopt_1_1_voter_arg.html#a774c095b258c963869df64bf017e2284',1,'opt::VoterArg']]], - ['matcher',['Matcher',['../structopt_1_1_matcher.html',1,'opt::Matcher'],['../structopt_1_1_matcher.html#a6bdc2c485a11948c7ea1ce099fd62f83',1,'opt::Matcher::Matcher(void)=default'],['../structopt_1_1_matcher.html#ae78a780af2bea144b6e6213d60b7f121',1,'opt::Matcher::Matcher(const VoterPool &voters)']]], - ['matcher_2ehpp',['matcher.hpp',['../matcher_8hpp.html',1,'']]], - ['matmapt',['MatMapT',['../namespaceead.html#af90b24c9d423aacd2ba3862ad54f09e7',1,'ead']]], - ['matmul',['matmul',['../namespaceade.html#ab6daf41b04bccd42950ae92db8a0439a',1,'ade::matmul()'],['../namespaceead.html#ad6da222897ca9eaf17db2237c091e04c',1,'ead::matmul()']]], - ['matops_2ecpp',['matops.cpp',['../matops_8cpp.html',1,'']]], - ['matops_2ehpp',['matops.hpp',['../matops_8hpp.html',1,'']]], - ['matrixbase_5f',['matrixbase_',['../structead_1_1_eigen_mat_op.html#ae68d8453c20fa6fafbde3012cb2c6abe',1,'ead::EigenMatOp']]], - ['matrixt',['MatrixT',['../namespaceade.html#ae0f6687dd704fcf5c00f841da0509246',1,'ade::MatrixT()'],['../namespaceead.html#ab361170f2d37b5e1dd1bbea416208d2c',1,'ead::MatrixT()']]], - ['max',['max',['../namespaceead.html#a357e8fef2b64acf7c4a796fcf21412ab',1,'ead']]], - ['max_5fattempts',['max_attempts',['../namespacedbg.html#ad65930e6ff368da58fe3283436eaf53e',1,'dbg']]], - ['max_5fheight_5f',['max_height_',['../struct_graph_emitter_impl_1_1_node.html#a3e053c73bd3a0838eaf062d44588ffe2',1,'GraphEmitterImpl::Node']]], - ['min',['min',['../namespaceead.html#a656f837a1972833c7dabdb410ac6cc56',1,'ead']]], - ['min_5fheight_5f',['min_height_',['../struct_graph_emitter_impl_1_1_node.html#aa854b489cc629baa6fab94adfa5edda6',1,'GraphEmitterImpl::Node']]], - ['mockserver_2ecpp',['mockserver.cpp',['../mockserver_8cpp.html',1,'']]], - ['move_5fhelper',['move_helper',['../structade_1_1_shape.html#ae2cffe358880cabd1a4a06b56c15e2b5',1,'ade::Shape']]], - ['move_5ftags',['move_tags',['../structtag_1_1_tag_registry.html#a07de6ec00ff67e1bfa86781e9ae412fd',1,'tag::TagRegistry']]], - ['mul',['mul',['../namespaceead.html#a24b2c4340e76ca66e27bbd5fb2037feb',1,'ead']]], - ['multigraph_5fto_5fcsvimg',['multigraph_to_csvimg',['../namespacedbg__wrapper.html#a2a53b525d2282677b2ef3727387f3b27',1,'dbg_wrapper']]], - ['multiline_5freplace',['multiline_replace',['../ade__csv_8hpp.html#a5b3fcd17e03950902721ad766466e955',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/all_d.html b/docs/search/all_d.html deleted file mode 100644 index cc52c79fb..000000000 --- a/docs/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_d.js b/docs/search/all_d.js deleted file mode 100644 index 2a7b9fc7f..000000000 --- a/docs/search/all_d.js +++ /dev/null @@ -1,30 +0,0 @@ -var searchData= -[ - ['n_5felems',['n_elems',['../structade_1_1_shape.html#a04fd9614b166a1519221441abeff050d',1,'ade::Shape']]], - ['name_5f',['name_',['../structade_1_1_opcode.html#a669505bcf6ccff8d01a1bf943bffe150',1,'ade::Opcode']]], - ['nargs',['nargs',['../namespacecsv__to__png.html#a6f449909296594e8fe1da3c023c577fa',1,'csv_to_png']]], - ['nbytes',['nbytes',['../structade_1_1i_data.html#aa5c9f438f715fd2be98b436c93f964a9',1,'ade::iData::nbytes()'],['../structead_1_1_functor.html#a656345e1d19d64f653eb4a56a590a71e',1,'ead::Functor::nbytes()'],['../structead_1_1i_leaf.html#a8d00313b1cf0d3005a7532da0e0d828b',1,'ead::iLeaf::nbytes()']]], - ['neg',['neg',['../namespaceead.html#a594cb007c9e08d47774b1b6d1589cb74',1,'ead']]], - ['nelemt',['NElemT',['../namespaceade.html#a2fba34a89f37ea9ee310914daefd880d',1,'ade']]], - ['neq',['neq',['../namespaceead.html#ab80b55b7b91119935354e22c54b6de4e',1,'ead']]], - ['new_5fnumlist',['new_numlist',['../list_8h.html#a45c872863f6fb15f26a606f1a6f191dd',1,'list.h']]], - ['new_5fptrlist',['new_ptrlist',['../list_8h.html#a219b3ab0f2bb641cd8bc26b203abedcd',1,'list.h']]], - ['next_5f',['next_',['../struct_num_node.html#afb2f60acd5b42a5318c2960be53500b8',1,'NumNode::next_()'],['../struct_ptr_node.html#ae5967a4e29046f9b743488fe3a891156',1,'PtrNode::next_()']]], - ['node',['Node',['../struct_graph_emitter_impl_1_1_node.html',1,'GraphEmitterImpl::Node'],['../struct_c_s_v_equation_1_1_node.html',1,'CSVEquation::Node']]], - ['node_5f',['node_',['../structead_1_1_func_arg.html#ab79ea3783267cec52ffe46bb53c62e72',1,'ead::FuncArg']]], - ['node_5fids_5f',['node_ids_',['../structdbg_1_1_interactive_session.html#a64e75b7fc318fe50c949a84661854d2a',1,'dbg::InteractiveSession']]], - ['node_5ftype',['NODE_TYPE',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398',1,'ade_csv.hpp']]], - ['nodebuilderf',['NodeBuilderF',['../namespaceead.html#a276bd4e838da52dc8f5f82f6b4ae49e5',1,'ead']]], - ['nodeconverters',['NodeConverters',['../structead_1_1_node_converters.html',1,'ead::NodeConverters< T >'],['../structead_1_1_node_converters.html#a5e0ca8f459e03a5226ddd719fd08bbc9',1,'ead::NodeConverters::NodeConverters()']]], - ['nodeptrt',['NodeptrT',['../namespaceead.html#ad55ede1032c27cdac013fd8c06e7ec71',1,'ead']]], - ['nodes_5f',['nodes_',['../struct_graph_emitter_impl.html#aa9d51c8485258866548262c55331f607',1,'GraphEmitterImpl::nodes_()'],['../struct_c_s_v_equation.html#a51dd48568a524c084e76db475bb8b902',1,'CSVEquation::nodes_()']]], - ['nodest',['NodesT',['../namespaceead.html#af5246577a59b718cb0315f0433c86b00',1,'ead']]], - ['non_5fbijectives',['non_bijectives',['../namespaceead.html#a83b415399bfb3c00ec07d34a9bde9af7',1,'ead']]], - ['norm_5fgen',['norm_gen',['../namespaceead.html#a803351e45c60fcb4f8722295acea1ec1',1,'ead']]], - ['ntype_5f',['ntype_',['../struct_c_s_v_equation_1_1_node.html#adb8f86416aed773a88e46763f67daa1f',1,'CSVEquation::Node']]], - ['numlist',['NumList',['../struct_num_list.html',1,'']]], - ['numlist_5fclear',['numlist_clear',['../list_8h.html#a41fece6ae3d9653cb4fe2e79c7ce7ef7',1,'list.h']]], - ['numlist_5ffree',['numlist_free',['../list_8h.html#af96ead796d9fb132c38bed80dd7a4594',1,'list.h']]], - ['numlist_5fpushback',['numlist_pushback',['../list_8h.html#a18f16a97c039371fc4387f3cab379f92',1,'list.h']]], - ['numnode',['NumNode',['../struct_num_node.html',1,'']]] -]; diff --git a/docs/search/all_e.html b/docs/search/all_e.html deleted file mode 100644 index 85b39bd48..000000000 --- a/docs/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_e.js b/docs/search/all_e.js deleted file mode 100644 index fe19fe1c1..000000000 --- a/docs/search/all_e.js +++ /dev/null @@ -1,26 +0,0 @@ -var searchData= -[ - ['itensor_20_2a',['iTensor *',['../structtag_1_1_tens_key.html#a74db0ce377418153f012c50ed23eb1ee',1,'tag::TensKey']]], - ['optimization_20rules_20explained_20in_20natural_20language',['Optimization Rules Explained in Natural Language',['../md_opt_rules.html',1,'']]], - ['oncetraveler',['OnceTraveler',['../structade_1_1_once_traveler.html',1,'ade']]], - ['oparg',['OpArg',['../structead_1_1_op_arg.html',1,'ead::OpArg< T >'],['../structead_1_1_op_arg.html#a9561a3c1b145fe07b9857a52a53e3f84',1,'ead::OpArg::OpArg()']]], - ['opcode',['Opcode',['../structade_1_1_opcode.html',1,'ade']]], - ['opcode_5f',['opcode_',['../structade_1_1_functor.html#a510bd987710b9f124e178bd0e826ab6d',1,'ade::Functor::opcode_()'],['../structead_1_1_functor.html#aecd0349b210f3b3d29d85ac7471add2d',1,'ead::Functor::opcode_()'],['../structead_1_1_func_convr.html#a1690bda82be8cf3b152510f2c322d351',1,'ead::FuncConvr::opcode_()']]], - ['opcodes',['opcodes',['../namespaceopcodes.html',1,'']]], - ['opcodes_2epy',['opcodes.py',['../opcodes_8py.html',1,'']]], - ['opcodesplugin',['OpcodesPlugin',['../classopcodes_1_1_opcodes_plugin.html',1,'opcodes']]], - ['operator_20size_5ft',['operator size_t',['../structead_1_1_size_t.html#af2225dfe3072d3139e3769f56cddb2e1',1,'ead::SizeT']]], - ['operator_28_29',['operator()',['../structdbg_1_1_edge_info_hash.html#af91174a062e920af24d00cac4efc7d23',1,'dbg::EdgeInfoHash::operator()()'],['../structopt_1_1_symbol_hash.html#ab3498176de40c5d3f8c56eed4a10edb5',1,'opt::SymbolHash::operator()()'],['../structopt_1_1_ordr_hasher.html#a18abae76066c892674cb637dc8b409ae',1,'opt::OrdrHasher::operator()()'],['../structopt_1_1_comm_hasher.html#a160b74b2fbfbc79d28e68268aa19c09e',1,'opt::CommHasher::operator()()'],['../structtag_1_1_tens_key_hash.html#a8ac47f645b9595e0ef55fad71aa30269',1,'tag::TensKeyHash::operator()()']]], - ['operator_2ehpp',['operator.hpp',['../operator_8hpp.html',1,'']]], - ['operator_3d',['operator=',['../structade_1_1_functor.html#a6506fcc3100d3017db32f24c792ee3c6',1,'ade::Functor::operator=(const Functor &other)=delete'],['../structade_1_1_functor.html#ac81b6c9b5918d7e30c6d3eec6d33cd97',1,'ade::Functor::operator=(Functor &&other)=delete'],['../structade_1_1_shape.html#acd2a09bd0d441203386e75fe5251d697',1,'ade::Shape::operator=(const Shape &other)=default'],['../structade_1_1_shape.html#a6d9ebce77260266dbc73e8d3b0a08993',1,'ade::Shape::operator=(const std::vector< DimT > &dims)'],['../structade_1_1_shape.html#aff04970d322736d89caeece427a3ac03',1,'ade::Shape::operator=(Shape &&other)'],['../structead_1_1_constant.html#ab2f5b675c9b61ccbd052761c6a4246a3',1,'ead::Constant::operator=(const Constant< T > &other)=delete'],['../structead_1_1_constant.html#afe875cf9df3adb921590cb16120ae577',1,'ead::Constant::operator=(Constant< T > &&other)=delete'],['../structead_1_1_functor.html#ad5e604b859af6ecd7a7936350449abda',1,'ead::Functor::operator=(const Functor< T > &other)=delete'],['../structead_1_1_functor.html#a3b853023dcf8b0b3fbf30556ae96ee50',1,'ead::Functor::operator=(Functor< T > &&other)=delete'],['../structead_1_1_variable.html#a7bd356f8691392854d0ed26231c8852c',1,'ead::Variable::operator=(const Variable< T > &other)=default'],['../structead_1_1_variable.html#a6dd71a5289f64628536a60b30b4cf4c9',1,'ead::Variable::operator=(Variable< T > &&other)=default'],['../structead_1_1_variable.html#a758742f36bb74a48a8e6838072d20c8e',1,'ead::Variable::operator=(std::vector< T > input)'],['../structead_1_1_variable.html#a23fc5758b8262203d537c3a24f2a9cc8',1,'ead::Variable::operator=(const TensorT< T > &input)'],['../structtag_1_1_tag_collective.html#a03a147a4cc3cbe58ca6297d6eac9f820',1,'tag::TagCollective::operator=()']]], - ['operator_3d_3d',['operator==',['../namespacedbg.html#ada40ea60dba248369ff58c0bd0ef22c9',1,'dbg::operator==()'],['../namespaceopt.html#a2676a7b37ab954a2a8d469365f2ac28e',1,'opt::operator==(const Symbol &lhs, const Symbol &rhs)'],['../namespaceopt.html#a903b95cff9efd5fc2cab00fa8efe2bee',1,'opt::operator==(const VoterArgsT &lhs, const VoterArgsT &rhs)'],['../namespaceopt.html#aa20e01c2870226c38bc5d1bb48e22b1e',1,'opt::operator==(const SegVArgs &lhs, const SegVArgs &rhs)'],['../namespacetag.html#a7ebe3b9d6317d1950925dae1ef97bc41',1,'tag::operator==()']]], - ['opt',['opt',['../namespaceopt.html',1,'']]], - ['optctx',['OptCtx',['../structopt_1_1_opt_ctx.html',1,'opt']]], - ['optimize',['optimize',['../structdbg_1_1_interactive_session.html#a45e0ff8b099d2a2cbe348bcc7cb61b5e',1,'dbg::InteractiveSession::optimize()'],['../structead_1_1_session.html#aaabb645c3f3659d283e2ad5aa5e6cdeb',1,'ead::Session::optimize()'],['../namespaceopt.html#af5cd28769f7711e62d8bf4b4aac600fe',1,'opt::optimize()']]], - ['optimize_2ecpp',['optimize.cpp',['../optimize_8cpp.html',1,'']]], - ['optimize_2ehpp',['optimize.hpp',['../optimize_8hpp.html',1,'']]], - ['ordrhasher',['OrdrHasher',['../structopt_1_1_ordr_hasher.html',1,'opt']]], - ['ordrvoter',['OrdrVoter',['../structopt_1_1_ordr_voter.html',1,'opt::OrdrVoter'],['../structopt_1_1_ordr_voter.html#a8715864c171d9bfe8075432562a43cfd',1,'opt::OrdrVoter::OrdrVoter()']]], - ['out_5f',['out_',['../structead_1_1_functor.html#af66b449e402b6763515057d6f0c62843',1,'ead::Functor']]], - ['ownermapt',['OwnerMapT',['../namespaceade.html#a369d1a2ecdeeb7c71f87dc9d50575dc3',1,'ade']]] -]; diff --git a/docs/search/all_f.html b/docs/search/all_f.html deleted file mode 100644 index 89fa15a65..000000000 --- a/docs/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/all_f.js b/docs/search/all_f.js deleted file mode 100644 index aae4e711d..000000000 --- a/docs/search/all_f.js +++ /dev/null @@ -1,57 +0,0 @@ -var searchData= -[ - ['pbm_20_28protobuf_20marshaller_29',['PBM (Protobuf Marshaller)',['../md_pbm__r_e_a_d_m_e__p_b_m.html',1,'']]], - ['p2cshape',['p2cshape',['../namespacepyead.html#a853f2acc2fa8cbf68397487433839de1',1,'pyead']]], - ['pad',['pad',['../namespaceead.html#ac8f10713ea022f31bf5397b6f77be7ae',1,'ead']]], - ['parent_5f',['parent_',['../structdbg_1_1_edge_info.html#af3ad4365624eadf3ee34c9f9541bb765',1,'dbg::EdgeInfo']]], - ['parent_5fid_5f',['parent_id_',['../struct_graph_emitter_impl_1_1_edge.html#a21fa95d236f1749eb653aec5d04be885',1,'GraphEmitterImpl::Edge']]], - ['parentfinder',['ParentFinder',['../structade_1_1_parent_finder.html',1,'ade']]], - ['parentmapt',['ParentMapT',['../structade_1_1_path_finder.html#a725a8d0eeaaf57b606e8149abe317616',1,'ade::PathFinder::ParentMapT()'],['../structade_1_1_parent_finder.html#a496f11c2e0a603c349c69470e7cfc047',1,'ade::ParentFinder::ParentMapT()']]], - ['parents_5f',['parents_',['../structade_1_1_path_finder.html#a7748417958bed305338af5e238dc5362',1,'ade::PathFinder::parents_()'],['../structade_1_1_parent_finder.html#a4dac2cea4ff6bff153debf4180cfaa0e',1,'ade::ParentFinder::parents_()'],['../structead_1_1_session.html#a49840f07b1679c9a4ae253cf85192fd6',1,'ead::Session::parents_()']]], - ['parse',['parse',['../namespaceagen.html#a646e2ec5a3040a53ccc3ef80f35988d4',1,'agen.parse()'],['../namespaceead.html#ac102d1caf0fb4f0e9a75871185ce94aa',1,'ead::parse()'],['../namespaceopt.html#ab9d9be1023f1cc9481f117420fef6e5f',1,'opt::parse()']]], - ['parse_2ecpp',['parse.cpp',['../parse_8cpp.html',1,'']]], - ['parse_2ehpp',['parse.hpp',['../ead_2parse_8hpp.html',1,'(Global Namespace)'],['../opt_2parse_8hpp.html',1,'(Global Namespace)']]], - ['parse_5ffile',['parse_file',['../namespaceead.html#a7b33b7c67a248376b4c67f8e377bbdb3',1,'ead::parse_file()'],['../def_8h.html#a930812b450d7668d13e980082070dc1f',1,'parse_file(): def.h'],['../namespaceopt.html#adcc3a35d1f8bdea7ba10cdf2e5f47a4a',1,'opt::parse_file()']]], - ['parse_5fstr',['parse_str',['../def_8h.html#a1aa550f58aec9ca446a418aa4a046ca5',1,'def.h']]], - ['parser',['parser',['../namespacecsv__to__png.html#a2ba28e897973436caf76d7a4d0149b34',1,'csv_to_png']]], - ['pathedmapt',['PathedMapT',['../namespacepbm.html#a955cdbd7419581e6e76661a56ac279b3',1,'pbm']]], - ['pathedtens',['PathedTens',['../structpbm_1_1_pathed_tens.html',1,'pbm']]], - ['pathfinder',['PathFinder',['../structade_1_1_path_finder.html',1,'ade::PathFinder'],['../structade_1_1_path_finder.html#a97e908678c6b0136bf6e0ccaaa1e5b4f',1,'ade::PathFinder::PathFinder()']]], - ['pbm',['pbm',['../namespacepbm.html',1,'']]], - ['permute',['permute',['../namespaceade.html#a81f596fa172325f3aa53caf6c92a5c87',1,'ade::permute()'],['../namespaceead.html#a623f69139e520371dc27e37365b91f7b',1,'ead::permute(std::vector< ade::RankT > dims)'],['../namespaceead.html#a080552212655073b118b0b99f8a98d52',1,'ead::permute(ade::Shape &outshape, const OpArg< T > &in)']]], - ['permute_5fgrad',['permute_grad',['../namespaceead.html#a826269f4ceddffd298a0918e7b5723bb',1,'ead']]], - ['permute_5fmap',['permute_map',['../namespaceade.html#acdf6babf49e0003043b318fec81ed433',1,'ade::permute_map()'],['../namespaceead.html#ad9c98d8b498a20b74968a2276818c4d7',1,'ead::permute_map()']]], - ['plugin_5fid',['plugin_id',['../classapis_1_1_a_p_is_plugin.html#a9fbbca2c905565577ca3738982a66496',1,'apis.APIsPlugin.plugin_id()'],['../classdtypes_1_1_d_types_plugin.html#af14ea0afa6ca5bab4b619a23e2dc55f1',1,'dtypes.DTypesPlugin.plugin_id()'],['../classopcodes_1_1_opcodes_plugin.html#a885db6bab70519af4059564a3f1d740d',1,'opcodes.OpcodesPlugin.plugin_id()'],['../classpyapis_1_1_py_a_p_is_plugin.html#aed74bc03e303049402290f2579250d8c',1,'pyapis.PyAPIsPlugin.plugin_id()']]], - ['populate_5fgraph',['populate_graph',['../namespaceopt.html#a1d4bdc20806df85595629e4f7801a26e',1,'opt']]], - ['pow',['pow',['../namespaceead.html#aef0fcd217032d5db754a8c1792d326d0',1,'ead']]], - ['prettyequation',['PrettyEquation',['../struct_pretty_equation.html',1,'PrettyEquation'],['../struct_pretty_equation.html#abe52b36f6c27ff7c65ebbdde12d5705a',1,'PrettyEquation::PrettyEquation()']]], - ['prettytensor',['PrettyTensor',['../struct_pretty_tensor.html',1,'PrettyTensor< T >'],['../struct_pretty_tensor.html#ac10b1604231e1724e9be9474d1223d75',1,'PrettyTensor::PrettyTensor()']]], - ['prettytree',['PrettyTree',['../struct_pretty_tree.html',1,'PrettyTree< T >'],['../struct_pretty_tree.html#ab453db0dc22779618c52fd4bf4e8df4a',1,'PrettyTree::PrettyTree()']]], - ['prettytree_3c_20ade_3a_3aitensor_20_2a_3e',['PrettyTree< ade::iTensor *>',['../struct_pretty_tree.html',1,'']]], - ['print',['print',['../struct_pretty_equation.html#a09e6455e6a12326e2ad14fc345dabf2e',1,'PrettyEquation::print(std::ostream &out, ade::TensptrT &ptr)'],['../struct_pretty_equation.html#a14d27a6784b3cd1e19044d7e9468eaaa',1,'PrettyEquation::print(std::ostream &out, ade::iTensor *ptr)'],['../struct_pretty_tensor.html#a89609d319d683bb82832cabdfd8ef973',1,'PrettyTensor::print()'],['../struct_pretty_tree.html#a993ee394110876f1dbfde54caa7b741b',1,'PrettyTree::print()']]], - ['print_5fgraph',['print_graph',['../namespacecsv__to__png.html#a0e34972ea616fbd204ca0d567e2d485b',1,'csv_to_png']]], - ['print_5fhelper',['print_helper',['../struct_pretty_tensor.html#a61389f537a166e42e926b8d5d2f7b1e5',1,'PrettyTensor::print_helper()'],['../struct_pretty_tree.html#ac1dc9c9d25347be832743fe0a9175994',1,'PrettyTree::print_helper()']]], - ['process',['process',['../classapis_1_1_a_p_is_plugin.html#a262c0f389de225335db6948bd25b86b9',1,'apis.APIsPlugin.process()'],['../classdtypes_1_1_d_types_plugin.html#a1c794e26e723a23a045d94ee7aa5fe77',1,'dtypes.DTypesPlugin.process()'],['../classopcodes_1_1_opcodes_plugin.html#a03c6cf58fd9c55a584ac811ee83e729a',1,'opcodes.OpcodesPlugin.process()'],['../classpyapis_1_1_py_a_p_is_plugin.html#a7f5b23bacc91570d5522f9a949f3ea28',1,'pyapis.PyAPIsPlugin.process()']]], - ['prog_5fdescription',['prog_description',['../namespaceagen.html#a37ff01cda30d5df761f0e0ae8e9f492f',1,'agen']]], - ['prop_2ecpp',['prop.cpp',['../prop_8cpp.html',1,'']]], - ['prop_2ehpp',['prop.hpp',['../prop_8hpp.html',1,'']]], - ['properties_5f',['properties_',['../structopt_1_1_rules_context.html#ab9ea8397a897bce08ecb897fa30836ff',1,'opt::RulesContext']]], - ['property',['Property',['../struct_property.html',1,'']]], - ['property_5f',['property_',['../struct_property.html#a92e6efa20d4619ed8ce3e39a468dbafb',1,'Property']]], - ['property_5fdef',['PROPERTY_DEF',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a8eb5d65c4da03c0577188745920ab4c0',1,'def.h']]], - ['property_5ftag',['property_tag',['../structtag_1_1_property_registry.html#a2fde01bf092d2e804bb4e77afe62561b',1,'tag::PropertyRegistry']]], - ['propertyregistry',['PropertyRegistry',['../structtag_1_1_property_registry.html',1,'tag::PropertyRegistry'],['../structtag_1_1_property_registry.html#a9704715e05d9c7cb0fb28fe2a80647aa',1,'tag::PropertyRegistry::PropertyRegistry()']]], - ['props_5fkey',['props_key',['../namespacetag.html#a5dea3b3743ab50403cb8e084e3623be6',1,'tag']]], - ['proptag',['PropTag',['../structtag_1_1_prop_tag.html',1,'tag::PropTag'],['../structtag_1_1_prop_tag.html#a69374138c772268bd80eba9267a11e94',1,'tag::PropTag::PropTag()']]], - ['ptr_5ftype',['PTR_TYPE',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899',1,'def.h']]], - ['ptrlist',['PtrList',['../struct_ptr_list.html',1,'']]], - ['ptrlist_5fclear',['ptrlist_clear',['../list_8h.html#a905fa8de6149362666d05980f8b83679',1,'list.h']]], - ['ptrlist_5ffree',['ptrlist_free',['../list_8h.html#a499add6fcfa755b7b08afed2a38b0b17',1,'list.h']]], - ['ptrlist_5fpushback',['ptrlist_pushback',['../list_8h.html#a4f4bf57d9dda2f04ec03bb298d6dbe51',1,'list.h']]], - ['ptrnode',['PtrNode',['../struct_ptr_node.html',1,'']]], - ['pyapis',['pyapis',['../namespacepyapis.html',1,'']]], - ['pyapis_2epy',['pyapis.py',['../pyapis_8py.html',1,'']]], - ['pyapisplugin',['PyAPIsPlugin',['../classpyapis_1_1_py_a_p_is_plugin.html',1,'pyapis']]], - ['pybind11_5fmodule',['PYBIND11_MODULE',['../grpc_8cpp.html#a410dddaa228f0b4ce6498b2e59315796',1,'PYBIND11_MODULE(grpc_dbg, m): grpc.cpp'],['../stream_8cpp.html#a87f730d0c9c92f688f13cd13f5b49020',1,'PYBIND11_MODULE(stream_dbg, m): stream.cpp'],['../ead_8cpp.html#a05aa6e52c0a879d09b3b09477aed6031',1,'PYBIND11_MODULE(ead, m): ead.cpp']]], - ['pyead',['pyead',['../namespacepyead.html',1,'']]] -]; diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html deleted file mode 100644 index e935fdf72..000000000 --- a/docs/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js deleted file mode 100644 index b16152c2e..000000000 --- a/docs/search/classes_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['anyconvr',['AnyConvr',['../structead_1_1_any_convr.html',1,'ead']]], - ['apisplugin',['APIsPlugin',['../classapis_1_1_a_p_is_plugin.html',1,'apis']]], - ['arg',['Arg',['../struct_arg.html',1,'']]] -]; diff --git a/docs/search/classes_1.html b/docs/search/classes_1.html deleted file mode 100644 index 3df6e80ac..000000000 --- a/docs/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js deleted file mode 100644 index c3ace39b0..000000000 --- a/docs/search/classes_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['branch',['Branch',['../struct_branch.html',1,'']]], - ['builderarg',['BuilderArg',['../structead_1_1_builder_arg.html',1,'ead']]] -]; diff --git a/docs/search/classes_10.html b/docs/search/classes_10.html deleted file mode 100644 index 0477a2669..000000000 --- a/docs/search/classes_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_10.js b/docs/search/classes_10.js deleted file mode 100644 index a2cf9dc4a..000000000 --- a/docs/search/classes_10.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['variable',['Variable',['../structead_1_1_variable.html',1,'ead']]], - ['variablenode',['VariableNode',['../structead_1_1_variable_node.html',1,'ead']]], - ['variadicvoter',['VariadicVoter',['../structopt_1_1_variadic_voter.html',1,'opt']]], - ['voterarg',['VoterArg',['../structopt_1_1_voter_arg.html',1,'opt']]], - ['voterpool',['VoterPool',['../structopt_1_1_voter_pool.html',1,'opt']]] -]; diff --git a/docs/search/classes_2.html b/docs/search/classes_2.html deleted file mode 100644 index 028694ffa..000000000 --- a/docs/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js deleted file mode 100644 index 319c4dfcf..000000000 --- a/docs/search/classes_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['candarg',['CandArg',['../structopt_1_1_cand_arg.html',1,'opt']]], - ['clientconfig',['ClientConfig',['../structdbg_1_1_client_config.html',1,'dbg']]], - ['commhasher',['CommHasher',['../structopt_1_1_comm_hasher.html',1,'opt']]], - ['commvoter',['CommVoter',['../structopt_1_1_comm_voter.html',1,'opt']]], - ['constant',['Constant',['../structead_1_1_constant.html',1,'ead']]], - ['constantnode',['ConstantNode',['../structead_1_1_constant_node.html',1,'ead']]], - ['conversion',['Conversion',['../struct_conversion.html',1,'']]], - ['converterbuilder',['ConverterBuilder',['../structead_1_1_converter_builder.html',1,'ead']]], - ['coordmap',['CoordMap',['../structade_1_1_coord_map.html',1,'ade::CoordMap'],['../structead_1_1_coord_map.html',1,'ead::CoordMap']]], - ['csvequation',['CSVEquation',['../struct_c_s_v_equation.html',1,'']]] -]; diff --git a/docs/search/classes_3.html b/docs/search/classes_3.html deleted file mode 100644 index 2b1abe383..000000000 --- a/docs/search/classes_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js deleted file mode 100644 index 14d9a1c93..000000000 --- a/docs/search/classes_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dtypesplugin',['DTypesPlugin',['../classdtypes_1_1_d_types_plugin.html',1,'dtypes']]] -]; diff --git a/docs/search/classes_4.html b/docs/search/classes_4.html deleted file mode 100644 index 873521494..000000000 --- a/docs/search/classes_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js deleted file mode 100644 index e7e9649cf..000000000 --- a/docs/search/classes_4.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['eadloader',['EADLoader',['../structead_1_1_e_a_d_loader.html',1,'ead']]], - ['eadsaver',['EADSaver',['../structead_1_1_e_a_d_saver.html',1,'ead']]], - ['edge',['Edge',['../struct_graph_emitter_impl_1_1_edge.html',1,'GraphEmitterImpl::Edge'],['../struct_c_s_v_equation_1_1_edge.html',1,'CSVEquation::Edge']]], - ['edgeinfo',['EdgeInfo',['../structdbg_1_1_edge_info.html',1,'dbg']]], - ['edgeinfohash',['EdgeInfoHash',['../structdbg_1_1_edge_info_hash.html',1,'dbg']]], - ['eigenmatop',['EigenMatOp',['../structead_1_1_eigen_mat_op.html',1,'ead']]], - ['eigentensop',['EigenTensOp',['../structead_1_1_eigen_tens_op.html',1,'ead']]] -]; diff --git a/docs/search/classes_5.html b/docs/search/classes_5.html deleted file mode 100644 index ba8b1c69b..000000000 --- a/docs/search/classes_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js deleted file mode 100644 index e67ac3c94..000000000 --- a/docs/search/classes_5.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['funcarg',['FuncArg',['../structead_1_1_func_arg.html',1,'ead::FuncArg< T >'],['../structade_1_1_func_arg.html',1,'ade::FuncArg']]], - ['funcconvr',['FuncConvr',['../structead_1_1_func_convr.html',1,'ead']]], - ['functor',['Functor',['../structade_1_1_functor.html',1,'ade::Functor'],['../structead_1_1_functor.html',1,'ead::Functor< T >']]], - ['functornode',['FunctorNode',['../structead_1_1_functor_node.html',1,'ead']]] -]; diff --git a/docs/search/classes_6.html b/docs/search/classes_6.html deleted file mode 100644 index f5850938d..000000000 --- a/docs/search/classes_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js deleted file mode 100644 index c9a4a329b..000000000 --- a/docs/search/classes_6.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['gradientbuilder',['GradientBuilder',['../structead_1_1_gradient_builder.html',1,'ead']]], - ['graphemitterclient',['GraphEmitterClient',['../structdbg_1_1_graph_emitter_client.html',1,'dbg']]], - ['graphemitterimpl',['GraphEmitterImpl',['../struct_graph_emitter_impl.html',1,'']]], - ['graphinfo',['GraphInfo',['../structpbm_1_1_graph_info.html',1,'pbm']]], - ['graphsaver',['GraphSaver',['../structpbm_1_1_graph_saver.html',1,'pbm']]], - ['graphstat',['GraphStat',['../structade_1_1_graph_stat.html',1,'ade']]], - ['group',['Group',['../struct_group.html',1,'']]], - ['groupconvr',['GroupConvr',['../structead_1_1_group_convr.html',1,'ead']]], - ['groupregistry',['GroupRegistry',['../structtag_1_1_group_registry.html',1,'tag']]], - ['grouptag',['GroupTag',['../structtag_1_1_group_tag.html',1,'tag']]] -]; diff --git a/docs/search/classes_7.html b/docs/search/classes_7.html deleted file mode 100644 index 6418529c0..000000000 --- a/docs/search/classes_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_7.js b/docs/search/classes_7.js deleted file mode 100644 index 526f463b1..000000000 --- a/docs/search/classes_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['heightmatrix',['HeightMatrix',['../structade_1_1_height_matrix.html',1,'ade']]] -]; diff --git a/docs/search/classes_8.html b/docs/search/classes_8.html deleted file mode 100644 index 87af6f601..000000000 --- a/docs/search/classes_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js deleted file mode 100644 index 18f90fd78..000000000 --- a/docs/search/classes_8.js +++ /dev/null @@ -1,21 +0,0 @@ -var searchData= -[ - ['iconverter',['iConverter',['../structopt_1_1i_converter.html',1,'opt']]], - ['iconverterbuilder',['iConverterBuilder',['../structopt_1_1i_converter_builder.html',1,'opt']]], - ['icoordmap',['iCoordMap',['../structade_1_1i_coord_map.html',1,'ade']]], - ['idata',['iData',['../structade_1_1i_data.html',1,'ade']]], - ['ieigen',['iEigen',['../structead_1_1i_eigen.html',1,'ead']]], - ['ifunctor',['iFunctor',['../structade_1_1i_functor.html',1,'ade']]], - ['igradientbuilder',['iGradientBuilder',['../structade_1_1i_gradient_builder.html',1,'ade']]], - ['ileaf',['iLeaf',['../structade_1_1i_leaf.html',1,'ade::iLeaf'],['../structead_1_1i_leaf.html',1,'ead::iLeaf< T >']]], - ['iloader',['iLoader',['../structpbm_1_1i_loader.html',1,'pbm']]], - ['inode',['iNode',['../structead_1_1i_node.html',1,'ead']]], - ['interactivesession',['InteractiveSession',['../structdbg_1_1_interactive_session.html',1,'dbg']]], - ['ioperablefunc',['iOperableFunc',['../structade_1_1i_operable_func.html',1,'ade']]], - ['isaver',['iSaver',['../structpbm_1_1i_saver.html',1,'pbm']]], - ['isession',['iSession',['../structead_1_1i_session.html',1,'ead']]], - ['itag',['iTag',['../structtag_1_1i_tag.html',1,'tag']]], - ['itensor',['iTensor',['../structade_1_1i_tensor.html',1,'ade']]], - ['itraveler',['iTraveler',['../structade_1_1i_traveler.html',1,'ade']]], - ['ivoter',['iVoter',['../structopt_1_1i_voter.html',1,'opt']]] -]; diff --git a/docs/search/classes_9.html b/docs/search/classes_9.html deleted file mode 100644 index f830ae04b..000000000 --- a/docs/search/classes_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js deleted file mode 100644 index 53f6a0a13..000000000 --- a/docs/search/classes_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['matcher',['Matcher',['../structopt_1_1_matcher.html',1,'opt']]] -]; diff --git a/docs/search/classes_a.html b/docs/search/classes_a.html deleted file mode 100644 index 0fd3b7ac3..000000000 --- a/docs/search/classes_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_a.js b/docs/search/classes_a.js deleted file mode 100644 index 89c356f1f..000000000 --- a/docs/search/classes_a.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['node',['Node',['../struct_graph_emitter_impl_1_1_node.html',1,'GraphEmitterImpl::Node'],['../struct_c_s_v_equation_1_1_node.html',1,'CSVEquation::Node']]], - ['nodeconverters',['NodeConverters',['../structead_1_1_node_converters.html',1,'ead']]], - ['numlist',['NumList',['../struct_num_list.html',1,'']]], - ['numnode',['NumNode',['../struct_num_node.html',1,'']]] -]; diff --git a/docs/search/classes_b.html b/docs/search/classes_b.html deleted file mode 100644 index 886abdfcd..000000000 --- a/docs/search/classes_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_b.js b/docs/search/classes_b.js deleted file mode 100644 index a421fcbb3..000000000 --- a/docs/search/classes_b.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['oncetraveler',['OnceTraveler',['../structade_1_1_once_traveler.html',1,'ade']]], - ['oparg',['OpArg',['../structead_1_1_op_arg.html',1,'ead']]], - ['opcode',['Opcode',['../structade_1_1_opcode.html',1,'ade']]], - ['opcodesplugin',['OpcodesPlugin',['../classopcodes_1_1_opcodes_plugin.html',1,'opcodes']]], - ['optctx',['OptCtx',['../structopt_1_1_opt_ctx.html',1,'opt']]], - ['ordrhasher',['OrdrHasher',['../structopt_1_1_ordr_hasher.html',1,'opt']]], - ['ordrvoter',['OrdrVoter',['../structopt_1_1_ordr_voter.html',1,'opt']]] -]; diff --git a/docs/search/classes_c.html b/docs/search/classes_c.html deleted file mode 100644 index 52ec26763..000000000 --- a/docs/search/classes_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_c.js b/docs/search/classes_c.js deleted file mode 100644 index 555d4caaf..000000000 --- a/docs/search/classes_c.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['parentfinder',['ParentFinder',['../structade_1_1_parent_finder.html',1,'ade']]], - ['pathedtens',['PathedTens',['../structpbm_1_1_pathed_tens.html',1,'pbm']]], - ['pathfinder',['PathFinder',['../structade_1_1_path_finder.html',1,'ade']]], - ['prettyequation',['PrettyEquation',['../struct_pretty_equation.html',1,'']]], - ['prettytensor',['PrettyTensor',['../struct_pretty_tensor.html',1,'']]], - ['prettytree',['PrettyTree',['../struct_pretty_tree.html',1,'']]], - ['prettytree_3c_20ade_3a_3aitensor_20_2a_3e',['PrettyTree< ade::iTensor *>',['../struct_pretty_tree.html',1,'']]], - ['property',['Property',['../struct_property.html',1,'']]], - ['propertyregistry',['PropertyRegistry',['../structtag_1_1_property_registry.html',1,'tag']]], - ['proptag',['PropTag',['../structtag_1_1_prop_tag.html',1,'tag']]], - ['ptrlist',['PtrList',['../struct_ptr_list.html',1,'']]], - ['ptrnode',['PtrNode',['../struct_ptr_node.html',1,'']]], - ['pyapisplugin',['PyAPIsPlugin',['../classpyapis_1_1_py_a_p_is_plugin.html',1,'pyapis']]] -]; diff --git a/docs/search/classes_d.html b/docs/search/classes_d.html deleted file mode 100644 index 652508df3..000000000 --- a/docs/search/classes_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_d.js b/docs/search/classes_d.js deleted file mode 100644 index a79ba3ef7..000000000 --- a/docs/search/classes_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['rulescontext',['RulesContext',['../structopt_1_1_rules_context.html',1,'opt']]] -]; diff --git a/docs/search/classes_e.html b/docs/search/classes_e.html deleted file mode 100644 index 7d4e9a563..000000000 --- a/docs/search/classes_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_e.js b/docs/search/classes_e.js deleted file mode 100644 index e8e93ff3f..000000000 --- a/docs/search/classes_e.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['scalarconvr',['ScalarConvr',['../structead_1_1_scalar_convr.html',1,'ead']]], - ['segvargs',['SegVArgs',['../structopt_1_1_seg_v_args.html',1,'opt']]], - ['session',['Session',['../structead_1_1_session.html',1,'ead']]], - ['shape',['Shape',['../structade_1_1_shape.html',1,'ade']]], - ['sizet',['SizeT',['../structead_1_1_size_t.html',1,'ead']]], - ['statement',['Statement',['../struct_statement.html',1,'']]], - ['subgraph',['Subgraph',['../struct_subgraph.html',1,'Subgraph'],['../structtag_1_1_subgraph.html',1,'tag::Subgraph']]], - ['symbol',['Symbol',['../structopt_1_1_symbol.html',1,'opt']]], - ['symbolhash',['SymbolHash',['../structopt_1_1_symbol_hash.html',1,'opt']]] -]; diff --git a/docs/search/classes_f.html b/docs/search/classes_f.html deleted file mode 100644 index fa6ed25ee..000000000 --- a/docs/search/classes_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/classes_f.js b/docs/search/classes_f.js deleted file mode 100644 index 6948aa2ad..000000000 --- a/docs/search/classes_f.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['tagcollective',['TagCollective',['../structtag_1_1_tag_collective.html',1,'tag']]], - ['tagregistry',['TagRegistry',['../structtag_1_1_tag_registry.html',1,'tag']]], - ['tenskey',['TensKey',['../structtag_1_1_tens_key.html',1,'tag']]], - ['tenskeyhash',['TensKeyHash',['../structtag_1_1_tens_key_hash.html',1,'tag']]] -]; diff --git a/docs/search/close.png b/docs/search/close.png deleted file mode 100644 index 9342d3dfe..000000000 Binary files a/docs/search/close.png and /dev/null differ diff --git a/docs/search/defines_0.html b/docs/search/defines_0.html deleted file mode 100644 index 3bffafa9b..000000000 --- a/docs/search/defines_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/defines_0.js b/docs/search/defines_0.js deleted file mode 100644 index 7a0a1d687..000000000 --- a/docs/search/defines_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['_5fead_5finternal_5fv2a',['_EAD_INTERNAL_V2A',['../operator_8hpp.html#a858db6a0d26c8da53588d111218592e5',1,'operator.hpp']]], - ['_5fead_5finternal_5fv2a_5fcase',['_EAD_INTERNAL_V2A_CASE',['../operator_8hpp.html#ac77627e3581774e8670ac02df25c6cb5',1,'operator.hpp']]], - ['_5fout_5fgeneric',['_OUT_GENERIC',['../serialize_8hpp.html#ae0ebf6b431161a56e356f988d9f7bc07',1,'serialize.hpp']]] -]; diff --git a/docs/search/defines_1.html b/docs/search/defines_1.html deleted file mode 100644 index ca5bb94e3..000000000 --- a/docs/search/defines_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/defines_1.js b/docs/search/defines_1.js deleted file mode 100644 index 708e832b3..000000000 --- a/docs/search/defines_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dbg_5fsession_5fhpp',['DBG_SESSION_HPP',['../dbg_2grpc_2session_8hpp.html#a6a6c4cb73d88d6cdf35289d7efad9e43',1,'session.hpp']]] -]; diff --git a/docs/search/enums_0.html b/docs/search/enums_0.html deleted file mode 100644 index 9efcd1b75..000000000 --- a/docs/search/enums_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js deleted file mode 100644 index 8b1531f95..000000000 --- a/docs/search/enums_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['cand_5ftype',['CAND_TYPE',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75',1,'opt']]] -]; diff --git a/docs/search/enums_1.html b/docs/search/enums_1.html deleted file mode 100644 index 0edd7796e..000000000 --- a/docs/search/enums_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enums_1.js b/docs/search/enums_1.js deleted file mode 100644 index c9951d9bf..000000000 --- a/docs/search/enums_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['node_5ftype',['NODE_TYPE',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/enums_2.html b/docs/search/enums_2.html deleted file mode 100644 index 2b851b64e..000000000 --- a/docs/search/enums_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enums_2.js b/docs/search/enums_2.js deleted file mode 100644 index 6e3b4d897..000000000 --- a/docs/search/enums_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['ptr_5ftype',['PTR_TYPE',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899',1,'def.h']]] -]; diff --git a/docs/search/enums_3.html b/docs/search/enums_3.html deleted file mode 100644 index b29d31c26..000000000 --- a/docs/search/enums_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enums_3.js b/docs/search/enums_3.js deleted file mode 100644 index 4a02be9fd..000000000 --- a/docs/search/enums_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['stmt_5ftype',['STMT_TYPE',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0',1,'def.h']]], - ['subgraph_5ftype',['SUBGRAPH_TYPE',['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3b',1,'def.h']]] -]; diff --git a/docs/search/enums_4.html b/docs/search/enums_4.html deleted file mode 100644 index ad9ec5e9f..000000000 --- a/docs/search/enums_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enums_4.js b/docs/search/enums_4.js deleted file mode 100644 index c83f552b5..000000000 --- a/docs/search/enums_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['transcode',['TransCode',['../namespaceead.html#a9dd1bbaf42a6ed9320e8b9a9d8f31928',1,'ead']]] -]; diff --git a/docs/search/enumvalues_0.html b/docs/search/enumvalues_0.html deleted file mode 100644 index 03fdfad99..000000000 --- a/docs/search/enumvalues_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js deleted file mode 100644 index 73a0c031a..000000000 --- a/docs/search/enumvalues_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['any',['ANY',['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3baa00374190265e7b6447db44977a7dff1',1,'def.h']]], - ['argument',['ARGUMENT',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899a0d4af967003ab5a27e677af0b336aec2',1,'def.h']]] -]; diff --git a/docs/search/enumvalues_1.html b/docs/search/enumvalues_1.html deleted file mode 100644 index abeea5641..000000000 --- a/docs/search/enumvalues_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js deleted file mode 100644 index e11a04a76..000000000 --- a/docs/search/enumvalues_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['branch',['BRANCH',['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3bad9b20a9207fb2cd3021b9eb0b7c6fe5e',1,'def.h']]] -]; diff --git a/docs/search/enumvalues_2.html b/docs/search/enumvalues_2.html deleted file mode 100644 index 90289986a..000000000 --- a/docs/search/enumvalues_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js deleted file mode 100644 index 08a850ff9..000000000 --- a/docs/search/enumvalues_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['cached_5ffunc',['CACHED_FUNC',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a2863c64ae18d085219d24a53418b0c68',1,'ade_csv.hpp']]], - ['const',['CONST',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75a57a910804e02bfb580e5dd05c7d3aec9',1,'opt']]], - ['conversion',['CONVERSION',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a887fe80282266674d58a6f070e001b1d',1,'def.h']]], - ['convrt',['CONVRT',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75add7ad5cb827b2955c8e47010ddf03be5',1,'opt']]] -]; diff --git a/docs/search/enumvalues_3.html b/docs/search/enumvalues_3.html deleted file mode 100644 index b152efcb5..000000000 --- a/docs/search/enumvalues_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js deleted file mode 100644 index 58ea00c4f..000000000 --- a/docs/search/enumvalues_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['functor',['FUNCTOR',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a59318967319c9027fe12f098f854ef37',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/enumvalues_4.html b/docs/search/enumvalues_4.html deleted file mode 100644 index 3f50abb8b..000000000 --- a/docs/search/enumvalues_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js deleted file mode 100644 index 2bf3514c4..000000000 --- a/docs/search/enumvalues_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['interm',['INTERM',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75a2136fec4bc854238c15c965fd2672e78',1,'opt']]] -]; diff --git a/docs/search/enumvalues_5.html b/docs/search/enumvalues_5.html deleted file mode 100644 index b6f20f292..000000000 --- a/docs/search/enumvalues_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_5.js b/docs/search/enumvalues_5.js deleted file mode 100644 index edb745989..000000000 --- a/docs/search/enumvalues_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['property_5fdef',['PROPERTY_DEF',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a8eb5d65c4da03c0577188745920ab4c0',1,'def.h']]] -]; diff --git a/docs/search/enumvalues_6.html b/docs/search/enumvalues_6.html deleted file mode 100644 index 93be12950..000000000 --- a/docs/search/enumvalues_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_6.js b/docs/search/enumvalues_6.js deleted file mode 100644 index 2bff0f53c..000000000 --- a/docs/search/enumvalues_6.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['scalar',['SCALAR',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75aa5cab2e5396fa71f27366f731881a982',1,'opt::SCALAR()'],['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3ba7efbb6cac96595e63e8fa171bde1eb68',1,'SCALAR(): def.h']]], - ['statement',['STATEMENT',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899a24a370d8aa13b62e0e1af648e6073044',1,'def.h']]], - ['symbol_5fdef',['SYMBOL_DEF',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a956a8ae3d7691567516700fa0910737d',1,'def.h']]] -]; diff --git a/docs/search/enumvalues_7.html b/docs/search/enumvalues_7.html deleted file mode 100644 index 9fefbd651..000000000 --- a/docs/search/enumvalues_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_7.js b/docs/search/enumvalues_7.js deleted file mode 100644 index 92073b85f..000000000 --- a/docs/search/enumvalues_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['variable',['VARIABLE',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a39031ce5df6f91d3778590d6d644b9ea',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/enumvalues_8.html b/docs/search/enumvalues_8.html deleted file mode 100644 index 03f17f865..000000000 --- a/docs/search/enumvalues_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_8.js b/docs/search/enumvalues_8.js deleted file mode 100644 index 0e4d4b46b..000000000 --- a/docs/search/enumvalues_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['scalar',['SCALAR',['../namespaceopt.html#a6367085ef73bbc00b9eab1bfffda5c75aa5cab2e5396fa71f27366f731881a982',1,'opt::SCALAR()'],['../def_8h.html#af90182c6ae6648f4463387e5ac0bcd3ba7efbb6cac96595e63e8fa171bde1eb68',1,'SCALAR(): def.h']]], - ['slice',['SLICE',['../namespaceead.html#a9dd1bbaf42a6ed9320e8b9a9d8f31928abaf1b1970cffab3cf4c9ec1073ad825c',1,'ead']]], - ['statement',['STATEMENT',['../def_8h.html#a7a4f31cf654fa280eafe16a9a1ad0899a24a370d8aa13b62e0e1af648e6073044',1,'def.h']]], - ['symbol_5fdef',['SYMBOL_DEF',['../def_8h.html#ae9cdece4efac95901cf25c84764f5cb0a956a8ae3d7691567516700fa0910737d',1,'def.h']]] -]; diff --git a/docs/search/enumvalues_9.html b/docs/search/enumvalues_9.html deleted file mode 100644 index e60fe2726..000000000 --- a/docs/search/enumvalues_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/enumvalues_9.js b/docs/search/enumvalues_9.js deleted file mode 100644 index 92073b85f..000000000 --- a/docs/search/enumvalues_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['variable',['VARIABLE',['../ade__csv_8hpp.html#a30b051839483744ae5b4557b82b3f398a39031ce5df6f91d3778590d6d644b9ea',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/files_0.html b/docs/search/files_0.html deleted file mode 100644 index 49606c82c..000000000 --- a/docs/search/files_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_0.js b/docs/search/files_0.js deleted file mode 100644 index fdb23899a..000000000 --- a/docs/search/files_0.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ade_2ehpp',['ade.hpp',['../ade_2ade_8hpp.html',1,'(Global Namespace)'],['../dbg_2stream_2ade_8hpp.html',1,'(Global Namespace)']]], - ['ade_5fcsv_2ehpp',['ade_csv.hpp',['../ade__csv_8hpp.html',1,'']]], - ['agen_2epy',['agen.py',['../agen_8py.html',1,'']]], - ['apis_2epy',['apis.py',['../apis_8py.html',1,'']]] -]; diff --git a/docs/search/files_1.html b/docs/search/files_1.html deleted file mode 100644 index c8871748e..000000000 --- a/docs/search/files_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_1.js b/docs/search/files_1.js deleted file mode 100644 index ee8698b7b..000000000 --- a/docs/search/files_1.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['candidate_2ehpp',['candidate.hpp',['../candidate_8hpp.html',1,'']]], - ['client_2ehpp',['client.hpp',['../client_8hpp.html',1,'']]], - ['constant_2ehpp',['constant.hpp',['../constant_8hpp.html',1,'']]], - ['coord_2ecpp',['coord.cpp',['../ade_2src_2coord_8cpp.html',1,'(Global Namespace)'],['../ead_2src_2coord_8cpp.html',1,'(Global Namespace)']]], - ['coord_2ehpp',['coord.hpp',['../ade_2coord_8hpp.html',1,'(Global Namespace)'],['../ead_2coord_8hpp.html',1,'(Global Namespace)']]], - ['csv_5fto_5fpng_2epy',['csv_to_png.py',['../csv__to__png_8py.html',1,'']]] -]; diff --git a/docs/search/files_2.html b/docs/search/files_2.html deleted file mode 100644 index 99bdf21c8..000000000 --- a/docs/search/files_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_2.js b/docs/search/files_2.js deleted file mode 100644 index bc58a8c5b..000000000 --- a/docs/search/files_2.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['data_2ehpp',['data.hpp',['../data_8hpp.html',1,'']]], - ['dbg_5fwrapper_2epy',['dbg_wrapper.py',['../dbg__wrapper_8py.html',1,'']]], - ['def_2ec',['def.c',['../def_8c.html',1,'']]], - ['def_2eh',['def.h',['../def_8h.html',1,'']]], - ['dtypes_2epy',['dtypes.py',['../dtypes_8py.html',1,'']]] -]; diff --git a/docs/search/files_3.html b/docs/search/files_3.html deleted file mode 100644 index f8e543a84..000000000 --- a/docs/search/files_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_3.js b/docs/search/files_3.js deleted file mode 100644 index 85be1a16a..000000000 --- a/docs/search/files_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ead_2ecpp',['ead.cpp',['../ead_8cpp.html',1,'']]], - ['ead_2ehpp',['ead.hpp',['../ead_8hpp.html',1,'']]], - ['eigen_2ecpp',['eigen.cpp',['../eigen_8cpp.html',1,'']]], - ['eigen_2ehpp',['eigen.hpp',['../eigen_8hpp.html',1,'']]] -]; diff --git a/docs/search/files_4.html b/docs/search/files_4.html deleted file mode 100644 index 2ebb46c7e..000000000 --- a/docs/search/files_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_4.js b/docs/search/files_4.js deleted file mode 100644 index 62ec9b8f7..000000000 --- a/docs/search/files_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['funcarg_2ecpp',['funcarg.cpp',['../funcarg_8cpp.html',1,'']]], - ['funcarg_2ehpp',['funcarg.hpp',['../ade_2funcarg_8hpp.html',1,'(Global Namespace)'],['../ead_2funcarg_8hpp.html',1,'(Global Namespace)']]], - ['functor_2ehpp',['functor.hpp',['../ade_2functor_8hpp.html',1,'(Global Namespace)'],['../ead_2functor_8hpp.html',1,'(Global Namespace)']]] -]; diff --git a/docs/search/files_5.html b/docs/search/files_5.html deleted file mode 100644 index 268b7eb53..000000000 --- a/docs/search/files_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_5.js b/docs/search/files_5.js deleted file mode 100644 index c3150ec4a..000000000 --- a/docs/search/files_5.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['grad_5fdef_2ehpp',['grad_def.hpp',['../grad__def_8hpp.html',1,'']]], - ['grader_2ehpp',['grader.hpp',['../grader_8hpp.html',1,'']]], - ['group_2ecpp',['group.cpp',['../group_8cpp.html',1,'']]], - ['group_2ehpp',['group.hpp',['../group_8hpp.html',1,'']]], - ['grpc_2ecpp',['grpc.cpp',['../grpc_8cpp.html',1,'']]] -]; diff --git a/docs/search/files_6.html b/docs/search/files_6.html deleted file mode 100644 index 98fc6666c..000000000 --- a/docs/search/files_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_6.js b/docs/search/files_6.js deleted file mode 100644 index 7c902aaed..000000000 --- a/docs/search/files_6.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['iconverter_2ehpp',['iconverter.hpp',['../iconverter_8hpp.html',1,'']]], - ['idata_2ehpp',['idata.hpp',['../idata_8hpp.html',1,'']]], - ['ifunctor_2ehpp',['ifunctor.hpp',['../ifunctor_8hpp.html',1,'']]], - ['ileaf_2ehpp',['ileaf.hpp',['../ade_2ileaf_8hpp.html',1,'(Global Namespace)'],['../ead_2ileaf_8hpp.html',1,'(Global Namespace)']]], - ['inode_2ehpp',['inode.hpp',['../inode_8hpp.html',1,'']]], - ['iopfunc_2ehpp',['iopfunc.hpp',['../iopfunc_8hpp.html',1,'']]], - ['itensor_2ehpp',['itensor.hpp',['../itensor_8hpp.html',1,'']]], - ['ivoter_2ecpp',['ivoter.cpp',['../ivoter_8cpp.html',1,'']]], - ['ivoter_2ehpp',['ivoter.hpp',['../ivoter_8hpp.html',1,'']]] -]; diff --git a/docs/search/files_7.html b/docs/search/files_7.html deleted file mode 100644 index 49507dedb..000000000 --- a/docs/search/files_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_7.js b/docs/search/files_7.js deleted file mode 100644 index 68fb06421..000000000 --- a/docs/search/files_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['list_2ec',['list.c',['../list_8c.html',1,'']]], - ['list_2eh',['list.h',['../list_8h.html',1,'']]], - ['load_2ehpp',['load.hpp',['../load_8hpp.html',1,'']]] -]; diff --git a/docs/search/files_8.html b/docs/search/files_8.html deleted file mode 100644 index 12c6630be..000000000 --- a/docs/search/files_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_8.js b/docs/search/files_8.js deleted file mode 100644 index 235162886..000000000 --- a/docs/search/files_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['matcher_2ehpp',['matcher.hpp',['../matcher_8hpp.html',1,'']]], - ['matops_2ecpp',['matops.cpp',['../matops_8cpp.html',1,'']]], - ['matops_2ehpp',['matops.hpp',['../matops_8hpp.html',1,'']]], - ['mockserver_2ecpp',['mockserver.cpp',['../mockserver_8cpp.html',1,'']]] -]; diff --git a/docs/search/files_9.html b/docs/search/files_9.html deleted file mode 100644 index cabcae2f8..000000000 --- a/docs/search/files_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_9.js b/docs/search/files_9.js deleted file mode 100644 index 154ed53be..000000000 --- a/docs/search/files_9.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['opcodes_2epy',['opcodes.py',['../opcodes_8py.html',1,'']]], - ['operator_2ehpp',['operator.hpp',['../operator_8hpp.html',1,'']]], - ['optimize_2ecpp',['optimize.cpp',['../optimize_8cpp.html',1,'']]], - ['optimize_2ehpp',['optimize.hpp',['../optimize_8hpp.html',1,'']]] -]; diff --git a/docs/search/files_a.html b/docs/search/files_a.html deleted file mode 100644 index f7402215c..000000000 --- a/docs/search/files_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_a.js b/docs/search/files_a.js deleted file mode 100644 index d736a1908..000000000 --- a/docs/search/files_a.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['parse_2ecpp',['parse.cpp',['../parse_8cpp.html',1,'']]], - ['parse_2ehpp',['parse.hpp',['../ead_2parse_8hpp.html',1,'(Global Namespace)'],['../opt_2parse_8hpp.html',1,'(Global Namespace)']]], - ['prop_2ecpp',['prop.cpp',['../prop_8cpp.html',1,'']]], - ['prop_2ehpp',['prop.hpp',['../prop_8hpp.html',1,'']]], - ['pyapis_2epy',['pyapis.py',['../pyapis_8py.html',1,'']]] -]; diff --git a/docs/search/files_b.html b/docs/search/files_b.html deleted file mode 100644 index 7be100307..000000000 --- a/docs/search/files_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_b.js b/docs/search/files_b.js deleted file mode 100644 index 6eb864e01..000000000 --- a/docs/search/files_b.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['random_2ecpp',['random.cpp',['../random_8cpp.html',1,'']]], - ['random_2ehpp',['random.hpp',['../random_8hpp.html',1,'']]], - ['readme_2emd',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]], - ['readme_5fade_2emd',['README_ADE.md',['../_r_e_a_d_m_e___a_d_e_8md.html',1,'']]], - ['readme_5fdbg_2emd',['README_DBG.md',['../_r_e_a_d_m_e___d_b_g_8md.html',1,'']]], - ['readme_5fead_2emd',['README_EAD.md',['../_r_e_a_d_m_e___e_a_d_8md.html',1,'']]], - ['readme_5fpbm_2emd',['README_PBM.md',['../_r_e_a_d_m_e___p_b_m_8md.html',1,'']]], - ['rmdups_2ecpp',['rmdups.cpp',['../rmdups_8cpp.html',1,'']]], - ['rmdups_2ehpp',['rmdups.hpp',['../rmdups_8hpp.html',1,'']]], - ['rules_2emd',['rules.md',['../rules_8md.html',1,'']]] -]; diff --git a/docs/search/files_c.html b/docs/search/files_c.html deleted file mode 100644 index c769b49bd..000000000 --- a/docs/search/files_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_c.js b/docs/search/files_c.js deleted file mode 100644 index 49e38ec83..000000000 --- a/docs/search/files_c.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['save_2ehpp',['save.hpp',['../save_8hpp.html',1,'']]], - ['serialize_2ehpp',['serialize.hpp',['../serialize_8hpp.html',1,'']]], - ['session_2ehpp',['session.hpp',['../dbg_2grpc_2session_8hpp.html',1,'(Global Namespace)'],['../ead_2session_8hpp.html',1,'(Global Namespace)']]], - ['shape_2ecpp',['shape.cpp',['../shape_8cpp.html',1,'']]], - ['shape_2ehpp',['shape.hpp',['../shape_8hpp.html',1,'']]], - ['stats_2ecpp',['stats.cpp',['../stats_8cpp.html',1,'']]], - ['stats_2ehpp',['stats.hpp',['../stats_8hpp.html',1,'']]], - ['stream_2ecpp',['stream.cpp',['../stream_8cpp.html',1,'']]] -]; diff --git a/docs/search/files_d.html b/docs/search/files_d.html deleted file mode 100644 index 54e39775b..000000000 --- a/docs/search/files_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_d.js b/docs/search/files_d.js deleted file mode 100644 index d3bf2ac3e..000000000 --- a/docs/search/files_d.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['tag_2ecpp',['tag.cpp',['../tag_8cpp.html',1,'']]], - ['tag_2ehpp',['tag.hpp',['../tag_8hpp.html',1,'']]], - ['template_2epy',['template.py',['../template_8py.html',1,'']]], - ['tensor_2ehpp',['tensor.hpp',['../tensor_8hpp.html',1,'']]], - ['traveler_2ecpp',['traveler.cpp',['../traveler_8cpp.html',1,'']]], - ['traveler_2ehpp',['traveler.hpp',['../traveler_8hpp.html',1,'']]], - ['tree_2ehpp',['tree.hpp',['../tree_8hpp.html',1,'']]] -]; diff --git a/docs/search/files_e.html b/docs/search/files_e.html deleted file mode 100644 index febb54941..000000000 --- a/docs/search/files_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/files_e.js b/docs/search/files_e.js deleted file mode 100644 index db679c444..000000000 --- a/docs/search/files_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['variable_2ehpp',['variable.hpp',['../variable_8hpp.html',1,'']]], - ['voter_2ehpp',['voter.hpp',['../voter_8hpp.html',1,'']]] -]; diff --git a/docs/search/functions_0.html b/docs/search/functions_0.html deleted file mode 100644 index 0539c8ced..000000000 --- a/docs/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js deleted file mode 100644 index 637599e25..000000000 --- a/docs/search/functions_0.js +++ /dev/null @@ -1,33 +0,0 @@ -var searchData= -[ - ['_5fapply_5fstyles',['_apply_styles',['../namespacecsv__to__png.html#ac86331e1e4dd1f1e9b13863664c002e2',1,'csv_to_png']]], - ['_5fdecl_5ffunc',['_decl_func',['../namespaceapis.html#af082b6ddf4f3e76c469d78d5e5cf3558',1,'apis']]], - ['_5fdefn_5ffunc',['_defn_func',['../namespaceapis.html#a17c0ec59cc3da40d742d6663955561da',1,'apis']]], - ['_5fhandle_5fapi_5fheader',['_handle_api_header',['../namespaceapis.html#af86173c808ed77da53e37d4cd03b8094',1,'apis']]], - ['_5fhandle_5fapi_5fsource',['_handle_api_source',['../namespaceapis.html#aba7642663c01a1b1a164ae7360b890da',1,'apis']]], - ['_5fhandle_5fapi_5ftemplates',['_handle_api_templates',['../namespaceapis.html#a8b241bdb2f87afcf9f16711bd2977c69',1,'apis']]], - ['_5fhandle_5fcases',['_handle_cases',['../namespacedtypes.html#a59abb9b3a6af9014eb82ce4eb73be9aa',1,'dtypes']]], - ['_5fhandle_5fcode2names',['_handle_code2names',['../namespaceopcodes.html#a953b248a8c756ad1023b141dcf9e29c0',1,'opcodes']]], - ['_5fhandle_5fconversions',['_handle_conversions',['../namespacedtypes.html#acd10e772b3401d1a5660095120dac150',1,'dtypes']]], - ['_5fhandle_5fdefs',['_handle_defs',['../namespacepyapis.html#af0889a8a12bed9318c7a203efe57ad8c',1,'pyapis']]], - ['_5fhandle_5fenumeration',['_handle_enumeration',['../namespacedtypes.html#ac7fa3ef5957ddef6f7e9fc4a48a8ad63',1,'dtypes']]], - ['_5fhandle_5fget_5ftypes',['_handle_get_types',['../namespacedtypes.html#a74abe913b159de1a8769079e13ea3414',1,'dtypes']]], - ['_5fhandle_5fmapping',['_handle_mapping',['../namespacedtypes.html#a2edb6aa02f84533951e4fe2f62487a7e',1,'dtypes']]], - ['_5fhandle_5fname2codes',['_handle_name2codes',['../namespaceopcodes.html#ad1895613e67d988a780e3eb777cd2fb7',1,'opcodes']]], - ['_5fhandle_5fname2types',['_handle_name2types',['../namespacedtypes.html#a1bd0f7501c8ab16cc0bc5403cc0d9d77',1,'dtypes']]], - ['_5fhandle_5fopcodes',['_handle_opcodes',['../namespaceopcodes.html#a6d3d757032d6e2bc310e006785a35f50',1,'opcodes']]], - ['_5fhandle_5fops',['_handle_ops',['../namespaceopcodes.html#a1a985e12456f8c3d1e7d00a3c1d8f056',1,'opcodes']]], - ['_5fhandle_5fparams',['_handle_params',['../namespaceopcodes.html#ab16ea018a0b3190d540e12f47ee4b1d3',1,'opcodes']]], - ['_5fhandle_5fpybind',['_handle_pybind',['../namespacepyapis.html#a3f4b0246eb682c73d3f8acaa9ff1ce15',1,'pyapis']]], - ['_5fhandle_5fpybind_5ftype',['_handle_pybind_type',['../namespacepyapis.html#acdaf923477ea8d3a85be7b0dfa1ea279',1,'pyapis']]], - ['_5fhandle_5ftype2names',['_handle_type2names',['../namespacedtypes.html#aed8efcb38bd1c1d18be75ed1751a6e19',1,'dtypes']]], - ['_5fhandle_5ftypesizes',['_handle_typesizes',['../namespacedtypes.html#a30455ea929612fcf124b075bfcf3d1eb',1,'dtypes']]], - ['_5fhandle_5funique_5fwrap',['_handle_unique_wrap',['../namespacepyapis.html#a863d3af16bee0276179e7c7cf190a5de',1,'pyapis']]], - ['_5fnullcheck',['_nullcheck',['../namespaceapis.html#adc1252319a39d043cec653420558d44a',1,'apis']]], - ['_5fparse_5fargs',['_parse_args',['../namespaceapis.html#a9940ca508507d48152e1e16a84b1351d',1,'apis']]], - ['_5fstr_5fclean',['_str_clean',['../namespacecsv__to__png.html#aae6cf0944862b60f2cfc3ee2c2d96730',1,'csv_to_png']]], - ['_5fstrip_5ftemplate_5fprefix',['_strip_template_prefix',['../namespacepyapis.html#acb0427e0309100c1e01b667299be08e8',1,'pyapis']]], - ['_5fsub_5fpybind',['_sub_pybind',['../namespacepyapis.html#a7bdc64b92170f29fe2b1a29ba29e36ac',1,'pyapis']]], - ['_5ftemplate_5fdefn_5ffunc',['_template_defn_func',['../namespaceapis.html#a8d9ca43392e67c4f728dfa88458e378d',1,'apis']]], - ['_5fwrap_5ffunc',['_wrap_func',['../namespacepyapis.html#a777c2746d7789dd51e925fd22f0bf6be',1,'pyapis']]] -]; diff --git a/docs/search/functions_1.html b/docs/search/functions_1.html deleted file mode 100644 index 4878b3d12..000000000 --- a/docs/search/functions_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js deleted file mode 100644 index dacfb554a..000000000 --- a/docs/search/functions_1.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['abs',['abs',['../namespaceead.html#a985b9842da98b32da173414884218750',1,'ead']]], - ['absorb',['absorb',['../structtag_1_1_group_tag.html#addf234c45c9f3ec096f7f958ba9520b0',1,'tag::GroupTag::absorb()'],['../structtag_1_1_prop_tag.html#a530f65de30fe452f627a586697113cd3',1,'tag::PropTag::absorb()'],['../structtag_1_1i_tag.html#a98aeed3b29efd4164d38e73c2de92707',1,'tag::iTag::absorb()'],['../structtag_1_1_tag_collective.html#a85e27fa9f47bd09d3fe75477d82c324b',1,'tag::TagCollective::absorb()']]], - ['accept',['accept',['../structade_1_1i_functor.html#a66d87d6447e6d7336e2c118cc1e18a55',1,'ade::iFunctor::accept()'],['../structade_1_1i_leaf.html#aacdc7e234e8a75007f9610352c7ba43e',1,'ade::iLeaf::accept()'],['../structade_1_1i_tensor.html#aa7a69b3831cc43a6d173c08848662b24',1,'ade::iTensor::accept()']]], - ['access',['access',['../structade_1_1i_coord_map.html#a180b66d9db3782b17d7507bfe6967236',1,'ade::iCoordMap::access()'],['../structade_1_1_coord_map.html#aa0509214368694f866addb0df5df784a',1,'ade::CoordMap::access()'],['../structead_1_1_coord_map.html#a8afe688ec42e555d696864627042c441',1,'ead::CoordMap::access()']]], - ['add',['add',['../structade_1_1i_gradient_builder.html#a6450def2b42f1a6a23c0288c8f9d9f4a',1,'ade::iGradientBuilder::add()'],['../structead_1_1_gradient_builder.html#a27a929338ca7211bd735ef15cf6c7cbb',1,'ead::GradientBuilder::add()'],['../structtag_1_1_tag_collective.html#ad17d5481aa71b9f9c1046f8ea3b13c08',1,'tag::TagCollective::add()'],['../namespaceead.html#aa77a63938d5564b0ea2b811e74633095',1,'ead::add()']]], - ['add_5ftag',['add_tag',['../structtag_1_1_tag_registry.html#a7e7641626bfed3949f9ff756d0b376f3',1,'tag::TagRegistry']]], - ['adjacencies',['adjacencies',['../namespacetag.html#ab4b6ab2660636d5db56a3aa17e7b9d59',1,'tag']]], - ['anyconvr',['AnyConvr',['../structead_1_1_any_convr.html#a36b5edb6e05b5e1d977a08541e1369b7',1,'ead::AnyConvr']]], - ['apply_5fshaper',['apply_shaper',['../namespaceade.html#aca8ab70c54a4bdfb4e58b2a3155c7510',1,'ade']]], - ['arg_5frecursive_5ffree',['arg_recursive_free',['../def_8h.html#a7ad5a8e7ad6cb90bf8674ee8cf842e41',1,'def.h']]], - ['arr2vec',['arr2vec',['../namespacepyead.html#a2734c2b4c56ba88a92b2e1e42c23f92c',1,'pyead']]], - ['assign',['assign',['../structead_1_1i_eigen.html#ab4f98cb444314f25d980fdd297e7d7b0',1,'ead::iEigen::assign()'],['../structead_1_1_eigen_tens_op.html#a16e384834eaa6e95b23c4e60c78c52c9',1,'ead::EigenTensOp::assign()'],['../structead_1_1_eigen_mat_op.html#a465dab7f8af269ea96b87943e3a93f7b',1,'ead::EigenMatOp::assign()'],['../structead_1_1_variable.html#a1785383e0b1ac8e3e61f3216d3a56c5d',1,'ead::Variable::assign()'],['../structead_1_1_variable_node.html#a3b6bf413ca25876f793ea17201b0b7b9',1,'ead::VariableNode::assign(T *input, ade::Shape shape)'],['../structead_1_1_variable_node.html#a0afc7346086ada6cbe95374337d25965',1,'ead::VariableNode::assign(TensMapT< T > *tensmap)']]], - ['at',['at',['../structade_1_1_shape.html#a692d84faa24ca653440b0a6f5a4eda6d',1,'ade::Shape']]] -]; diff --git a/docs/search/functions_10.html b/docs/search/functions_10.html deleted file mode 100644 index 6f6fbae23..000000000 --- a/docs/search/functions_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js deleted file mode 100644 index bc88c4a35..000000000 --- a/docs/search/functions_10.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['rand_5funiform',['rand_uniform',['../namespaceead.html#a866f17bd3f6581a6bd17251b72a8dfe5',1,'ead']]], - ['read_5fgraph',['read_graph',['../namespacecsv__to__png.html#a06c638337bb6669277a8a872a6cac313',1,'csv_to_png']]], - ['recursive_5fgroup_5ftag',['recursive_group_tag',['../namespacetag.html#a190dd220f8248370fa8b2f492dce0ffe',1,'tag']]], - ['reduce',['reduce',['../namespaceade.html#a8266683bc19759b285aa18af454d6bbc',1,'ade::reduce()'],['../namespaceead.html#a275163a943d39158a31bb4d8756a51b9',1,'ead::reduce()']]], - ['reduce_5f1d_5fmap',['reduce_1d_map',['../namespaceade.html#a0ad993df72af5b4ebb660e32ccd5ee86',1,'ade']]], - ['reduce_5fgrad',['reduce_grad',['../namespaceead.html#abac42b06ca349173da5340ad9c21d555',1,'ead']]], - ['reduce_5fmap',['reduce_map',['../namespaceade.html#a1930fa4f380973154941ec6743c48ec5',1,'ade::reduce_map()'],['../namespaceead.html#a2a4ad670f80aa2d0f5ac7d6246fd6f2e',1,'ead::reduce_map()']]], - ['reduce_5fsum',['reduce_sum',['../namespaceead.html#a0e94c6e046df21229ab894d41149cfa0',1,'ead']]], - ['register_5fbuilder',['register_builder',['../namespaceead.html#a207fe1e7b4eba126de1b67baed286ae7',1,'ead']]], - ['remove_5fall_5fduplicates',['remove_all_duplicates',['../namespaceopt.html#a42486c385f72159c1411aeb991a0a47c',1,'opt']]], - ['remove_5fduplicates',['remove_duplicates',['../namespaceopt.html#adcf72478749d57afeae94ebfde68814e',1,'opt']]], - ['replace_5fparents',['replace_parents',['../namespaceopt.html#a5b10340d6ebbd69f3014a844424ac688',1,'opt']]], - ['reverse',['reverse',['../structade_1_1i_coord_map.html#aefa18191949c10d211e16c7d07957f88',1,'ade::iCoordMap::reverse()'],['../structade_1_1_coord_map.html#a729c3bc4daf89f8185d22c199dab88a4',1,'ade::CoordMap::reverse()'],['../structead_1_1_coord_map.html#a6115a4baee1592dae3eff57be0c92ea6',1,'ead::CoordMap::reverse()']]], - ['round',['round',['../namespaceead.html#adbfe0695708e636848909677a5730702',1,'ead']]] -]; diff --git a/docs/search/functions_11.html b/docs/search/functions_11.html deleted file mode 100644 index dd88d8b7e..000000000 --- a/docs/search/functions_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js deleted file mode 100644 index fdd6eafec..000000000 --- a/docs/search/functions_11.js +++ /dev/null @@ -1,28 +0,0 @@ -var searchData= -[ - ['save',['save',['../structpbm_1_1_graph_saver.html#a4adc0412df712a75b1aecc1846ead430',1,'pbm::GraphSaver']]], - ['save_5fcoorder',['save_coorder',['../structead_1_1_e_a_d_saver.html#a280dae3aef034c38a35f26ec67a4c1dd',1,'ead::EADSaver::save_coorder()'],['../structpbm_1_1i_saver.html#ada31f4e14147dc5ad211035d026d3017',1,'pbm::iSaver::save_coorder()']]], - ['save_5fdata',['save_data',['../structpbm_1_1_graph_saver.html#af4a4f0936cafb9cf19a17dfb3949efde',1,'pbm::GraphSaver']]], - ['save_5fleaf',['save_leaf',['../structead_1_1_e_a_d_saver.html#ac512e1b9654cb224fe90fed667538ec9',1,'ead::EADSaver::save_leaf()'],['../structpbm_1_1i_saver.html#aaca6cba63f17eb3d8d687edd9811e3fa',1,'pbm::iSaver::save_leaf()']]], - ['save_5fshaper',['save_shaper',['../structead_1_1_e_a_d_saver.html#a14a83536ef5cf15d8b9d63e8fa76615f',1,'ead::EADSaver::save_shaper()'],['../structpbm_1_1i_saver.html#a1f8a32969dcb33173932b3966382c6f2',1,'pbm::iSaver::save_shaper()']]], - ['scalarconvr',['ScalarConvr',['../structead_1_1_scalar_convr.html#af641034f44c901e8d7428b3841448e14',1,'ead::ScalarConvr']]], - ['select',['select',['../namespaceead.html#abb6fe9924b5a618c6205ecd2f5776fb5',1,'ead']]], - ['set_5flabelled',['set_labelled',['../structpbm_1_1_pathed_tens.html#a2752eaf099d564b6fca95df9dfcda777',1,'pbm::PathedTens::set_labelled(StringsT path, ade::TensptrT tens)'],['../structpbm_1_1_pathed_tens.html#a7b8f2299d16fcf3e1af3b2b78b198cf3',1,'pbm::PathedTens::set_labelled(StringsT::iterator path_begin, StringsT::iterator path_end, ade::TensptrT tens)']]], - ['shape',['Shape',['../structade_1_1_shape.html#a75d3e1cea374e9aa648fac6b4cadbb04',1,'ade::Shape::Shape(void)'],['../structade_1_1_shape.html#a30248491a0ecde17ae698ff6419917c6',1,'ade::Shape::Shape(std::vector< DimT > dims)'],['../structade_1_1_shape.html#a4f965312d8df445063305ea750220b3d',1,'ade::Shape::Shape(const Shape &other)=default'],['../structade_1_1_shape.html#ab5dd96f6f468e8b17e66e94ec22a9b41',1,'ade::Shape::Shape(Shape &&other)'],['../structade_1_1_func_arg.html#a189e187f3d8a65ea9426b40ca980c2c9',1,'ade::FuncArg::shape()'],['../structade_1_1_functor.html#a00c3cbc202d5c94ab9a2fa2270e3a688',1,'ade::Functor::shape()'],['../structade_1_1i_tensor.html#a782c626a29501f974532905657c8d66b',1,'ade::iTensor::shape()'],['../structead_1_1_func_arg.html#a4d65dcb32a5a17feb521ae3266ab577e',1,'ead::FuncArg::shape()'],['../structead_1_1_functor.html#a320d3e31eddb68598285b835dd177f31',1,'ead::Functor::shape()'],['../structead_1_1i_leaf.html#ad9b29c9c19aaa524def3e11b25d939db',1,'ead::iLeaf::shape()'],['../structead_1_1i_node.html#a87bb7df12b81a143fcc77544209dc011',1,'ead::iNode::shape()']]], - ['shape_5fconvert',['shape_convert',['../namespaceead.html#a3a7fab6f3fdb81404805e3dc8aae2047',1,'ead']]], - ['shaperize',['shaperize',['../structead_1_1_converter_builder.html#a836c7845f5a138ee6292e176d83adcb2',1,'ead::ConverterBuilder::shaperize()'],['../structopt_1_1i_converter_builder.html#a3529b654307e6971dc7cf91cac920890',1,'opt::iConverterBuilder::shaperize()']]], - ['sigmoid',['sigmoid',['../namespaceead.html#a622fa13086169584c2a28dabb11f5ca0',1,'ead']]], - ['sigmoid_5fgrad',['sigmoid_grad',['../namespaceead.html#a9b4ac8fb00f70530ddc1cbf3506313b8',1,'ead']]], - ['sin',['sin',['../namespaceead.html#ac763d3ee825349c13f893a0a9bbf0eee',1,'ead']]], - ['size',['size',['../structopt_1_1_seg_v_args.html#afd46de7c887464ecfb1a7482500c465d',1,'opt::SegVArgs']]], - ['slice',['slice',['../namespaceead.html#aee082fcad74faf79411b69b784966a83',1,'ead']]], - ['sort_5fvargs',['sort_vargs',['../namespaceopt.html#a82042ef61fa117e6043258fad6d3f3e0',1,'opt']]], - ['sqrt',['sqrt',['../namespaceead.html#af38aa9cdb5497816b00841aafd3fa0da',1,'ead']]], - ['square',['square',['../namespaceead.html#ab178565824fe7ad714708beb0db21b2d',1,'ead']]], - ['statement_5frecursive_5ffree',['statement_recursive_free',['../def_8h.html#a5eb3733fc9892fdf3295f911ab815aa5',1,'def.h']]], - ['statements_5ffree',['statements_free',['../def_8h.html#aa5db2e5bd68548686b769026540ff669',1,'def.h']]], - ['stop',['stop',['../structdbg_1_1_interactive_session.html#aeba1a7f96134d320eda0aad9e9fa8827',1,'dbg::InteractiveSession']]], - ['sub',['sub',['../namespaceead.html#a3f6e594d3a97892742c8ebf7142f41a8',1,'ead']]], - ['subgraph',['Subgraph',['../structtag_1_1_subgraph.html#a50654962fb29dfc2020671f8ed001532',1,'tag::Subgraph']]], - ['subgraph_5frecursive_5ffree',['subgraph_recursive_free',['../def_8h.html#abd24793f19c71815eda01fce4827d734',1,'def.h']]] -]; diff --git a/docs/search/functions_12.html b/docs/search/functions_12.html deleted file mode 100644 index 7093d19fe..000000000 --- a/docs/search/functions_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_12.js b/docs/search/functions_12.js deleted file mode 100644 index ee69b04e0..000000000 --- a/docs/search/functions_12.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['tag_5fid',['tag_id',['../structtag_1_1_group_tag.html#ab0e230388213b2894b67a1f17a2726d9',1,'tag::GroupTag::tag_id()'],['../structtag_1_1_prop_tag.html#a2e89ad78d0103508a1a22283c3757b3f',1,'tag::PropTag::tag_id()'],['../structtag_1_1i_tag.html#af374ac0bd33246450ba8b8fe029e8222',1,'tag::iTag::tag_id()']]], - ['tagcollective',['TagCollective',['../structtag_1_1_tag_collective.html#ae6e513a6b74bdccc23b100fa3f41e7c2',1,'tag::TagCollective::TagCollective(void)=default'],['../structtag_1_1_tag_collective.html#a0e09d7ef987552ddcf654a0432f3c02e',1,'tag::TagCollective::TagCollective(TagCollective &&other)']]], - ['tan',['tan',['../namespaceead.html#a011a1b2f6656f2dc145aa7c761fa9c2d',1,'ead']]], - ['tanh',['tanh',['../namespaceead.html#a2b1a3b72e262aecf6302d23147e225c3',1,'ead']]], - ['tens_5fto_5fmatmap',['tens_to_matmap',['../namespaceead.html#addf851de2d1ef37c044346e91d45b27e',1,'ead']]], - ['tens_5fto_5ftensmap',['tens_to_tensmap',['../namespaceead.html#a9b680a69478b60259c8df5cce7142b33',1,'ead']]], - ['tenskey',['TensKey',['../structtag_1_1_tens_key.html#a57f5b519e0251cd82813b17a7b77c1e1',1,'tag::TensKey::TensKey(ade::TensrefT tens)'],['../structtag_1_1_tens_key.html#a447c15bef91e648a72a679590b713d59',1,'tag::TensKey::TensKey(ade::iTensor *tens)'],['../structtag_1_1_tens_key.html#adfe52dd8a46cf238d7c7dc98565cec62',1,'tag::TensKey::TensKey(const ade::iTensor *tens)']]], - ['tensmap_5fto_5fmatmap',['tensmap_to_matmap',['../namespaceead.html#a48d1b586ff981dda2e3d3cfd998f4885',1,'ead']]], - ['to_5fargs',['to_args',['../namespaceade.html#a5d1ecf1bbfdd240df4b5b5f1f516a14b',1,'ade']]], - ['to_5fnode',['to_node',['../structead_1_1_node_converters.html#a086239d80d6458d7c150f358d809d756',1,'ead::NodeConverters']]], - ['to_5fstream',['to_stream',['../struct_c_s_v_equation.html#a4090e11c35dee348a54d148964e19416',1,'CSVEquation']]], - ['to_5fstring',['to_string',['../structade_1_1i_coord_map.html#a1303dc91fea22702ba403732ba25227f',1,'ade::iCoordMap::to_string()'],['../structade_1_1_coord_map.html#a35bd718362918b31a1f0f2a86c2a3c3b',1,'ade::CoordMap::to_string()'],['../structade_1_1_functor.html#a4503e570f95a289825384be36689be9a',1,'ade::Functor::to_string()'],['../structade_1_1i_tensor.html#a01138fc6bce780fcd4b4e495ca050fce',1,'ade::iTensor::to_string()'],['../structade_1_1_shape.html#a92348dfc2c555cae7d1d42a48f59bd6d',1,'ade::Shape::to_string()'],['../structead_1_1_constant.html#aca4a38253b029052ddee905d5b54b413',1,'ead::Constant::to_string()'],['../structead_1_1_coord_map.html#a3715b7b1d10d510f7151a0030a1372ce',1,'ead::CoordMap::to_string()'],['../structead_1_1_functor.html#a85b2391934227fe0e04a6fb9261f7c3c',1,'ead::Functor::to_string()'],['../structead_1_1_scalar_convr.html#a28ea281f57278c1f20dbf96e8325b8f7',1,'ead::ScalarConvr::to_string()'],['../structead_1_1_any_convr.html#a2cf04fdc9cd89c61bd7bcf486dd4a0ba',1,'ead::AnyConvr::to_string()'],['../structead_1_1_func_convr.html#a53a70b1a9f3113c70f3c7b57302247e7',1,'ead::FuncConvr::to_string()'],['../structead_1_1_group_convr.html#a16b3be6544c2b868cea4a90ee89212e5',1,'ead::GroupConvr::to_string()'],['../structead_1_1_variable.html#a190c05ccfe0b41c5fbf7b1c84bca330b',1,'ead::Variable::to_string()'],['../structopt_1_1i_converter.html#a4afeaa790ebe8ec50ee3353a6aa99b1e',1,'opt::iConverter::to_string()'],['../namespaceade.html#adf0ae4c17a6835d771a3e8e1502f9ad6',1,'ade::to_string()'],['../namespaceopt.html#ac970dc5d6e5dee60c06931dbbf0e8d21',1,'opt::to_string()']]], - ['track',['track',['../structdbg_1_1_interactive_session.html#afe0a26dcce85231ed7b8dff50abf2cb4',1,'dbg::InteractiveSession::track()'],['../structead_1_1i_session.html#a9eb6d1e722cf3b308bb81ac6a2b16bac',1,'ead::iSession::track()'],['../structead_1_1_session.html#aa52df8690a41caa1afc07b770e77039b',1,'ead::Session::track()']]], - ['track_5fowners',['track_owners',['../namespaceade.html#a52b49963a902c80984ac8247abdef055',1,'ade']]], - ['type_5fcode',['type_code',['../structade_1_1i_data.html#a82fcc81f250c65c6d51849db2a39dbfe',1,'ade::iData::type_code()'],['../structead_1_1_functor.html#a3d5417f064f7930d308e0f4c6f5af986',1,'ead::Functor::type_code()'],['../structead_1_1i_leaf.html#a048e25c90ae0d58c897c7ac76fd03567',1,'ead::iLeaf::type_code()']]], - ['type_5flabel',['type_label',['../structade_1_1i_data.html#ab9257870f91c7898e75cf9746ab120df',1,'ade::iData::type_label()'],['../structead_1_1_functor.html#ad8d9e9b89f8bbbb65584c8daf383a525',1,'ead::Functor::type_label()'],['../structead_1_1i_leaf.html#af4978cc829bbb88c1da4620f02598f16',1,'ead::iLeaf::type_label()']]], - ['typedata_5fto_5farray',['typedata_to_array',['../namespacepyead.html#a66e75bf12201fc347cb5b5edeeed81ec',1,'pyead']]] -]; diff --git a/docs/search/functions_13.html b/docs/search/functions_13.html deleted file mode 100644 index 051a1eb82..000000000 --- a/docs/search/functions_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_13.js b/docs/search/functions_13.js deleted file mode 100644 index bf805cd0c..000000000 --- a/docs/search/functions_13.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['unif',['unif',['../namespaceead.html#a1d811040e6873d4b24107644325b5854',1,'ead']]], - ['unif_5fgen',['unif_gen',['../namespaceead.html#a0825892810780328b4908b21458762c9',1,'ead::unif_gen(const T &a, const T &b)'],['../namespaceead.html#a234da556606c6cd2596ba0bfc02c34f3',1,'ead::unif_gen(T a, T b)']]], - ['uninitialize',['uninitialize',['../structead_1_1_functor.html#ac84b9ba44ff0d19c8534fffbf6c5c7c2',1,'ead::Functor']]], - ['update',['update',['../structade_1_1i_operable_func.html#a7d62bff87fa70aeb87b5a598102a54cc',1,'ade::iOperableFunc::update()'],['../structdbg_1_1_interactive_session.html#a551a74148628ba15d384e8f30a525124',1,'dbg::InteractiveSession::update()'],['../structead_1_1_constant_node.html#a3ab0028bdc7b081949cf9287b1cff02e',1,'ead::ConstantNode::update()'],['../structead_1_1_functor.html#a2334ce2784155f68dda7969b4bca416c',1,'ead::Functor::update()'],['../structead_1_1_functor_node.html#aac638e0a6d43910fc804b90371f7f7b2',1,'ead::FunctorNode::update()'],['../structead_1_1i_node.html#ac561b6999afeedc384fbd89df5a8dd73',1,'ead::iNode::update()'],['../structead_1_1i_session.html#adc979f16a2d03ea7ec4430519a5c9c7f',1,'ead::iSession::update()'],['../structead_1_1_session.html#a10e4ce15709901f6ec94d7a05c7810b7',1,'ead::Session::update()'],['../structead_1_1_variable_node.html#a294a946a51e1fdc2d54e4fdf3908dff9',1,'ead::VariableNode::update()']]], - ['update_5fchild',['update_child',['../structade_1_1_functor.html#a0451b730e978e70f9a17d9750bf1a86d',1,'ade::Functor::update_child()'],['../structade_1_1i_functor.html#a121313edee1dcbfe1a2039670263dc7b',1,'ade::iFunctor::update_child()'],['../structead_1_1_functor.html#a318fc8ebf9f7a588dc2be20d90cb9d6c',1,'ead::Functor::update_child()']]], - ['update_5fgraph',['update_graph',['../structdbg_1_1_graph_emitter_client.html#ae5cdac1d92a7219f4b05fec72a5a838b',1,'dbg::GraphEmitterClient']]], - ['update_5fnode_5fdata',['update_node_data',['../structdbg_1_1_graph_emitter_client.html#aa90224c0b466f9434222634f68c5c90a',1,'dbg::GraphEmitterClient']]], - ['update_5ftarget',['update_target',['../structdbg_1_1_interactive_session.html#ade870427e4e82657e932cd12b9a1608b',1,'dbg::InteractiveSession::update_target()'],['../structead_1_1i_session.html#a569a7bf347f81dad30b9f645a247ebe1',1,'ead::iSession::update_target()'],['../structead_1_1_session.html#a865256e1e6c86df96f7eeae46d910907',1,'ead::Session::update_target()']]], - ['updategraph',['UpdateGraph',['../struct_graph_emitter_impl.html#a2cfb36501bd3fafb84e9f99f1c80ca4e',1,'GraphEmitterImpl']]], - ['updatenodedata',['UpdateNodeData',['../struct_graph_emitter_impl.html#afa696b4c85a7d080ffce8c0d6e8524f9',1,'GraphEmitterImpl']]] -]; diff --git a/docs/search/functions_14.html b/docs/search/functions_14.html deleted file mode 100644 index d5fdbda44..000000000 --- a/docs/search/functions_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_14.js b/docs/search/functions_14.js deleted file mode 100644 index 04cbc0284..000000000 --- a/docs/search/functions_14.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['variable',['Variable',['../structead_1_1_variable.html#a95d27d62b4626ccb79dcad69fcffd952',1,'ead::Variable::Variable(T *data, ade::Shape shape, std::string label)'],['../structead_1_1_variable.html#a518a1ba7d96442d589200c28fc7c54ff',1,'ead::Variable::Variable(const Variable< T > &other)=default'],['../structead_1_1_variable.html#ad7cfafd6adfc668e20073b0532b4776b',1,'ead::Variable::Variable(Variable< T > &&other)=default']]], - ['variablenode',['VariableNode',['../structead_1_1_variable_node.html#a114573f37b0bf88157276e125dcf867a',1,'ead::VariableNode']]], - ['variadicvoter',['VariadicVoter',['../structopt_1_1_variadic_voter.html#a596111132de72a05a5d8be2d4b1e5e72',1,'opt::VariadicVoter']]], - ['vector_5fassign',['vector_assign',['../structade_1_1_shape.html#ad84123094695df9886c8cc8f76d4d21e',1,'ade::Shape']]], - ['vectorize',['vectorize',['../namespaceead.html#a1a960c373a79500164308c5c5237160a',1,'ead']]], - ['visit',['visit',['../structade_1_1i_traveler.html#a65fd050e7a346733f1eacc59eea299b1',1,'ade::iTraveler::visit(iLeaf *leaf)=0'],['../structade_1_1i_traveler.html#a6ae5c7df26de362b580a70928a3096dd',1,'ade::iTraveler::visit(iFunctor *func)=0'],['../structade_1_1_once_traveler.html#a2adc9c10796912946729ee9b928fa4b4',1,'ade::OnceTraveler::visit(iLeaf *leaf) override'],['../structade_1_1_once_traveler.html#ab7e645c1710c7bd1db073c46d837dafc',1,'ade::OnceTraveler::visit(iFunctor *func) override'],['../structade_1_1_graph_stat.html#ab3376f6cde9c0d483a32ff63632acbc9',1,'ade::GraphStat::visit(iLeaf *leaf) override'],['../structade_1_1_graph_stat.html#af8a2799b9d659d088ae7a32815dd15fb',1,'ade::GraphStat::visit(iFunctor *func) override'],['../structade_1_1_path_finder.html#a56fd6fb9ab097926addcbb91e83ad778',1,'ade::PathFinder::visit(iLeaf *leaf) override'],['../structade_1_1_path_finder.html#a57a63c9dcad0c13df7af259622c9350b',1,'ade::PathFinder::visit(iFunctor *func) override'],['../structade_1_1_parent_finder.html#a2b76a5eb1fd617c061b4bdf16843938f',1,'ade::ParentFinder::visit(iLeaf *leaf) override'],['../structade_1_1_parent_finder.html#a9d16f3731fd8b69e231d5af30e8679b1',1,'ade::ParentFinder::visit(iFunctor *func) override'],['../struct_c_s_v_equation.html#a81b44fd9adfcd74b513c76b765338273',1,'CSVEquation::visit(ade::iLeaf *leaf) override'],['../struct_c_s_v_equation.html#a782d78f9817c7aa354e13fd7967b5d65',1,'CSVEquation::visit(ade::iFunctor *func) override'],['../structopt_1_1_matcher.html#a56afdc8fa0e990fd73f28121420d8239',1,'opt::Matcher::visit(ade::iLeaf *leaf) override'],['../structopt_1_1_matcher.html#aa8d492d2aeb88ead7c6d8bd7f5b2ed32',1,'opt::Matcher::visit(ade::iFunctor *func) override'],['../structpbm_1_1_graph_saver.html#a8092b1d128a4cc598ee37416cf9ff3e2',1,'pbm::GraphSaver::visit(ade::iLeaf *leaf) override'],['../structpbm_1_1_graph_saver.html#a096ff5ccecabb1584830715240454f4e',1,'pbm::GraphSaver::visit(ade::iFunctor *func) override'],['../structtag_1_1_subgraph.html#aa43d9d88ff77af19ebe9bb1c1346099e',1,'tag::Subgraph::visit(ade::iLeaf *leaf) override'],['../structtag_1_1_subgraph.html#afb5873f32d3ba8d40f034c8b49e9cf7c',1,'tag::Subgraph::visit(ade::iFunctor *func) override']]], - ['visit_5ffunc',['visit_func',['../structade_1_1_once_traveler.html#ab5525147afc93284c5dc0fbf2c4d44b0',1,'ade::OnceTraveler']]], - ['visit_5fleaf',['visit_leaf',['../structade_1_1_once_traveler.html#af912a123939911b19b301af391218e0a',1,'ade::OnceTraveler']]], - ['voterarg',['VoterArg',['../structopt_1_1_voter_arg.html#a18da605db6859feedda52fd2908c7c8a',1,'opt::VoterArg']]] -]; diff --git a/docs/search/functions_15.html b/docs/search/functions_15.html deleted file mode 100644 index 546d13e65..000000000 --- a/docs/search/functions_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_15.js b/docs/search/functions_15.js deleted file mode 100644 index 0311cf265..000000000 --- a/docs/search/functions_15.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['_7eiconverter',['~iConverter',['../structopt_1_1i_converter.html#a934a4aeecbfa33329ded300d48edcc90',1,'opt::iConverter']]], - ['_7eiconverterbuilder',['~iConverterBuilder',['../structopt_1_1i_converter_builder.html#a7ef9b562d90dbefa70a353862a6b6a3d',1,'opt::iConverterBuilder']]], - ['_7eicoordmap',['~iCoordMap',['../structade_1_1i_coord_map.html#a4e8f4d22d68fbf9512f97bfb4d317009',1,'ade::iCoordMap']]], - ['_7eidata',['~iData',['../structade_1_1i_data.html#a066353626db599d549d0fb4d5ab7589d',1,'ade::iData']]], - ['_7eieigen',['~iEigen',['../structead_1_1i_eigen.html#af380100ef38b78f8370c9a96a2bd0f6a',1,'ead::iEigen']]], - ['_7eifunctor',['~iFunctor',['../structade_1_1i_functor.html#a9f5aebb693faea7cc5a822ca403f40c0',1,'ade::iFunctor']]], - ['_7eigradientbuilder',['~iGradientBuilder',['../structade_1_1i_gradient_builder.html#a099e3bf0f646b3da65bd566812261a8a',1,'ade::iGradientBuilder']]], - ['_7eileaf',['~iLeaf',['../structade_1_1i_leaf.html#a3aac6caf3028d56c722a8938f7b5ee71',1,'ade::iLeaf::~iLeaf()'],['../structead_1_1i_leaf.html#a35f51ea6df7c838536ac81ed99bfc210',1,'ead::iLeaf::~iLeaf()']]], - ['_7einode',['~iNode',['../structead_1_1i_node.html#ab9fbcdf0af11a55022dc501a80963fdb',1,'ead::iNode']]], - ['_7eioperablefunc',['~iOperableFunc',['../structade_1_1i_operable_func.html#a04e4bbebb371646563081b0738a85f67',1,'ade::iOperableFunc']]], - ['_7eisession',['~iSession',['../structead_1_1i_session.html#abdfa7282cbfcaa7c76c79a8c561bbe04',1,'ead::iSession']]], - ['_7eitag',['~iTag',['../structtag_1_1i_tag.html#a56bcbb355744938085c000d9d96491b1',1,'tag::iTag']]], - ['_7eitensor',['~iTensor',['../structade_1_1i_tensor.html#a1eb974b967ef2da732ee074e73631342',1,'ade::iTensor']]], - ['_7eitraveler',['~iTraveler',['../structade_1_1i_traveler.html#af8279cb7fbe1363298287f4e2061254a',1,'ade::iTraveler']]], - ['_7eivoter',['~iVoter',['../structopt_1_1i_voter.html#aaf2505ff1b23f19eed593d721b73db36',1,'opt::iVoter']]], - ['_7eoncetraveler',['~OnceTraveler',['../structade_1_1_once_traveler.html#aae9cb5b0173743bafb69b142c81813dd',1,'ade::OnceTraveler']]], - ['_7epathedtens',['~PathedTens',['../structpbm_1_1_pathed_tens.html#ae4d37d286dfcb6dc4891acab5166d740',1,'pbm::PathedTens']]] -]; diff --git a/docs/search/functions_2.html b/docs/search/functions_2.html deleted file mode 100644 index 67d2a392c..000000000 --- a/docs/search/functions_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js deleted file mode 100644 index c08752c06..000000000 --- a/docs/search/functions_2.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['beautify_5fgroups',['beautify_groups',['../namespacetag.html#a60139f3d71faad8153bf0a24f818c80e',1,'tag']]], - ['begin',['begin',['../structade_1_1_shape.html#ac5bcad1a815356a3623978f9608abf50',1,'ade::Shape::begin(void)'],['../structade_1_1_shape.html#ad677c4671e1b24bedaf1736bfddc1dac',1,'ade::Shape::begin(void) const']]], - ['build',['build',['../structead_1_1_scalar_convr.html#ac09b032c4e0723d7efa7ae18ea8a8838',1,'ead::ScalarConvr::build()'],['../structead_1_1_any_convr.html#a34e6c2a470aaa4542858f6d898eb5d06',1,'ead::AnyConvr::build()'],['../structead_1_1_func_convr.html#a262bafe2c53db304d5b305db4d581882',1,'ead::FuncConvr::build()'],['../structead_1_1_group_convr.html#ad9c7797af4e7e29082bc263cbed896e4',1,'ead::GroupConvr::build()'],['../structead_1_1_converter_builder.html#ae03599d3d98ad248560ccf1331946026',1,'ead::ConverterBuilder::build()'],['../structopt_1_1i_converter.html#a4aed636cb3dfb28d30cef31362696d32',1,'opt::iConverter::build()'],['../structopt_1_1i_converter_builder.html#a2bfdea93718b822237f54ae4ee76e1c9',1,'opt::iConverterBuilder::build()']]], - ['build_5fcconv',['build_cconv',['../structead_1_1_converter_builder.html#ab01a1304db803da584e12c809c55605b',1,'ead::ConverterBuilder::build_cconv()'],['../structopt_1_1i_converter_builder.html#a109b8bf8282bf0ff5ad1765b5fcc3e52',1,'opt::iConverterBuilder::build_cconv()']]], - ['build_5ftemplate',['build_template',['../namespacetemplate.html#ad97e0669d2fc38b861c79c2cf6b87921',1,'template']]], - ['builderarg',['BuilderArg',['../structead_1_1_builder_arg.html#a84b78c5642bd7e2f97d044ee41834de7',1,'ead::BuilderArg']]] -]; diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html deleted file mode 100644 index 1f0eedb33..000000000 --- a/docs/search/functions_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js deleted file mode 100644 index 117895ddb..000000000 --- a/docs/search/functions_3.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['c2pshape',['c2pshape',['../namespacepyead.html#a2a71ae2a75ca20b0be914d1eeac5ab5c',1,'pyead']]], - ['chain_5frule',['chain_rule',['../structade_1_1i_gradient_builder.html#a0be45dfc304950c34ee21dd262887cc7',1,'ade::iGradientBuilder::chain_rule()'],['../structead_1_1_gradient_builder.html#a2dce59e6ac88e590ea28a1be91f3682d',1,'ead::GradientBuilder::chain_rule()']]], - ['clear',['clear',['../structdbg_1_1_graph_emitter_client.html#a979aec91073f6a919356c4008c3c3621',1,'dbg::GraphEmitterClient']]], - ['clientconfig',['ClientConfig',['../structdbg_1_1_client_config.html#aef1cabacb3cb2f2258aab9459bee3459',1,'dbg::ClientConfig::ClientConfig(void)=default'],['../structdbg_1_1_client_config.html#a53544e72731acfb47e347ec6bb0d3251',1,'dbg::ClientConfig::ClientConfig(std::chrono::duration< int64_t, std::milli > request_duration, std::chrono::duration< int64_t, std::milli > stream_duration)']]], - ['commvoter',['CommVoter',['../structopt_1_1_comm_voter.html#a3185b0b6ebcb85de14f336f7c5f2f3ef',1,'opt::CommVoter']]], - ['compatible_5fafter',['compatible_after',['../structade_1_1_shape.html#a18e381848d5ba2a286f4c24894f2595c',1,'ade::Shape']]], - ['compatible_5fbefore',['compatible_before',['../structade_1_1_shape.html#a1509b9d4c6e1834e35f715c20dca2c57',1,'ade::Shape']]], - ['connect',['connect',['../structade_1_1i_coord_map.html#a6ce3ec1fdf4f6a5d12e78a6877a873b7',1,'ade::iCoordMap::connect()'],['../structade_1_1_coord_map.html#aa713ce0d727e6b086ca279d13f401de0',1,'ade::CoordMap::connect()'],['../structead_1_1_coord_map.html#ac35de2d94759073abd83c53bc87c795f',1,'ead::CoordMap::connect()']]], - ['constant',['Constant',['../structead_1_1_constant.html#a2151363638c275f18641490a7c0468fb',1,'ead::Constant::Constant(const Constant< T > &other)=delete'],['../structead_1_1_constant.html#a104175b1a7a353fd1ac201f9770784ae',1,'ead::Constant::Constant(Constant< T > &&other)=delete'],['../structead_1_1_constant.html#aa6ebd289ee4324b77dcb9cb3857eff04',1,'ead::Constant::Constant(T *data, ade::Shape shape)']]], - ['constantnode',['ConstantNode',['../structead_1_1_constant_node.html#ad9576ce9a0380be496118bb00d6b046b',1,'ead::ConstantNode']]], - ['conversion_5frecursive_5ffree',['conversion_recursive_free',['../def_8h.html#a0fa9276c3ec1c49d8efedb773b2f3077',1,'def.h']]], - ['convert_5fto_5fnode',['convert_to_node',['../namespaceead.html#a39e1958b555bf0e45a6976002180bf1c',1,'ead']]], - ['convolution',['convolution',['../namespaceead.html#a83db51ca93bca5003c405a6034a0fd4d',1,'ead']]], - ['convolution_5fimage_5fgrad',['convolution_image_grad',['../namespaceead.html#adf070e815b80d0c3db38fcf63e808427',1,'ead']]], - ['convolution_5fkernel_5fgrad',['convolution_kernel_grad',['../namespaceead.html#a0f454f8d79227bae3a802d4ed6fa2141',1,'ead']]], - ['coorderize',['coorderize',['../structead_1_1_converter_builder.html#a69684cd238de19ab3ee0bfbe35e1b87f',1,'ead::ConverterBuilder::coorderize()'],['../structopt_1_1i_converter_builder.html#ab3fd40706d6bb6a4ebc8cf2b7fe977a0',1,'opt::iConverterBuilder::coorderize()'],['../namespaceead.html#ae45d62ba20b2e27b42ba3d2b56eebedb',1,'ead::coorderize()']]], - ['coordinate',['coordinate',['../namespaceade.html#a785be8ee10cd4af039c458e057b32263',1,'ade']]], - ['coordmap',['CoordMap',['../structade_1_1_coord_map.html#afb5c1dcf8267026e74f1fe3b3997785f',1,'ade::CoordMap::CoordMap()'],['../structead_1_1_coord_map.html#a60884e3a44dba7804524c1583f65b4b3',1,'ead::CoordMap::CoordMap()']]], - ['cos',['cos',['../namespaceead.html#a193a7df66d2d2630b6643c69bc01ef4e',1,'ead']]], - ['create_5fgraph',['create_graph',['../structdbg_1_1_graph_emitter_client.html#a00e2a752fca0c627efcae184f73f07c0',1,'dbg::GraphEmitterClient']]], - ['creategraph',['CreateGraph',['../struct_graph_emitter_impl.html#a3b92f029f9dbd09e2e2f9a823b669895',1,'GraphEmitterImpl']]], - ['csv_5fto_5fpng',['csv_to_png',['../namespacecsv__to__png.html#ab71631d71a986f4cbdbafe10eff3680d',1,'csv_to_png']]], - ['csvequation',['CSVEquation',['../struct_c_s_v_equation.html#a273be56d825ba9ef2b427f5ed81a7e83',1,'CSVEquation']]], - ['cube',['cube',['../namespaceead.html#ad05090f76cc3fc52d71f277d95a45f0f',1,'ead']]] -]; diff --git a/docs/search/functions_4.html b/docs/search/functions_4.html deleted file mode 100644 index c5bf87a47..000000000 --- a/docs/search/functions_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js deleted file mode 100644 index 1706e818d..000000000 --- a/docs/search/functions_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['data',['data',['../structade_1_1i_data.html#aee8fdf4137569691381d0714f8b81255',1,'ade::iData::data(void)=0'],['../structade_1_1i_data.html#a874c76e7fc49331a9292a4ab59dc10e1',1,'ade::iData::data(void) const =0'],['../structead_1_1_constant_node.html#aa012ca0866d2432410e63bfdcca6854d',1,'ead::ConstantNode::data()'],['../structead_1_1_functor.html#aa20fe744212bde904397163324bbb8a8',1,'ead::Functor::data(void) override'],['../structead_1_1_functor.html#a9b0b0b611cf8636987e1ab0fd10dde41',1,'ead::Functor::data(void) const override'],['../structead_1_1_functor_node.html#a0294cc202606e23a884d198b5af88291',1,'ead::FunctorNode::data()'],['../structead_1_1i_leaf.html#a0d71e11f67386639f4f13c810092b05a',1,'ead::iLeaf::data(void) override'],['../structead_1_1i_leaf.html#a668fb373ad6399ddb7ccef7a7ea0aa51',1,'ead::iLeaf::data(void) const override'],['../structead_1_1i_node.html#ab98c0fac375371d64bf09947e526e848',1,'ead::iNode::data()'],['../structead_1_1_variable_node.html#abc21dc6e58adfdf155681a74a0a310c4',1,'ead::VariableNode::data()']]], - ['derive',['derive',['../structade_1_1i_gradient_builder.html#a3ac2ff8731d7b130df20050ee3ed0a68',1,'ade::iGradientBuilder::derive()'],['../namespaceead.html#a77639acd784f50c29e75e1ae93213bd0',1,'ead::derive()']]], - ['determinant',['determinant',['../namespaceade.html#aecb7b9f5d18655665d51992ee73d3e43',1,'ade']]], - ['dim_5fcopy',['dim_copy',['../namespaceead_1_1internal.html#a55516717263395348d93245fcd6f667c',1,'ead::internal']]], - ['div',['div',['../namespaceead.html#a603649aa34499c5f571482150c38ee89',1,'ead']]] -]; diff --git a/docs/search/functions_5.html b/docs/search/functions_5.html deleted file mode 100644 index a34446ce7..000000000 --- a/docs/search/functions_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js deleted file mode 100644 index 25d02b911..000000000 --- a/docs/search/functions_5.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['eigenmatop',['EigenMatOp',['../structead_1_1_eigen_mat_op.html#a40ec92bb3321f493f8baf423436d561f',1,'ead::EigenMatOp']]], - ['eigentensop',['EigenTensOp',['../structead_1_1_eigen_tens_op.html#ab225f3d24bdd1ee4514fc1196f2455e5',1,'ead::EigenTensOp']]], - ['emplace',['emplace',['../structopt_1_1i_voter.html#a0d2584849d54d10af40675bafc5aa072',1,'opt::iVoter::emplace()'],['../structopt_1_1_ordr_voter.html#aad4b49f22b7ee38c143a007a06b29584',1,'opt::OrdrVoter::emplace()'],['../structopt_1_1_comm_voter.html#a2e74260ddafdd546d5ecbf4352dbe89c',1,'opt::CommVoter::emplace()'],['../structopt_1_1_variadic_voter.html#a681f3ec955ceefedc9412d57ab428425',1,'opt::VariadicVoter::emplace()']]], - ['end',['end',['../structade_1_1_shape.html#a85700f185320892b5dde0474c88fd33c',1,'ade::Shape::end(void)'],['../structade_1_1_shape.html#a8df8b0d454942a59441c8adcebdc176a',1,'ade::Shape::end(void) const']]], - ['eq',['eq',['../namespaceead.html#a2eba8cc1a701098927bb668fd923f553',1,'ead']]], - ['exp',['exp',['../namespaceead.html#aab849f4595164d20f014d4c1c177b052',1,'ead']]], - ['expired',['expired',['../structtag_1_1_tens_key.html#a8d490729aad7574a4a590f4b376927bc',1,'tag::TensKey']]], - ['extend',['extend',['../namespaceade.html#a81038de1791ea646379829c0b884e855',1,'ade::extend()'],['../namespaceead.html#a9c07ab787e2e6570d28f7c70bdbaaaa7',1,'ead::extend()']]], - ['extend_5fgrad',['extend_grad',['../namespaceead.html#a7027ae743dfaf2faf4abb8180a19fa9f',1,'ead']]], - ['extend_5fmap',['extend_map',['../namespaceade.html#a412292f5b0fc59e97067f20f7a3a7472',1,'ade::extend_map()'],['../namespaceead.html#a4c1bb3a6c6786d1848b6e5766b0b286f',1,'ead::extend_map()']]] -]; diff --git a/docs/search/functions_6.html b/docs/search/functions_6.html deleted file mode 100644 index 6fd4b1f37..000000000 --- a/docs/search/functions_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js deleted file mode 100644 index dbb8d00c6..000000000 --- a/docs/search/functions_6.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['filter_5fhead',['filter_head',['../namespacetag.html#ad69a8c01b57b92a62b370bec143f106c',1,'tag']]], - ['flip',['flip',['../namespaceade.html#af18a7a81026deb0cac924914a1f5a0c0',1,'ade']]], - ['flip_5fmap',['flip_map',['../namespaceade.html#a141f823de42b05265505c4ddffbe377b',1,'ade']]], - ['forward',['forward',['../structade_1_1i_coord_map.html#abc27f1c79994569812647d63401e208d',1,'ade::iCoordMap::forward()'],['../structade_1_1_coord_map.html#a179711b98f6980bd4e5e8f592fccb0c6',1,'ade::CoordMap::forward()'],['../structead_1_1_coord_map.html#a3b7c08ed2ff52929eb09af234686c8b8',1,'ead::CoordMap::forward()']]], - ['funcarg',['FuncArg',['../structade_1_1_func_arg.html#a5b402e888ff1825d682239ab7b6881e7',1,'ade::FuncArg::FuncArg(TensptrT tensor, CoordptrT shaper)'],['../structade_1_1_func_arg.html#ae8a6b8bb1a4160cd56d09a040dcac22b',1,'ade::FuncArg::FuncArg(TensptrT tensor, CoordptrT shaper, bool map_io, CoordptrT coorder)'],['../structead_1_1_func_arg.html#a6f5807799eb69e654fb2e3af9a5e7fc4',1,'ead::FuncArg::FuncArg()']]], - ['funcconvr',['FuncConvr',['../structead_1_1_func_convr.html#a6c45115ca42f8cb8d5fcf2f3b6ff534c',1,'ead::FuncConvr']]], - ['functor',['Functor',['../structade_1_1_functor.html#a50b66b702948e0c4f40acb4ab9dd623d',1,'ade::Functor::Functor(Opcode opcode, Shape shape, ArgsT args)'],['../structade_1_1_functor.html#af892aba37262c64ec01d6156f3342e38',1,'ade::Functor::Functor(const Functor &other)=default'],['../structade_1_1_functor.html#a08759b547e2005ce0eb16c7ea488951f',1,'ade::Functor::Functor(Functor &&other)=default'],['../structead_1_1_functor.html#a0a07466c94b01bf43a46acf23097633c',1,'ead::Functor::Functor(const Functor< T > &other)=delete'],['../structead_1_1_functor.html#a2bef78d86db9164cf8e39e3f332bee79',1,'ead::Functor::Functor(ade::Opcode opcode, ade::Shape shape, ade::ArgsT args)'],['../structead_1_1_functor.html#a2a7f2dbee3eb9fb44e76526c173e80f2',1,'ead::Functor::Functor(Functor< T > &&other)=default']]], - ['functornode',['FunctorNode',['../structead_1_1_functor_node.html#a5db0e6a012a136ef27cb3b191a252ab3',1,'ead::FunctorNode']]] -]; diff --git a/docs/search/functions_7.html b/docs/search/functions_7.html deleted file mode 100644 index 6e09abf1b..000000000 --- a/docs/search/functions_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js deleted file mode 100644 index c5eca8ddc..000000000 --- a/docs/search/functions_7.js +++ /dev/null @@ -1,34 +0,0 @@ -var searchData= -[ - ['generate_5fcoorder',['generate_coorder',['../structead_1_1_e_a_d_loader.html#addaba19dd5ff4813e7b130b91deeb8cc',1,'ead::EADLoader::generate_coorder()'],['../structpbm_1_1i_loader.html#a6a12d5a4ae29bba1880d14a0de51d923',1,'pbm::iLoader::generate_coorder()']]], - ['generate_5ffunc',['generate_func',['../structead_1_1_e_a_d_loader.html#a803c175f6d239818b868ee7900827f90',1,'ead::EADLoader::generate_func()'],['../structpbm_1_1i_loader.html#adc256f8b3a450bf750e0e458083baeaf',1,'pbm::iLoader::generate_func()']]], - ['generate_5fleaf',['generate_leaf',['../structead_1_1_e_a_d_loader.html#a0f76982ce2370688459cafa5c149dba7',1,'ead::EADLoader::generate_leaf()'],['../structpbm_1_1i_loader.html#a6328ed884dfafb45f36bc9e113b9de65',1,'pbm::iLoader::generate_leaf()']]], - ['generate_5fshaper',['generate_shaper',['../structead_1_1_e_a_d_loader.html#a35d2f21b3f2567e14c527d05be52f3e7',1,'ead::EADLoader::generate_shaper()'],['../structpbm_1_1i_loader.html#a9b8b503279ed69d6032a8e882ebd13f7',1,'pbm::iLoader::generate_shaper()']]], - ['get',['get',['../structade_1_1_functor.html#a64dca909ffd6ddc578e352774a05e4da',1,'ade::Functor::get(Opcode opcode, ArgsT args)'],['../structade_1_1_functor.html#af4919bd1040571d3e95fe037366b1af5',1,'ade::Functor::get(const Functor &other)'],['../structade_1_1_functor.html#a6b165cddd9747bb829009a12d4d2b8ef',1,'ade::Functor::get(Functor &&other)'],['../structead_1_1_constant.html#af037e8482e6ef2dcb2c81f71cd22dba1',1,'ead::Constant::get()'],['../structead_1_1_functor.html#a8b5adb9c94668edea1829eee1ffe9f13',1,'ead::Functor::get(ade::Opcode opcode, ArgsT< T > args)'],['../structead_1_1_functor.html#a5c9101174e2ef9d8ecf98601ee0fcb89',1,'ead::Functor::get(Functor< T > &&other)'],['../structead_1_1_variable.html#a318b7a02f8e4e9318bb595a406fcded0',1,'ead::Variable::get(T *ptr, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a6b66566e867b7b42f81a169e12f82ca9',1,'ead::Variable::get(ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a9b51e33d72fd676e523d762211f35c63',1,'ead::Variable::get(T scalar, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#aff960098f751c21a02078c8dcd377e67',1,'ead::Variable::get(std::vector< T > data, ade::Shape shape, std::string label="")'],['../structead_1_1_variable.html#a3abb376cc6927816f10b68c94f457a87',1,'ead::Variable::get(const Variable< T > &other)'],['../structead_1_1_variable.html#a4ea9f7b97ac781c065ea961bc590b1d4',1,'ead::Variable::get(Variable< T > &&other)']]], - ['get_5fchildren',['get_children',['../structade_1_1_functor.html#ab15cc2bb1f427f25b16d78080f5a0572',1,'ade::Functor::get_children()'],['../structade_1_1i_functor.html#a074e2f5304eb5d59e585e480d27f8953',1,'ade::iFunctor::get_children()'],['../structead_1_1_functor.html#ae6167c35b9829f6d2ed9f9a0075c11c4',1,'ead::Functor::get_children()']]], - ['get_5fconst_5fone',['get_const_one',['../structade_1_1i_gradient_builder.html#ae6d798a19cfb9d4b509ce337e2199a93',1,'ade::iGradientBuilder::get_const_one()'],['../structead_1_1_gradient_builder.html#a8be9983bf7925a3b515216b1fdc54f6e',1,'ead::GradientBuilder::get_const_one()']]], - ['get_5fconst_5fzero',['get_const_zero',['../structade_1_1i_gradient_builder.html#a8135ef40f87ea7928ca40694910035f6',1,'ade::iGradientBuilder::get_const_zero()'],['../structead_1_1_gradient_builder.html#abe92b6d7310a92a723ddc2ee489afb27',1,'ead::GradientBuilder::get_const_zero()']]], - ['get_5fcoorder',['get_coorder',['../structade_1_1_func_arg.html#ab5c06f187d8cb2583b518ffda6365dc3',1,'ade::FuncArg::get_coorder()'],['../structead_1_1_func_arg.html#a9a9b1752d173711101c0c6a225648722',1,'ead::FuncArg::get_coorder()']]], - ['get_5fengine',['get_engine',['../namespaceead.html#a4599741f2f5ed160bb373e51ae9bf496',1,'ead']]], - ['get_5fgroup_5freg',['get_group_reg',['../namespacetag.html#a8e04df7870f604a8504beb991ff14729',1,'tag']]], - ['get_5flabel',['get_label',['../structead_1_1_variable_node.html#a736506df3e0984a9adef3ba7242c4f75',1,'ead::VariableNode']]], - ['get_5flabelled',['get_labelled',['../structpbm_1_1_pathed_tens.html#add9847212fdfd105531afaa2f8e938c2',1,'pbm::PathedTens::get_labelled(StringsT path) const'],['../structpbm_1_1_pathed_tens.html#a297b28ac518f082ed01b0d0f3f344cd8',1,'pbm::PathedTens::get_labelled(StringsT::iterator path_begin, StringsT::iterator path_end) const']]], - ['get_5fnode',['get_node',['../structead_1_1_func_arg.html#af5bad15611738414d35ad19762d7d288',1,'ead::FuncArg']]], - ['get_5fopcode',['get_opcode',['../structade_1_1_functor.html#a340d59fb5237a9f14ec907221f1c2d26',1,'ade::Functor::get_opcode()'],['../structade_1_1i_functor.html#a7150b4b4697bd99719b6f424b1fd219c',1,'ade::iFunctor::get_opcode()'],['../structead_1_1_functor.html#a6450bffe52ee26c1255efb9abc265461',1,'ead::Functor::get_opcode()']]], - ['get_5fproperty_5freg',['get_property_reg',['../namespacetag.html#a8645c33a6750979e7a7ee65821b58b63',1,'tag']]], - ['get_5fptr',['get_ptr',['../structead_1_1i_eigen.html#a63258dfb7ba3d6f521798938664c3111',1,'ead::iEigen::get_ptr()'],['../structead_1_1_eigen_tens_op.html#aad54d43f98be168eae695cb2d90b5f5e',1,'ead::EigenTensOp::get_ptr()'],['../structead_1_1_eigen_mat_op.html#ad246ab599ebd172e2b6ccf263334fbe4',1,'ead::EigenMatOp::get_ptr()']]], - ['get_5freg',['get_reg',['../namespacetag.html#ad59098e3480c1d395b4b72098a6c0ab7',1,'tag']]], - ['get_5fscalar',['get_scalar',['../structead_1_1_constant.html#ae4962a1c5075fd795fd47b6570dce4e4',1,'ead::Constant']]], - ['get_5fsession_5fid',['get_session_id',['../structdbg_1_1_interactive_session.html#ad38888517811d24cb51337a9c0efa4d5',1,'dbg::InteractiveSession']]], - ['get_5fshape',['get_shape',['../namespaceead.html#abbaf2225cdf1be2a7894587e9deb4094',1,'ead::get_shape(const TensorT< T > &tens)'],['../namespaceead.html#a8f857c575ce071c45444029f06dd545e',1,'ead::get_shape(const TensMapT< T > &tens)']]], - ['get_5fshaper',['get_shaper',['../structade_1_1_func_arg.html#ab8ad50e0a9249daf935880482efbce6b',1,'ade::FuncArg::get_shaper()'],['../structead_1_1_func_arg.html#a1e4dafa139e345351015f254bba4eda6',1,'ead::FuncArg::get_shaper()']]], - ['get_5ftags',['get_tags',['../structtag_1_1_group_tag.html#a7d5da1205a35e24fe169c5195669d95a',1,'tag::GroupTag::get_tags()'],['../structtag_1_1_prop_tag.html#a71b8d072405362061acf497c46b8e559',1,'tag::PropTag::get_tags()'],['../structtag_1_1i_tag.html#ab6fe462fe6b128a7c2519933b126555e',1,'tag::iTag::get_tags()'],['../structtag_1_1_tag_collective.html#a0baed2294016bee286f1045767237122',1,'tag::TagCollective::get_tags()'],['../structtag_1_1_tag_registry.html#a92bc87b5b2203885e60f182394b406da',1,'tag::TagRegistry::get_tags()']]], - ['get_5ftensor',['get_tensor',['../structade_1_1_func_arg.html#ac1b78c0db5f3415f7a2e92c6062342df',1,'ade::FuncArg::get_tensor()'],['../structead_1_1_constant_node.html#a52a4ccce5009b3992808ac43376889f0',1,'ead::ConstantNode::get_tensor()'],['../structead_1_1_func_arg.html#ab8d109f56bf81ef2c3f30bb6728e0c11',1,'ead::FuncArg::get_tensor()'],['../structead_1_1_functor_node.html#a8449d0d0ab12020cd12235d88624f2fa',1,'ead::FunctorNode::get_tensor()'],['../structead_1_1i_node.html#a5534da810e7394b7a1227066089aca8a',1,'ead::iNode::get_tensor()'],['../structead_1_1_variable_node.html#a2cfd210c608ccfa31e1a020669d290d4',1,'ead::VariableNode::get_tensor()']]], - ['graph_5fto_5fcsvimg',['graph_to_csvimg',['../namespacedbg__wrapper.html#adc10b4628cfe24563cd960299caea32e',1,'dbg_wrapper']]], - ['graphemitterclient',['GraphEmitterClient',['../structdbg_1_1_graph_emitter_client.html#a040a0c146378d295cea5511f4cb00958',1,'dbg::GraphEmitterClient']]], - ['group_5ftag',['group_tag',['../structtag_1_1_group_registry.html#afdde050d51d5c2e03ca47778e0af1779',1,'tag::GroupRegistry']]], - ['groupconvr',['GroupConvr',['../structead_1_1_group_convr.html#a6d15667b6d0002bbc3f17ae425cb049b',1,'ead::GroupConvr']]], - ['groupregistry',['GroupRegistry',['../structtag_1_1_group_registry.html#a5ff8741125edf33227400a80fbdddcd8',1,'tag::GroupRegistry']]], - ['grouptag',['GroupTag',['../structtag_1_1_group_tag.html#a81a71662564f6eb973985a3f43799128',1,'tag::GroupTag']]], - ['gt',['gt',['../namespaceead.html#a14b2e8de30f9f279de9b758fc56dcc5c',1,'ead']]] -]; diff --git a/docs/search/functions_8.html b/docs/search/functions_8.html deleted file mode 100644 index d59ea9719..000000000 --- a/docs/search/functions_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js deleted file mode 100644 index 739b5bc54..000000000 --- a/docs/search/functions_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['has_5fproperty',['has_property',['../structtag_1_1_property_registry.html#a0c5a3cfa7ae978ee7d9c9cd77660355c',1,'tag::PropertyRegistry']]], - ['hash_5fcombine',['hash_combine',['../structopt_1_1_ordr_hasher.html#afa16fed81ca2a2918d6220b419515a80',1,'opt::OrdrHasher']]], - ['healthcheck',['HealthCheck',['../struct_graph_emitter_impl.html#a0dad93088c2067ba52d024e7e48b29b4',1,'GraphEmitterImpl']]], - ['heightmatrix',['HeightMatrix',['../structade_1_1_height_matrix.html#a6a5bfc118047005beac24d84dc4bb56b',1,'ade::HeightMatrix']]] -]; diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html deleted file mode 100644 index 5ccec4291..000000000 --- a/docs/search/functions_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js deleted file mode 100644 index 3d9c6696c..000000000 --- a/docs/search/functions_9.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['identity_5fmap',['identity_map',['../namespaceade.html#a417f117d12812d13411a2e306c4a7f70',1,'ade::identity_map()'],['../namespaceead.html#ac90a9cdeaaff8ac9e8be98fcd7135eb3',1,'ead::identity_map()']]], - ['ileaf',['iLeaf',['../structead_1_1i_leaf.html#a136d4076405a80eae76a8bff88b7e585',1,'ead::iLeaf']]], - ['index',['index',['../namespaceade.html#ae4b0a59c967fe9699b5b66de3c8fab49',1,'ade']]], - ['initialize',['initialize',['../structead_1_1_functor.html#a908d687c1fb5066f379149439f3e5347',1,'ead::Functor']]], - ['inspect',['inspect',['../structopt_1_1i_voter.html#aa0063d0de7125d66b16bfb5111d18b5f',1,'opt::iVoter::inspect()'],['../structopt_1_1_ordr_voter.html#a2a5f1b942c7963be3facbf3fb77f83b3',1,'opt::OrdrVoter::inspect()'],['../structopt_1_1_comm_voter.html#a477b861a5fd5796bbf560531eb01c737',1,'opt::CommVoter::inspect()'],['../structopt_1_1_variadic_voter.html#a4aa1709569d93f8f5e15348e2e490fbb',1,'opt::VariadicVoter::inspect()']]], - ['interactivesession',['InteractiveSession',['../structdbg_1_1_interactive_session.html#a0f596deccf30ea9fcdb48fc74fd09092',1,'dbg::InteractiveSession::InteractiveSession(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig client_cfg=ClientConfig(), tag::TagRegistry &registry=tag::get_reg())'],['../structdbg_1_1_interactive_session.html#a33604dc325cde2f7f21f547cafb16c18',1,'dbg::InteractiveSession::InteractiveSession(std::string host, ClientConfig client_cfg=ClientConfig())']]], - ['inverse',['inverse',['../namespaceade.html#ad9cbea696e35b2eca835de3a246409d0',1,'ade']]], - ['is_5f2d',['is_2d',['../namespaceead.html#a10007e976ea08b26dab5f53d4d6a64a3',1,'ead']]], - ['is_5fbig_5fendian',['is_big_endian',['../namespaceead.html#a00787ba51b486ef26e17b45998db1e82',1,'ead']]], - ['is_5fbijective',['is_bijective',['../structade_1_1i_coord_map.html#a072c0cba065ec82893e0f5ab3f543298',1,'ade::iCoordMap::is_bijective()'],['../structade_1_1_coord_map.html#a279588a2420e26c56caf34acb363dddd',1,'ade::CoordMap::is_bijective()'],['../structead_1_1_coord_map.html#a2ebf42ff3d94f11baa93d1326ec1226b',1,'ead::CoordMap::is_bijective()']]], - ['is_5fconnected',['is_connected',['../structdbg_1_1_graph_emitter_client.html#a0e1e390951a6eed4b276317f034d1023',1,'dbg::GraphEmitterClient']]], - ['is_5fconst',['is_const',['../structead_1_1_constant.html#a1363156a444a0983e4a37d15d18f72d4',1,'ead::Constant::is_const()'],['../structead_1_1i_leaf.html#ab685d664b34cbc4d631aef74bc2786d4',1,'ead::iLeaf::is_const()'],['../structead_1_1_variable.html#a2e4f44cbd4ea63b610dc77f3fd432283',1,'ead::Variable::is_const()']]], - ['is_5fequal',['is_equal',['../namespaceopt.html#a95b700d353e5437dbab0ca839bc4f98a',1,'opt::is_equal(ade::CoordptrT a, ade::CoordptrT b)'],['../namespaceopt.html#a769f90cb246dabf273262abdade3d913',1,'opt::is_equal(ade::iLeaf *a, ade::iLeaf *b)'],['../namespaceopt.html#a8023a6147a99d898f27d5a828f6826d7',1,'opt::is_equal(ade::iFunctor *a, ade::iFunctor *b)']]], - ['is_5fidentity',['is_identity',['../namespaceade.html#a6b6c4cd25145a806179fdf02a9402163',1,'ade']]], - ['is_5fscalar',['is_scalar',['../structead_1_1_constant.html#a827aac59b78043b7093eeaaac19980dd',1,'ead::Constant::is_scalar()'],['../namespaceopt.html#a290c1d0101729a984fefa1b4e9e15e07',1,'opt::is_scalar()']]], - ['is_5funinit',['is_uninit',['../structead_1_1_functor.html#a6a3c61c7415c19be772bacdf4d1a6b6a',1,'ead::Functor']]] -]; diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html deleted file mode 100644 index 3958eb7b9..000000000 --- a/docs/search/functions_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js deleted file mode 100644 index 41ec7efe6..000000000 --- a/docs/search/functions_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['join',['join',['../structdbg_1_1_graph_emitter_client.html#a9abf2fc9f92de79cc6faf9a428609056',1,'dbg::GraphEmitterClient::join()'],['../structdbg_1_1_interactive_session.html#a707c6a647d924b6e82034dc237b5085c',1,'dbg::InteractiveSession::join()'],['../structpbm_1_1_pathed_tens.html#a28fb6ead967a36caf8fa3bb6a752ac2f',1,'pbm::PathedTens::join()']]], - ['join_5fthen_5fstop',['join_then_stop',['../structdbg_1_1_interactive_session.html#a1750d043ef4d86d5548a9fd305cea108',1,'dbg::InteractiveSession']]] -]; diff --git a/docs/search/functions_b.html b/docs/search/functions_b.html deleted file mode 100644 index b99b702d2..000000000 --- a/docs/search/functions_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js deleted file mode 100644 index 8c620e32e..000000000 --- a/docs/search/functions_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['load_5fgraph',['load_graph',['../namespacepbm.html#a0eb7a587fc51c6c771fcb8dfc34fa14d',1,'pbm']]], - ['local_5fderivative',['local_derivative',['../structade_1_1i_gradient_builder.html#a7b85b61f7f97303e9096d4abfc6c3daf',1,'ade::iGradientBuilder::local_derivative()'],['../structead_1_1_gradient_builder.html#a17d5286ea660de65a1954bfc837b44bf',1,'ead::GradientBuilder::local_derivative()']]], - ['log',['log',['../namespaceead.html#adee5b0a9fee0b12f0b4db958d4f0cc85',1,'ead']]], - ['lt',['lt',['../namespaceead.html#ada43674595b3569e7e8de84e82262d28',1,'ead::lt()'],['../namespaceopt.html#a9b94363d0ba133c3226bbab16c665997',1,'opt::lt(ade::CoordptrT a, ade::CoordptrT b)'],['../namespaceopt.html#abcd7703ce112b840a7a38b9a79cdd53b',1,'opt::lt(std::unordered_set< ade::iTensor *> priorities, ade::iLeaf *a, ade::iLeaf *b)'],['../namespaceopt.html#a611bae815562b1297db8143ef6b1f993',1,'opt::lt(std::unordered_set< ade::iTensor *> priorities, ade::iFunctor *a, ade::iFunctor *b)']]] -]; diff --git a/docs/search/functions_c.html b/docs/search/functions_c.html deleted file mode 100644 index 3a33d874d..000000000 --- a/docs/search/functions_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js deleted file mode 100644 index e7fa561b5..000000000 --- a/docs/search/functions_c.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['main',['main',['../mockserver_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): mockserver.cpp'],['../namespaceagen.html#a8b965e262997529d545f1ea3919768e0',1,'agen.main()']]], - ['make_5fconstant',['make_constant',['../namespaceead.html#a30c71c08197b081487e0e74f7834dadf',1,'ead']]], - ['make_5fconstant_5fscalar',['make_constant_scalar',['../namespaceead.html#a7daa32c4e74e9c6ded85c137b40949c1',1,'ead']]], - ['make_5feigenmatrix',['make_eigenmatrix',['../namespaceead.html#a30b8b3a5422b434785a677cde36ce445',1,'ead']]], - ['make_5feigentensor',['make_eigentensor',['../namespaceead.html#a02af73f8c93a9c9bf61be66507d3c2eb',1,'ead']]], - ['make_5ffunctor',['make_functor',['../namespaceead.html#a88515e723bac6d093f759fb0a0c2d796',1,'ead']]], - ['make_5fmatmap',['make_matmap',['../namespaceead.html#a26f160615acaa04c9484a16794937529',1,'ead']]], - ['make_5ftensmap',['make_tensmap',['../namespaceead.html#a36b66d1c50602a5fe3804f8f22d5ec0d',1,'ead']]], - ['make_5ftensor',['make_tensor',['../namespaceead.html#a2610489aa7df2c916bfbf7a1245151f7',1,'ead']]], - ['make_5fvariable',['make_variable',['../namespaceead.html#ac71510b7bd5527a2665e9162143f7327',1,'ead::make_variable(ade::Shape shape, std::string label="")'],['../namespaceead.html#a74381e11e517dc2a330c196724093e46',1,'ead::make_variable(T *data, ade::Shape shape, std::string label="")']]], - ['make_5fvariable_5fscalar',['make_variable_scalar',['../namespaceead.html#ac26aa70368c108d7925b1bab052b77f3',1,'ead']]], - ['map_5fio',['map_io',['../structade_1_1_func_arg.html#a796958637a08f71fd41b58488c969d4c',1,'ade::FuncArg::map_io()'],['../structead_1_1_func_arg.html#a63e97cbb08a951e732b1ee3b82b3121a',1,'ead::FuncArg::map_io()']]], - ['mat_5fto_5fmatmap',['mat_to_matmap',['../namespaceead.html#a699ecace7b1bac414b11d08567c47c57',1,'ead']]], - ['mat_5fto_5ftensmap',['mat_to_tensmap',['../namespaceead.html#ab594c8e34443366a95a732414a20b476',1,'ead']]], - ['match',['match',['../structopt_1_1_voter_arg.html#a774c095b258c963869df64bf017e2284',1,'opt::VoterArg']]], - ['matcher',['Matcher',['../structopt_1_1_matcher.html#a6bdc2c485a11948c7ea1ce099fd62f83',1,'opt::Matcher::Matcher(void)=default'],['../structopt_1_1_matcher.html#ae78a780af2bea144b6e6213d60b7f121',1,'opt::Matcher::Matcher(const VoterPool &voters)']]], - ['matmul',['matmul',['../namespaceade.html#ab6daf41b04bccd42950ae92db8a0439a',1,'ade::matmul()'],['../namespaceead.html#ad6da222897ca9eaf17db2237c091e04c',1,'ead::matmul()']]], - ['max',['max',['../namespaceead.html#a357e8fef2b64acf7c4a796fcf21412ab',1,'ead']]], - ['min',['min',['../namespaceead.html#a656f837a1972833c7dabdb410ac6cc56',1,'ead']]], - ['move_5fhelper',['move_helper',['../structade_1_1_shape.html#ae2cffe358880cabd1a4a06b56c15e2b5',1,'ade::Shape']]], - ['move_5ftags',['move_tags',['../structtag_1_1_tag_registry.html#a07de6ec00ff67e1bfa86781e9ae412fd',1,'tag::TagRegistry']]], - ['mul',['mul',['../namespaceead.html#a24b2c4340e76ca66e27bbd5fb2037feb',1,'ead']]], - ['multigraph_5fto_5fcsvimg',['multigraph_to_csvimg',['../namespacedbg__wrapper.html#a2a53b525d2282677b2ef3727387f3b27',1,'dbg_wrapper']]], - ['multiline_5freplace',['multiline_replace',['../ade__csv_8hpp.html#a5b3fcd17e03950902721ad766466e955',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/functions_d.html b/docs/search/functions_d.html deleted file mode 100644 index 31b75b889..000000000 --- a/docs/search/functions_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js deleted file mode 100644 index 47190db40..000000000 --- a/docs/search/functions_d.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['n_5felems',['n_elems',['../structade_1_1_shape.html#a04fd9614b166a1519221441abeff050d',1,'ade::Shape']]], - ['nbytes',['nbytes',['../structade_1_1i_data.html#aa5c9f438f715fd2be98b436c93f964a9',1,'ade::iData::nbytes()'],['../structead_1_1_functor.html#a656345e1d19d64f653eb4a56a590a71e',1,'ead::Functor::nbytes()'],['../structead_1_1i_leaf.html#a8d00313b1cf0d3005a7532da0e0d828b',1,'ead::iLeaf::nbytes()']]], - ['neg',['neg',['../namespaceead.html#a594cb007c9e08d47774b1b6d1589cb74',1,'ead']]], - ['neq',['neq',['../namespaceead.html#ab80b55b7b91119935354e22c54b6de4e',1,'ead']]], - ['new_5fnumlist',['new_numlist',['../list_8h.html#a45c872863f6fb15f26a606f1a6f191dd',1,'list.h']]], - ['new_5fptrlist',['new_ptrlist',['../list_8h.html#a219b3ab0f2bb641cd8bc26b203abedcd',1,'list.h']]], - ['nodeconverters',['NodeConverters',['../structead_1_1_node_converters.html#a5e0ca8f459e03a5226ddd719fd08bbc9',1,'ead::NodeConverters']]], - ['norm_5fgen',['norm_gen',['../namespaceead.html#a803351e45c60fcb4f8722295acea1ec1',1,'ead']]], - ['numlist_5fclear',['numlist_clear',['../list_8h.html#a41fece6ae3d9653cb4fe2e79c7ce7ef7',1,'list.h']]], - ['numlist_5ffree',['numlist_free',['../list_8h.html#af96ead796d9fb132c38bed80dd7a4594',1,'list.h']]], - ['numlist_5fpushback',['numlist_pushback',['../list_8h.html#a18f16a97c039371fc4387f3cab379f92',1,'list.h']]] -]; diff --git a/docs/search/functions_e.html b/docs/search/functions_e.html deleted file mode 100644 index cddb9bb58..000000000 --- a/docs/search/functions_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js deleted file mode 100644 index ec2612b93..000000000 --- a/docs/search/functions_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['itensor_20_2a',['iTensor *',['../structtag_1_1_tens_key.html#a74db0ce377418153f012c50ed23eb1ee',1,'tag::TensKey']]], - ['oparg',['OpArg',['../structead_1_1_op_arg.html#a9561a3c1b145fe07b9857a52a53e3f84',1,'ead::OpArg']]], - ['operator_20size_5ft',['operator size_t',['../structead_1_1_size_t.html#af2225dfe3072d3139e3769f56cddb2e1',1,'ead::SizeT']]], - ['operator_28_29',['operator()',['../structdbg_1_1_edge_info_hash.html#af91174a062e920af24d00cac4efc7d23',1,'dbg::EdgeInfoHash::operator()()'],['../structopt_1_1_symbol_hash.html#ab3498176de40c5d3f8c56eed4a10edb5',1,'opt::SymbolHash::operator()()'],['../structopt_1_1_ordr_hasher.html#a18abae76066c892674cb637dc8b409ae',1,'opt::OrdrHasher::operator()()'],['../structopt_1_1_comm_hasher.html#a160b74b2fbfbc79d28e68268aa19c09e',1,'opt::CommHasher::operator()()'],['../structtag_1_1_tens_key_hash.html#a8ac47f645b9595e0ef55fad71aa30269',1,'tag::TensKeyHash::operator()()']]], - ['operator_3d',['operator=',['../structade_1_1_functor.html#a6506fcc3100d3017db32f24c792ee3c6',1,'ade::Functor::operator=(const Functor &other)=delete'],['../structade_1_1_functor.html#ac81b6c9b5918d7e30c6d3eec6d33cd97',1,'ade::Functor::operator=(Functor &&other)=delete'],['../structade_1_1_shape.html#acd2a09bd0d441203386e75fe5251d697',1,'ade::Shape::operator=(const Shape &other)=default'],['../structade_1_1_shape.html#a6d9ebce77260266dbc73e8d3b0a08993',1,'ade::Shape::operator=(const std::vector< DimT > &dims)'],['../structade_1_1_shape.html#aff04970d322736d89caeece427a3ac03',1,'ade::Shape::operator=(Shape &&other)'],['../structead_1_1_constant.html#ab2f5b675c9b61ccbd052761c6a4246a3',1,'ead::Constant::operator=(const Constant< T > &other)=delete'],['../structead_1_1_constant.html#afe875cf9df3adb921590cb16120ae577',1,'ead::Constant::operator=(Constant< T > &&other)=delete'],['../structead_1_1_functor.html#ad5e604b859af6ecd7a7936350449abda',1,'ead::Functor::operator=(const Functor< T > &other)=delete'],['../structead_1_1_functor.html#a3b853023dcf8b0b3fbf30556ae96ee50',1,'ead::Functor::operator=(Functor< T > &&other)=delete'],['../structead_1_1_variable.html#a7bd356f8691392854d0ed26231c8852c',1,'ead::Variable::operator=(const Variable< T > &other)=default'],['../structead_1_1_variable.html#a6dd71a5289f64628536a60b30b4cf4c9',1,'ead::Variable::operator=(Variable< T > &&other)=default'],['../structead_1_1_variable.html#a758742f36bb74a48a8e6838072d20c8e',1,'ead::Variable::operator=(std::vector< T > input)'],['../structead_1_1_variable.html#a23fc5758b8262203d537c3a24f2a9cc8',1,'ead::Variable::operator=(const TensorT< T > &input)'],['../structtag_1_1_tag_collective.html#a03a147a4cc3cbe58ca6297d6eac9f820',1,'tag::TagCollective::operator=()']]], - ['operator_3d_3d',['operator==',['../namespacedbg.html#ada40ea60dba248369ff58c0bd0ef22c9',1,'dbg::operator==()'],['../namespaceopt.html#a2676a7b37ab954a2a8d469365f2ac28e',1,'opt::operator==(const Symbol &lhs, const Symbol &rhs)'],['../namespaceopt.html#a903b95cff9efd5fc2cab00fa8efe2bee',1,'opt::operator==(const VoterArgsT &lhs, const VoterArgsT &rhs)'],['../namespaceopt.html#aa20e01c2870226c38bc5d1bb48e22b1e',1,'opt::operator==(const SegVArgs &lhs, const SegVArgs &rhs)'],['../namespacetag.html#a7ebe3b9d6317d1950925dae1ef97bc41',1,'tag::operator==()']]], - ['optimize',['optimize',['../structdbg_1_1_interactive_session.html#a45e0ff8b099d2a2cbe348bcc7cb61b5e',1,'dbg::InteractiveSession::optimize()'],['../structead_1_1_session.html#aaabb645c3f3659d283e2ad5aa5e6cdeb',1,'ead::Session::optimize()'],['../namespaceopt.html#af5cd28769f7711e62d8bf4b4aac600fe',1,'opt::optimize()']]], - ['ordrvoter',['OrdrVoter',['../structopt_1_1_ordr_voter.html#a8715864c171d9bfe8075432562a43cfd',1,'opt::OrdrVoter']]] -]; diff --git a/docs/search/functions_f.html b/docs/search/functions_f.html deleted file mode 100644 index 496729261..000000000 --- a/docs/search/functions_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js deleted file mode 100644 index b848171c8..000000000 --- a/docs/search/functions_f.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['p2cshape',['p2cshape',['../namespacepyead.html#a853f2acc2fa8cbf68397487433839de1',1,'pyead']]], - ['pad',['pad',['../namespaceead.html#ac8f10713ea022f31bf5397b6f77be7ae',1,'ead']]], - ['parse',['parse',['../namespaceagen.html#a646e2ec5a3040a53ccc3ef80f35988d4',1,'agen.parse()'],['../namespaceead.html#ac102d1caf0fb4f0e9a75871185ce94aa',1,'ead::parse()'],['../namespaceopt.html#ab9d9be1023f1cc9481f117420fef6e5f',1,'opt::parse()']]], - ['parse_5ffile',['parse_file',['../namespaceead.html#a7b33b7c67a248376b4c67f8e377bbdb3',1,'ead::parse_file()'],['../def_8h.html#a930812b450d7668d13e980082070dc1f',1,'parse_file(): def.h'],['../namespaceopt.html#adcc3a35d1f8bdea7ba10cdf2e5f47a4a',1,'opt::parse_file()']]], - ['parse_5fstr',['parse_str',['../def_8h.html#a1aa550f58aec9ca446a418aa4a046ca5',1,'def.h']]], - ['pathfinder',['PathFinder',['../structade_1_1_path_finder.html#a97e908678c6b0136bf6e0ccaaa1e5b4f',1,'ade::PathFinder']]], - ['permute',['permute',['../namespaceade.html#a81f596fa172325f3aa53caf6c92a5c87',1,'ade::permute()'],['../namespaceead.html#a623f69139e520371dc27e37365b91f7b',1,'ead::permute(std::vector< ade::RankT > dims)'],['../namespaceead.html#a080552212655073b118b0b99f8a98d52',1,'ead::permute(ade::Shape &outshape, const OpArg< T > &in)']]], - ['permute_5fgrad',['permute_grad',['../namespaceead.html#a826269f4ceddffd298a0918e7b5723bb',1,'ead']]], - ['permute_5fmap',['permute_map',['../namespaceade.html#acdf6babf49e0003043b318fec81ed433',1,'ade::permute_map()'],['../namespaceead.html#ad9c98d8b498a20b74968a2276818c4d7',1,'ead::permute_map()']]], - ['plugin_5fid',['plugin_id',['../classapis_1_1_a_p_is_plugin.html#a9fbbca2c905565577ca3738982a66496',1,'apis.APIsPlugin.plugin_id()'],['../classdtypes_1_1_d_types_plugin.html#af14ea0afa6ca5bab4b619a23e2dc55f1',1,'dtypes.DTypesPlugin.plugin_id()'],['../classopcodes_1_1_opcodes_plugin.html#a885db6bab70519af4059564a3f1d740d',1,'opcodes.OpcodesPlugin.plugin_id()'],['../classpyapis_1_1_py_a_p_is_plugin.html#aed74bc03e303049402290f2579250d8c',1,'pyapis.PyAPIsPlugin.plugin_id()']]], - ['populate_5fgraph',['populate_graph',['../namespaceopt.html#a1d4bdc20806df85595629e4f7801a26e',1,'opt']]], - ['pow',['pow',['../namespaceead.html#aef0fcd217032d5db754a8c1792d326d0',1,'ead']]], - ['prettyequation',['PrettyEquation',['../struct_pretty_equation.html#abe52b36f6c27ff7c65ebbdde12d5705a',1,'PrettyEquation']]], - ['prettytensor',['PrettyTensor',['../struct_pretty_tensor.html#ac10b1604231e1724e9be9474d1223d75',1,'PrettyTensor']]], - ['prettytree',['PrettyTree',['../struct_pretty_tree.html#ab453db0dc22779618c52fd4bf4e8df4a',1,'PrettyTree']]], - ['print',['print',['../struct_pretty_equation.html#a09e6455e6a12326e2ad14fc345dabf2e',1,'PrettyEquation::print(std::ostream &out, ade::TensptrT &ptr)'],['../struct_pretty_equation.html#a14d27a6784b3cd1e19044d7e9468eaaa',1,'PrettyEquation::print(std::ostream &out, ade::iTensor *ptr)'],['../struct_pretty_tensor.html#a89609d319d683bb82832cabdfd8ef973',1,'PrettyTensor::print()'],['../struct_pretty_tree.html#a993ee394110876f1dbfde54caa7b741b',1,'PrettyTree::print()']]], - ['print_5fgraph',['print_graph',['../namespacecsv__to__png.html#a0e34972ea616fbd204ca0d567e2d485b',1,'csv_to_png']]], - ['print_5fhelper',['print_helper',['../struct_pretty_tensor.html#a61389f537a166e42e926b8d5d2f7b1e5',1,'PrettyTensor::print_helper()'],['../struct_pretty_tree.html#ac1dc9c9d25347be832743fe0a9175994',1,'PrettyTree::print_helper()']]], - ['process',['process',['../classapis_1_1_a_p_is_plugin.html#a262c0f389de225335db6948bd25b86b9',1,'apis.APIsPlugin.process()'],['../classdtypes_1_1_d_types_plugin.html#a1c794e26e723a23a045d94ee7aa5fe77',1,'dtypes.DTypesPlugin.process()'],['../classopcodes_1_1_opcodes_plugin.html#a03c6cf58fd9c55a584ac811ee83e729a',1,'opcodes.OpcodesPlugin.process()'],['../classpyapis_1_1_py_a_p_is_plugin.html#a7f5b23bacc91570d5522f9a949f3ea28',1,'pyapis.PyAPIsPlugin.process()']]], - ['property_5ftag',['property_tag',['../structtag_1_1_property_registry.html#a2fde01bf092d2e804bb4e77afe62561b',1,'tag::PropertyRegistry']]], - ['propertyregistry',['PropertyRegistry',['../structtag_1_1_property_registry.html#a9704715e05d9c7cb0fb28fe2a80647aa',1,'tag::PropertyRegistry']]], - ['proptag',['PropTag',['../structtag_1_1_prop_tag.html#a69374138c772268bd80eba9267a11e94',1,'tag::PropTag']]], - ['ptrlist_5fclear',['ptrlist_clear',['../list_8h.html#a905fa8de6149362666d05980f8b83679',1,'list.h']]], - ['ptrlist_5ffree',['ptrlist_free',['../list_8h.html#a499add6fcfa755b7b08afed2a38b0b17',1,'list.h']]], - ['ptrlist_5fpushback',['ptrlist_pushback',['../list_8h.html#a4f4bf57d9dda2f04ec03bb298d6dbe51',1,'list.h']]], - ['pybind11_5fmodule',['PYBIND11_MODULE',['../grpc_8cpp.html#a410dddaa228f0b4ce6498b2e59315796',1,'PYBIND11_MODULE(grpc_dbg, m): grpc.cpp'],['../stream_8cpp.html#a87f730d0c9c92f688f13cd13f5b49020',1,'PYBIND11_MODULE(stream_dbg, m): stream.cpp'],['../ead_8cpp.html#a05aa6e52c0a879d09b3b09477aed6031',1,'PYBIND11_MODULE(ead, m): ead.cpp']]] -]; diff --git a/docs/search/mag_sel.png b/docs/search/mag_sel.png deleted file mode 100644 index 81f6040a2..000000000 Binary files a/docs/search/mag_sel.png and /dev/null differ diff --git a/docs/search/namespaces_0.html b/docs/search/namespaces_0.html deleted file mode 100644 index f55ca63aa..000000000 --- a/docs/search/namespaces_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js deleted file mode 100644 index 3e7dac28d..000000000 --- a/docs/search/namespaces_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['ade',['ade',['../namespaceade.html',1,'']]], - ['agen',['agen',['../namespaceagen.html',1,'']]], - ['apis',['apis',['../namespaceapis.html',1,'']]] -]; diff --git a/docs/search/namespaces_1.html b/docs/search/namespaces_1.html deleted file mode 100644 index 37c816cc4..000000000 --- a/docs/search/namespaces_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_1.js b/docs/search/namespaces_1.js deleted file mode 100644 index 9990d11f6..000000000 --- a/docs/search/namespaces_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['csv_5fto_5fpng',['csv_to_png',['../namespacecsv__to__png.html',1,'']]] -]; diff --git a/docs/search/namespaces_2.html b/docs/search/namespaces_2.html deleted file mode 100644 index 0a9167460..000000000 --- a/docs/search/namespaces_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_2.js b/docs/search/namespaces_2.js deleted file mode 100644 index b8b31fc2d..000000000 --- a/docs/search/namespaces_2.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['dbg',['dbg',['../namespacedbg.html',1,'']]], - ['dbg_5fwrapper',['dbg_wrapper',['../namespacedbg__wrapper.html',1,'']]], - ['dtypes',['dtypes',['../namespacedtypes.html',1,'']]] -]; diff --git a/docs/search/namespaces_3.html b/docs/search/namespaces_3.html deleted file mode 100644 index 9c35eb2f9..000000000 --- a/docs/search/namespaces_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_3.js b/docs/search/namespaces_3.js deleted file mode 100644 index 86396a313..000000000 --- a/docs/search/namespaces_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['ead',['ead',['../namespaceead.html',1,'']]], - ['internal',['internal',['../namespaceead_1_1internal.html',1,'ead']]] -]; diff --git a/docs/search/namespaces_4.html b/docs/search/namespaces_4.html deleted file mode 100644 index 381233203..000000000 --- a/docs/search/namespaces_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_4.js b/docs/search/namespaces_4.js deleted file mode 100644 index cfce30ddb..000000000 --- a/docs/search/namespaces_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['opcodes',['opcodes',['../namespaceopcodes.html',1,'']]], - ['opt',['opt',['../namespaceopt.html',1,'']]] -]; diff --git a/docs/search/namespaces_5.html b/docs/search/namespaces_5.html deleted file mode 100644 index 46ddb254f..000000000 --- a/docs/search/namespaces_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_5.js b/docs/search/namespaces_5.js deleted file mode 100644 index 348cc51a6..000000000 --- a/docs/search/namespaces_5.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['pbm',['pbm',['../namespacepbm.html',1,'']]], - ['pyapis',['pyapis',['../namespacepyapis.html',1,'']]], - ['pyead',['pyead',['../namespacepyead.html',1,'']]] -]; diff --git a/docs/search/namespaces_6.html b/docs/search/namespaces_6.html deleted file mode 100644 index 25c75178c..000000000 --- a/docs/search/namespaces_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/namespaces_6.js b/docs/search/namespaces_6.js deleted file mode 100644 index 365d30d17..000000000 --- a/docs/search/namespaces_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['tag',['tag',['../namespacetag.html',1,'']]], - ['template',['template',['../namespacetemplate.html',1,'']]] -]; diff --git a/docs/search/nomatches.html b/docs/search/nomatches.html deleted file mode 100644 index b1ded27e9..000000000 --- a/docs/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/docs/search/pages_0.html b/docs/search/pages_0.html deleted file mode 100644 index d7528582d..000000000 --- a/docs/search/pages_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js deleted file mode 100644 index bbbbf3197..000000000 --- a/docs/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['ade_20_28automatic_20differentiation_20engine_29',['ADE (Automatic Differentiation Engine)',['../md_ade__r_e_a_d_m_e__a_d_e.html',1,'']]] -]; diff --git a/docs/search/pages_1.html b/docs/search/pages_1.html deleted file mode 100644 index 924fb482e..000000000 --- a/docs/search/pages_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js deleted file mode 100644 index cf3dc74cc..000000000 --- a/docs/search/pages_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['debugger_20_28dbg_29',['Debugger (DBG)',['../md_dbg__r_e_a_d_m_e__d_b_g.html',1,'']]] -]; diff --git a/docs/search/pages_2.html b/docs/search/pages_2.html deleted file mode 100644 index ffc6d9295..000000000 --- a/docs/search/pages_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js deleted file mode 100644 index 00a1dd361..000000000 --- a/docs/search/pages_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['ead_20_28eigen_2dade_29',['EAD (Eigen-ADE)',['../md_ead__r_e_a_d_m_e__e_a_d.html',1,'']]] -]; diff --git a/docs/search/pages_3.html b/docs/search/pages_3.html deleted file mode 100644 index f3746246f..000000000 --- a/docs/search/pages_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js deleted file mode 100644 index 2e5b65096..000000000 --- a/docs/search/pages_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['optimization_20rules_20explained_20in_20natural_20language',['Optimization Rules Explained in Natural Language',['../md_opt_rules.html',1,'']]] -]; diff --git a/docs/search/pages_4.html b/docs/search/pages_4.html deleted file mode 100644 index 593494e9e..000000000 --- a/docs/search/pages_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_4.js b/docs/search/pages_4.js deleted file mode 100644 index 6dfe0c49e..000000000 --- a/docs/search/pages_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pbm_20_28protobuf_20marshaller_29',['PBM (Protobuf Marshaller)',['../md_pbm__r_e_a_d_m_e__p_b_m.html',1,'']]] -]; diff --git a/docs/search/pages_5.html b/docs/search/pages_5.html deleted file mode 100644 index 7033bd6df..000000000 --- a/docs/search/pages_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/pages_5.js b/docs/search/pages_5.js deleted file mode 100644 index 54dc59b9b..000000000 --- a/docs/search/pages_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['tenncor',['Tenncor',['../index.html',1,'']]] -]; diff --git a/docs/search/search.css b/docs/search/search.css deleted file mode 100644 index 3cf9df94a..000000000 --- a/docs/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/docs/search/search.js b/docs/search/search.js deleted file mode 100644 index a554ab9cb..000000000 --- a/docs/search/search.js +++ /dev/null @@ -1,814 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_0.js b/docs/search/typedefs_0.js deleted file mode 100644 index 880e367a9..000000000 --- a/docs/search/typedefs_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['adjmapt',['AdjMapT',['../namespacetag.html#a9cba46943ca1c23cb7f1c104a02ef2b5',1,'tag']]], - ['agroupst',['AGroupsT',['../namespacetag.html#adc952604313a2e54d27b022e4334e420',1,'tag']]], - ['argst',['ArgsT',['../namespaceade.html#a9db559f9967702ac0d7ce882e73e8f15',1,'ade::ArgsT()'],['../namespaceead.html#ab8fc1bf6d7132e0d7993b4d951780216',1,'ead::ArgsT()']]] -]; diff --git a/docs/search/typedefs_1.html b/docs/search/typedefs_1.html deleted file mode 100644 index 7af807db4..000000000 --- a/docs/search/typedefs_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_1.js b/docs/search/typedefs_1.js deleted file mode 100644 index 5a8efee3d..000000000 --- a/docs/search/typedefs_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['builderargst',['BuilderArgsT',['../namespaceead.html#ad4e749f733e8f8c103a941723c8f1d97',1,'ead']]] -]; diff --git a/docs/search/typedefs_10.html b/docs/search/typedefs_10.html deleted file mode 100644 index d8e5942ad..000000000 --- a/docs/search/typedefs_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_10.js b/docs/search/typedefs_10.js deleted file mode 100644 index e12cf8eb7..000000000 --- a/docs/search/typedefs_10.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['tagptrt',['TagptrT',['../namespacetag.html#afc9a6249e41256c44b77accfebc7b8d7',1,'tag']]], - ['tagrepst',['TagRepsT',['../namespacetag.html#ac049e8dda273046c337417103805d260',1,'tag']]], - ['tensmapt',['TensMapT',['../namespaceead.html#a9bcd8d5e06e2e0f4e7f11f316dbbc3b7',1,'ead']]], - ['tensort',['TensorT',['../namespaceead.html#a5ba9c7a56044f2edf8061bba74702e65',1,'ead']]], - ['tensptrt',['TensptrT',['../namespaceade.html#aceac6eb9293c8b2001737f3b26667993',1,'ade']]], - ['tensreft',['TensrefT',['../namespaceade.html#a0cd5d0a139b258e530ac3140bc7ccbb1',1,'ade']]], - ['tenssett',['TensSetT',['../namespaceead.html#aff90e1546478c326db915993e541d4a0',1,'ead::TensSetT()'],['../namespacetag.html#addf439ead4f6f407bc96336c93f7567c',1,'tag::TensSetT()']]], - ['tenst',['TensT',['../namespaceade.html#ab4db19108073a8a4dc5b8cb6aa85ad42',1,'ade::TensT()'],['../namespacepbm.html#a8fdfbc53d17d97799b9bf964dddccced',1,'pbm::TensT()']]] -]; diff --git a/docs/search/typedefs_11.html b/docs/search/typedefs_11.html deleted file mode 100644 index 3f37b8903..000000000 --- a/docs/search/typedefs_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_11.js b/docs/search/typedefs_11.js deleted file mode 100644 index 5fcaf1b06..000000000 --- a/docs/search/typedefs_11.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['varptrt',['VarptrT',['../namespaceead.html#a1451e5cadddfff816e2e2b1f43b469b5',1,'ead']]], - ['voterargst',['VoterArgsT',['../namespaceopt.html#adf3ffa45c46a2277d45cb2e2c159a7fe',1,'opt']]], - ['votptrt',['VotptrT',['../namespaceopt.html#a16dab447400162efdad40dad769938d4',1,'opt']]] -]; diff --git a/docs/search/typedefs_2.html b/docs/search/typedefs_2.html deleted file mode 100644 index 745d076c8..000000000 --- a/docs/search/typedefs_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_2.js b/docs/search/typedefs_2.js deleted file mode 100644 index dc53382b0..000000000 --- a/docs/search/typedefs_2.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['candargst',['CandArgsT',['../namespaceopt.html#abe088a56f57ea4ec30237b5aad94a7c5',1,'opt']]], - ['candst',['CandsT',['../namespaceopt.html#ac27cf0ca8a59c842f6736b669ddab492',1,'opt']]], - ['cdimt',['CDimT',['../namespaceade.html#acdc2096f51fe9d232e19a346fc95d5e7',1,'ade']]], - ['const_5fiterator',['const_iterator',['../structade_1_1_shape.html#af5d9eb48851f23a0ea928618459da7c7',1,'ade::Shape']]], - ['context',['ContexT',['../namespaceopt.html#aad2b7aa7d628257aa90d3c00252fadb7',1,'opt']]], - ['convptrt',['ConvptrT',['../namespaceopt.html#a9309debb487ca336943cfc15c5e54f11',1,'opt']]], - ['coordptrt',['CoordptrT',['../namespaceade.html#ae79e5f62f19677e24148be5a1f8b1afd',1,'ade::CoordptrT()'],['../namespaceead.html#aac572ca05022d1196f622f6e652f404a',1,'ead::CoordptrT()']]], - ['coordt',['CoordT',['../namespaceade.html#a2abdde771b6a0fd0afdafaed7ab00c48',1,'ade']]], - ['cstconvertf',['CstConvertF',['../namespaceopt.html#a1defc2ba52cbd29514de443d558a52c6',1,'opt']]], - ['ctxst',['CtxsT',['../namespaceopt.html#ae033afaaacf8beefe1f58ee429c559aa',1,'opt']]], - ['ctxvalt',['CtxValT',['../namespaceopt.html#ad185bcd4c426ac08ee69fe7f8e968979',1,'opt']]] -]; diff --git a/docs/search/typedefs_3.html b/docs/search/typedefs_3.html deleted file mode 100644 index def60a5be..000000000 --- a/docs/search/typedefs_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_3.js b/docs/search/typedefs_3.js deleted file mode 100644 index c24020e15..000000000 --- a/docs/search/typedefs_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dimensionst',['DimensionsT',['../namespaceead.html#aafd88e301e71d371854132d1dd37f06a',1,'ead']]], - ['dimt',['DimT',['../namespaceade.html#a82682490754c8b3ba8409170d9869500',1,'ade']]] -]; diff --git a/docs/search/typedefs_4.html b/docs/search/typedefs_4.html deleted file mode 100644 index ef733ad27..000000000 --- a/docs/search/typedefs_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_4.js b/docs/search/typedefs_4.js deleted file mode 100644 index defef2238..000000000 --- a/docs/search/typedefs_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['eigenptrt',['EigenptrT',['../namespaceead.html#a3ea4a5ddf09b2f98a3aa203fb6edaf70',1,'ead']]], - ['enginet',['EngineT',['../namespaceead.html#aad5a8ad7506541238ad6a4a13ed9e5b9',1,'ead']]] -]; diff --git a/docs/search/typedefs_5.html b/docs/search/typedefs_5.html deleted file mode 100644 index 94db6d21e..000000000 --- a/docs/search/typedefs_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_5.js b/docs/search/typedefs_5.js deleted file mode 100644 index 1bf56222e..000000000 --- a/docs/search/typedefs_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['funcptrt',['FuncptrT',['../namespaceade.html#a769e13e66ecc72f0d142a85dc7395591',1,'ade']]] -]; diff --git a/docs/search/typedefs_6.html b/docs/search/typedefs_6.html deleted file mode 100644 index bda8ea1c5..000000000 --- a/docs/search/typedefs_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_6.js b/docs/search/typedefs_6.js deleted file mode 100644 index 43cb45d95..000000000 --- a/docs/search/typedefs_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['genf',['GenF',['../namespaceead.html#ad265e95fa887ba847c00105e4697f332',1,'ead']]], - ['gettypef',['GetTypeF',['../ade__csv_8hpp.html#a28a681b652bb0dc99bac8b43bba2e2cb',1,'ade_csv.hpp']]] -]; diff --git a/docs/search/typedefs_7.html b/docs/search/typedefs_7.html deleted file mode 100644 index 565b233f1..000000000 --- a/docs/search/typedefs_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_7.js b/docs/search/typedefs_7.js deleted file mode 100644 index 2ae723b41..000000000 --- a/docs/search/typedefs_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hfunctorst',['HFunctorsT',['../namespaceopt.html#a6f1d9ed513006bb76ffa455e79afdfc0',1,'opt']]] -]; diff --git a/docs/search/typedefs_8.html b/docs/search/typedefs_8.html deleted file mode 100644 index 3063e0327..000000000 --- a/docs/search/typedefs_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_8.js b/docs/search/typedefs_8.js deleted file mode 100644 index b332c79fb..000000000 --- a/docs/search/typedefs_8.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['immutablest',['ImmutablesT',['../namespaceopt.html#a2715f8fde83ed98c3c68c01981bd7c12',1,'opt']]], - ['iterator',['iterator',['../structade_1_1_shape.html#a724478494d1b325cc5f16e35d3c72172',1,'ade::Shape']]] -]; diff --git a/docs/search/typedefs_9.html b/docs/search/typedefs_9.html deleted file mode 100644 index 9c978f7ad..000000000 --- a/docs/search/typedefs_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_9.js b/docs/search/typedefs_9.js deleted file mode 100644 index bd3a4c558..000000000 --- a/docs/search/typedefs_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['labelsmapt',['LabelsMapT',['../dbg_2stream_2ade_8hpp.html#a7839363f7778d49f27d87010378e2050',1,'ade.hpp']]], - ['leafptrt',['LeafptrT',['../namespaceade.html#a1bdf3657cc8a95dd974ad6aa36e2230f',1,'ade']]] -]; diff --git a/docs/search/typedefs_a.html b/docs/search/typedefs_a.html deleted file mode 100644 index 426df9054..000000000 --- a/docs/search/typedefs_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_a.js b/docs/search/typedefs_a.js deleted file mode 100644 index 3a350c9ad..000000000 --- a/docs/search/typedefs_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['matmapt',['MatMapT',['../namespaceead.html#af90b24c9d423aacd2ba3862ad54f09e7',1,'ead']]], - ['matrixt',['MatrixT',['../namespaceade.html#ae0f6687dd704fcf5c00f841da0509246',1,'ade::MatrixT()'],['../namespaceead.html#ab361170f2d37b5e1dd1bbea416208d2c',1,'ead::MatrixT()']]] -]; diff --git a/docs/search/typedefs_b.html b/docs/search/typedefs_b.html deleted file mode 100644 index fe314a131..000000000 --- a/docs/search/typedefs_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_b.js b/docs/search/typedefs_b.js deleted file mode 100644 index 0eebd6fdc..000000000 --- a/docs/search/typedefs_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['nelemt',['NElemT',['../namespaceade.html#a2fba34a89f37ea9ee310914daefd880d',1,'ade']]], - ['nodebuilderf',['NodeBuilderF',['../namespaceead.html#a276bd4e838da52dc8f5f82f6b4ae49e5',1,'ead']]], - ['nodeptrt',['NodeptrT',['../namespaceead.html#ad55ede1032c27cdac013fd8c06e7ec71',1,'ead']]], - ['nodest',['NodesT',['../namespaceead.html#af5246577a59b718cb0315f0433c86b00',1,'ead']]] -]; diff --git a/docs/search/typedefs_c.html b/docs/search/typedefs_c.html deleted file mode 100644 index 3a6a4a76c..000000000 --- a/docs/search/typedefs_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_c.js b/docs/search/typedefs_c.js deleted file mode 100644 index a2c7d756c..000000000 --- a/docs/search/typedefs_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['ownermapt',['OwnerMapT',['../namespaceade.html#a369d1a2ecdeeb7c71f87dc9d50575dc3',1,'ade']]] -]; diff --git a/docs/search/typedefs_d.html b/docs/search/typedefs_d.html deleted file mode 100644 index 8c3b81fde..000000000 --- a/docs/search/typedefs_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_d.js b/docs/search/typedefs_d.js deleted file mode 100644 index f467cd749..000000000 --- a/docs/search/typedefs_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['parentmapt',['ParentMapT',['../structade_1_1_path_finder.html#a725a8d0eeaaf57b606e8149abe317616',1,'ade::PathFinder::ParentMapT()'],['../structade_1_1_parent_finder.html#a496f11c2e0a603c349c69470e7cfc047',1,'ade::ParentFinder::ParentMapT()']]], - ['pathedmapt',['PathedMapT',['../namespacepbm.html#a955cdbd7419581e6e76661a56ac279b3',1,'pbm']]] -]; diff --git a/docs/search/typedefs_e.html b/docs/search/typedefs_e.html deleted file mode 100644 index ccde4cc1d..000000000 --- a/docs/search/typedefs_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_e.js b/docs/search/typedefs_e.js deleted file mode 100644 index 0b07c57de..000000000 --- a/docs/search/typedefs_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['rankt',['RankT',['../namespaceade.html#a635d7c8da15c71a8b2dd58b8753db6d1',1,'ade']]], - ['reduceoutt',['ReduceOutT',['../namespaceead.html#a2b4d50388fac9ab85319e3b0def59b5b',1,'ead']]] -]; diff --git a/docs/search/typedefs_f.html b/docs/search/typedefs_f.html deleted file mode 100644 index 09099791c..000000000 --- a/docs/search/typedefs_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/typedefs_f.js b/docs/search/typedefs_f.js deleted file mode 100644 index 797d51cfc..000000000 --- a/docs/search/typedefs_f.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['sgraphptrt',['SgraphptrT',['../namespacetag.html#a799daa4d02d6030d2815541ca8148442',1,'tag']]], - ['shapet',['ShapeT',['../namespaceade.html#ae85a1831aeb0b2b43c3730301cbaec30',1,'ade']]], - ['stringst',['StringsT',['../namespacepbm.html#a786a0ff59fd4c78d1e89d85fdd9e18b9',1,'pbm']]], - ['subgraphassocst',['SubgraphAssocsT',['../namespacetag.html#ac2f24f29bddead334851d7de69798871',1,'tag']]], - ['subgraphst',['SubgraphsT',['../namespacetag.html#a33ee08663a9b9fd39bfc61dcf47604fa',1,'tag']]] -]; diff --git a/docs/search/variables_0.html b/docs/search/variables_0.html deleted file mode 100644 index 51f7bd6bc..000000000 --- a/docs/search/variables_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_0.js b/docs/search/variables_0.js deleted file mode 100644 index c866f176d..000000000 --- a/docs/search/variables_0.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['_5fconvert_5ftmp',['_convert_tmp',['../namespacedtypes.html#acfaee5bd1db436ebd94e8f942863eb68',1,'dtypes']]], - ['_5fdecl_5ftmp',['_decl_tmp',['../namespaceapis.html#a1c289e4c987f4a9bbc8318463b469a2a',1,'apis']]], - ['_5fdefn_5ftmp',['_defn_tmp',['../namespaceapis.html#a11a09a0d2a8f355b7abae71ad7b22c68',1,'apis']]], - ['_5ffunc_5ffmt',['_func_fmt',['../namespacepyapis.html#aa7a6eb29bfb82479901f9a8c8a4e5b1b',1,'pyapis']]], - ['_5fget_5ftype_5ftmp',['_get_type_tmp',['../namespacedtypes.html#a9c668ee51cadf33bb17279e8b63728d5',1,'dtypes']]], - ['_5fheader_5ftemplate',['_header_template',['../namespaceapis.html#ab60264f2bf65f99e6adfefcfa8fa0f67',1,'apis._header_template()'],['../namespacedtypes.html#aa7f980069f5af0c639129be6ee52255b',1,'dtypes._header_template()'],['../namespaceopcodes.html#aae636a56d4222ea8c80da402dc1e3220',1,'opcodes._header_template()'],['../namespacepyapis.html#a1e8aa2432682aa5ae79c28398beda129',1,'pyapis._header_template()']]], - ['_5fns_5ftemplate',['_ns_template',['../namespaceapis.html#ab965234b46c6741efd3eb3192a947421',1,'apis']]], - ['_5fplugin_5fid',['_plugin_id',['../namespaceapis.html#a2293308dacd433bfd5d478bd5b5d8987',1,'apis._plugin_id()'],['../namespacedtypes.html#a813f03b05838c10111a6e11cfab6423f',1,'dtypes._plugin_id()'],['../namespaceopcodes.html#aa8f338443e959cc7a2182f1d22584f03',1,'opcodes._plugin_id()'],['../namespacepyapis.html#adfa58074fd6c9997ddcce505689f923f',1,'pyapis._plugin_id()']]], - ['_5fpybindt',['_pybindt',['../namespacepyapis.html#a77fcf3bc082bc4e8c80db1ba987dd7b0',1,'pyapis']]], - ['_5fsource_5ftemplate',['_source_template',['../namespaceapis.html#a02903a1bbb93c82c7ff6c1c98d99c789',1,'apis._source_template()'],['../namespacedtypes.html#aff7a28ee6cb3b04b74b8ccb587316124',1,'dtypes._source_template()'],['../namespaceopcodes.html#a86f4ca2518f4b05594843ecfe1b51d96',1,'opcodes._source_template()'],['../namespacepyapis.html#af3b0115839e4736e8c47f924fee22cc2',1,'pyapis._source_template()']]], - ['_5fstyles',['_styles',['../namespacecsv__to__png.html#a7e0968f2662f00259b4669bd3d0c90cd',1,'csv_to_png']]], - ['_5ftemplate_5fdefn_5ftmp',['_template_defn_tmp',['../namespaceapis.html#a02e893e69fea4cc5e526ad3b742ccbe7',1,'apis']]] -]; diff --git a/docs/search/variables_1.html b/docs/search/variables_1.html deleted file mode 100644 index f46154d8b..000000000 --- a/docs/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_1.js b/docs/search/variables_1.js deleted file mode 100644 index 919155f52..000000000 --- a/docs/search/variables_1.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['any_5f',['any_',['../struct_subgraph.html#ab39420d626f1f5c81b14e736740aae70',1,'Subgraph']]], - ['any_5fid_5f',['any_id_',['../structead_1_1_any_convr.html#afa1c6afc7dfe33cc003d1bc936348a36',1,'ead::AnyConvr']]], - ['anys_5f',['anys_',['../structopt_1_1_seg_v_args.html#afcc685787379e287f5d28c11c88cdaae',1,'opt::SegVArgs']]], - ['api_5fheader',['api_header',['../namespaceapis.html#afa05a85a1a9a9451ebfd1fd7b66728ab',1,'apis']]], - ['arg_5f',['arg_',['../structead_1_1_builder_arg.html#a9dfc174de047420138e7bd9511c2a658',1,'ead::BuilderArg']]], - ['args',['args',['../namespacecsv__to__png.html#afef0a68f8837a61d487d981b4fab5644',1,'csv_to_png']]], - ['args_5f',['args_',['../structade_1_1_functor.html#a2c261d16440fc9d99a95a7a95c0573ce',1,'ade::Functor::args_()'],['../structead_1_1_eigen_tens_op.html#aa5c05c4025d3ad7caab6e0f217fe3aa6',1,'ead::EigenTensOp::args_()'],['../structead_1_1_eigen_mat_op.html#a8bf032355a7cbbd431a0c995781f8df3',1,'ead::EigenMatOp::args_()'],['../structead_1_1_functor.html#a2ae92afb314a89ed4604f0e72e5a5281',1,'ead::Functor::args_()'],['../structead_1_1_func_convr.html#a2f25edec4178204e8d07d2b427bd9512',1,'ead::FuncConvr::args_()'],['../structead_1_1_group_convr.html#a031ad114ab22505b95d9df0238540761',1,'ead::GroupConvr::args_()'],['../struct_branch.html#ac3e2e665e32f26c65e1acb921781ccc0',1,'Branch::args_()'],['../structopt_1_1_ordr_voter.html#a4083912a3b141f7ca6e6000187761d65',1,'opt::OrdrVoter::args_()'],['../structopt_1_1_comm_voter.html#a2474522e00bcfd0492ed38c053c2ab45',1,'opt::CommVoter::args_()'],['../structopt_1_1_variadic_voter.html#a5c1275915f344dff1f3cf67b5b62104e',1,'opt::VariadicVoter::args_()']]] -]; diff --git a/docs/search/variables_10.html b/docs/search/variables_10.html deleted file mode 100644 index b62b717e9..000000000 --- a/docs/search/variables_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_10.js b/docs/search/variables_10.js deleted file mode 100644 index 71aef75aa..000000000 --- a/docs/search/variables_10.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['saver_5f',['saver_',['../structpbm_1_1_graph_saver.html#af810671efe6177d2e4fc27abed65813c',1,'pbm::GraphSaver']]], - ['scalar_5f',['scalar_',['../structead_1_1_scalar_convr.html#a644e836b5eaf4c5e0ce7d3e439a6d8da',1,'ead::ScalarConvr::scalar_()'],['../struct_subgraph.html#a709ac00c627381823a8d5c6ce258fd74',1,'Subgraph::scalar_()']]], - ['scalarize_5f',['scalarize_',['../structopt_1_1_matcher.html#a0d2a437469665ffaf52b234f8180d328',1,'opt::Matcher']]], - ['scalars_5f',['scalars_',['../structopt_1_1_seg_v_args.html#a8eae2b4197d1d98b54a92315453b51de',1,'opt::SegVArgs']]], - ['sequential_5fjobs_5f',['sequential_jobs_',['../structdbg_1_1_graph_emitter_client.html#ae7fb55a3ddb3424f4ef80df766eddd6b',1,'dbg::GraphEmitterClient']]], - ['sess_5f',['sess_',['../structdbg_1_1_interactive_session.html#a260ec45d945c43d3d701e338b462e2ad',1,'dbg::InteractiveSession']]], - ['sess_5fid_5f',['sess_id_',['../structdbg_1_1_interactive_session.html#ac2872b2785f43fb25e0300f68f25d922',1,'dbg::InteractiveSession']]], - ['shape_5f',['shape_',['../structade_1_1_functor.html#a99fbfe6298c8fea43e632ea75bf68973',1,'ade::Functor::shape_()'],['../struct_graph_emitter_impl_1_1_node.html#a7697ceb4d9083b1355328bc7d1de5420',1,'GraphEmitterImpl::Node::shape_()'],['../structead_1_1_functor.html#a08742ded550e11f608f810319132aa8c',1,'ead::Functor::shape_()'],['../structead_1_1i_leaf.html#a57a3e92dd3c2097fae2bec09c0174182',1,'ead::iLeaf::shape_()'],['../structead_1_1_op_arg.html#acd3c36ad5064ca4abc9920e9263ccf4e',1,'ead::OpArg::shape_()']]], - ['shaper_5f',['shaper_',['../structade_1_1_func_arg.html#ae6274a8217d8c583899d096731d44891',1,'ade::FuncArg::shaper_()'],['../struct_graph_emitter_impl_1_1_edge.html#a02b103e555a65a74ec5c8741c69fda83',1,'GraphEmitterImpl::Edge::shaper_()'],['../structead_1_1_func_arg.html#a12b0aef4de13a59a3a2575645e5546b5',1,'ead::FuncArg::shaper_()'],['../structead_1_1_builder_arg.html#a461db70893a0835236ebb94f48586298',1,'ead::BuilderArg::shaper_()'],['../structopt_1_1_cand_arg.html#ad14eac35a88e5bc96663ba76a5e42534',1,'opt::CandArg::shaper_()'],['../structopt_1_1_voter_arg.html#a3994680773420f8948ba9f452178a52f',1,'opt::VoterArg::shaper_()'],['../struct_arg.html#aae44ba002042e3fdd5cccb8b6711d596',1,'Arg::shaper_()']]], - ['showshape_5f',['showshape_',['../struct_pretty_equation.html#ad2a0130cedb1cddd2fecaaceaf332bf2',1,'PrettyEquation::showshape_()'],['../struct_c_s_v_equation.html#a7d8694b119898b5a1a41343a54457675',1,'CSVEquation::showshape_()']]], - ['source_5f',['source_',['../struct_conversion.html#adaf67dbd28c968bde529a491ab8e2f15',1,'Conversion']]], - ['stat',['stat',['../structpbm_1_1_graph_saver.html#a332322e0e0bc21b3924b51ccfa490aed',1,'pbm::GraphSaver']]], - ['stat_5f',['stat_',['../structead_1_1_session.html#a3a0015ba5ec1b64074902c26fb2905c1',1,'ead::Session']]], - ['stream_5fduration_5f',['stream_duration_',['../structdbg_1_1_client_config.html#abc7106be41bff8a0cd14060c6e728b77',1,'dbg::ClientConfig']]], - ['stub_5f',['stub_',['../structdbg_1_1_graph_emitter_client.html#a7419edf952445a577f4fc969c3cd3881',1,'dbg::GraphEmitterClient::stub_()'],['../structdbg_1_1_interactive_session.html#ae618f5fb29a0d401b83c8f1bbc4d6384',1,'dbg::InteractiveSession::stub_()']]], - ['subgraph_5f',['subgraph_',['../struct_arg.html#a9ec966245875382456e3963bbf832431',1,'Arg']]], - ['symbols_5f',['symbols_',['../structopt_1_1_rules_context.html#a42b1753f4ab513ad5a4032c0ab096448',1,'opt::RulesContext']]] -]; diff --git a/docs/search/variables_11.html b/docs/search/variables_11.html deleted file mode 100644 index 2ce8561a1..000000000 --- a/docs/search/variables_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_11.js b/docs/search/variables_11.js deleted file mode 100644 index e10e3c04a..000000000 --- a/docs/search/variables_11.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['tag_5f',['tag_',['../struct_group.html#a45cb8d93da9c4cd39716b5f683452c31',1,'Group']]], - ['tag_5fid_5f',['tag_id_',['../structtag_1_1_group_tag.html#ade8a1254d6779558bb278b03996915c1',1,'tag::GroupTag::tag_id_()'],['../structtag_1_1_prop_tag.html#a9ded5999e8e7086ac0442548fda7c993',1,'tag::PropTag::tag_id_()']]], - ['tag_5fnode_5ftype',['tag_node_type',['../namespacedbg.html#a1ad32dbde86ce488ab8728e4be7ca693',1,'dbg']]], - ['tag_5freg_5f',['tag_reg_',['../structtag_1_1_group_registry.html#ac50eae63eb1cd6b49080477a5fcf2d0b',1,'tag::GroupRegistry::tag_reg_()'],['../structtag_1_1_property_registry.html#ad419eafc76287387c7f4562ba184696d',1,'tag::PropertyRegistry::tag_reg_()']]], - ['tag_5fstr_5fkey',['tag_str_key',['../namespacedbg.html#acc1229f84db46962e4cd8258a42ccbef',1,'dbg']]], - ['tags_5f',['tags_',['../struct_graph_emitter_impl_1_1_node.html#a35e1332a950243f603d5d25182cabc46',1,'GraphEmitterImpl::Node::tags_()'],['../structtag_1_1_tag_collective.html#a45f14552504d872c2f87586e50025a1e',1,'tag::TagCollective::tags_()']]], - ['tail_5f',['tail_',['../struct_num_list.html#a1989b00d4d2ce52492ac55877b5085c3',1,'NumList::tail_()'],['../struct_ptr_list.html#af0ff1b9b9c3ba6762a5ceb43ff211832',1,'PtrList::tail_()']]], - ['target_5f',['target_',['../structade_1_1_path_finder.html#ade3a284e63e52e2cf2ea395e9a512207',1,'ade::PathFinder']]], - ['tens_5f',['tens_',['../structpbm_1_1_pathed_tens.html#a637a31b5c0382eea4e431bc37765fcdc',1,'pbm::PathedTens::tens_()'],['../structpbm_1_1_graph_info.html#ab272d0e997a381b95f1988cbf6edac36',1,'pbm::GraphInfo::tens_()']]], - ['tensor_5f',['tensor_',['../structade_1_1_func_arg.html#a726efc0b14782597b951b54819c88d9b',1,'ade::FuncArg::tensor_()'],['../structopt_1_1_cand_arg.html#ac8c4e833c941450f50e279d0f3a5c7d6',1,'opt::CandArg::tensor_()']]], - ['tensorbase_5f',['tensorbase_',['../structead_1_1_eigen_tens_op.html#a2cbd8821e76024dd8d7facb5c078d40e',1,'ead::EigenTensOp']]], - ['to_5fstream_5f',['to_stream_',['../struct_pretty_tree.html#ac5426949bc1f8afee0a52a80dd6cc8f2',1,'PrettyTree']]], - ['tracked_5f',['tracked_',['../structead_1_1_session.html#a55f62907f74db7beb6ecd37549cb92d5',1,'ead::Session']]], - ['traverser_5f',['traverser_',['../struct_pretty_tree.html#a5d0af76976c4af9df6018337a25a949a',1,'PrettyTree']]], - ['type_5f',['type_',['../structopt_1_1_symbol.html#a9c0cb2bfc96161b4bd27c66f2e86e12e',1,'opt::Symbol::type_()'],['../structopt_1_1_voter_arg.html#a9a4bf202dbc95cc72d403cd19cad4976',1,'opt::VoterArg::type_()'],['../struct_subgraph.html#a21ca32aa177d0d16e9715f928ae08a78',1,'Subgraph::type_()'],['../struct_statement.html#a852b46e62a7977a2dc0df63103da0d77',1,'Statement::type_()'],['../struct_ptr_list.html#ad1e31dd216f80ce8b055de2049f07ccf',1,'PtrList::type_()']]] -]; diff --git a/docs/search/variables_12.html b/docs/search/variables_12.html deleted file mode 100644 index bba5857f5..000000000 --- a/docs/search/variables_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_12.js b/docs/search/variables_12.js deleted file mode 100644 index 43aa1ba24..000000000 --- a/docs/search/variables_12.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['update_5fit_5f',['update_it_',['../structdbg_1_1_interactive_session.html#aac5619e6a7c0d237cd066669e612f0dc',1,'dbg::InteractiveSession']]], - ['uuid_5fgen_5f',['uuid_gen_',['../structdbg_1_1_interactive_session.html#ab18efc5b35ec80474398fc95e965fc38',1,'dbg::InteractiveSession']]] -]; diff --git a/docs/search/variables_13.html b/docs/search/variables_13.html deleted file mode 100644 index c92cbcc31..000000000 --- a/docs/search/variables_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_13.js b/docs/search/variables_13.js deleted file mode 100644 index 196b8e7e1..000000000 --- a/docs/search/variables_13.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['val_5f',['val_',['../struct_subgraph.html#aea50bf753ab0c13cb633547957ffa0c3',1,'Subgraph::val_()'],['../struct_statement.html#ab9d41946e5d8a562facf3c39f53a176c',1,'Statement::val_()'],['../struct_num_node.html#aa78cd7f880c42447b190a578926eeb33',1,'NumNode::val_()'],['../struct_ptr_node.html#afd67e41f3a912f15c0f93c27db652c17',1,'PtrNode::val_()'],['../structtag_1_1_tens_key.html#a6ce14a66d03872eb1c53bff08b2caa74',1,'tag::TensKey::val_()']]], - ['var_5f',['var_',['../structead_1_1_variable_node.html#af99f52b62e4249234c2973bbbcfd6301',1,'ead::VariableNode']]], - ['variadic_5f',['variadic_',['../structead_1_1_group_convr.html#a53b19c23d166b67fd0bf296ee2526b61',1,'ead::GroupConvr::variadic_()'],['../struct_branch.html#a4a08c32938b916d53eef060d35e8f586',1,'Branch::variadic_()'],['../structopt_1_1_variadic_voter.html#ad1eab8226416d090526c5ae1f91bc648',1,'opt::VariadicVoter::variadic_()']]], - ['vert_5fbranch',['vert_branch',['../tree_8hpp.html#ac7f4e72d3a369493e1924fab641b2c2a',1,'tree.hpp']]], - ['visited_5f',['visited_',['../structade_1_1_once_traveler.html#af6782e674d9cf230b039d82e070d337e',1,'ade::OnceTraveler::visited_()'],['../structpbm_1_1_graph_saver.html#a1904087cc32f31e16619e6e1de8ca75f',1,'pbm::GraphSaver::visited_()']]], - ['voters_5f',['voters_',['../structopt_1_1_matcher.html#ae942b0004f814490505906ca821a78f8',1,'opt::Matcher::voters_()'],['../structopt_1_1_opt_ctx.html#a25caf2c6daeeb1b88873bddf13ad9132',1,'opt::OptCtx::voters_()']]] -]; diff --git a/docs/search/variables_2.html b/docs/search/variables_2.html deleted file mode 100644 index 15275b7a9..000000000 --- a/docs/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js deleted file mode 100644 index 91cc481f8..000000000 --- a/docs/search/variables_2.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['bijective_5f',['bijective_',['../structead_1_1_coord_map.html#a1eb46bf30055179d9a5b3a86d8ef48e5',1,'ead::CoordMap']]], - ['branch_5f',['branch_',['../struct_subgraph.html#a9577756df81a792e06cc7adeb9be7427',1,'Subgraph']]], - ['branch_5flength_5f',['branch_length_',['../struct_pretty_tree.html#a47becca7692e9630bba1234dcdded85c',1,'PrettyTree']]], - ['branches_5f',['branches_',['../structopt_1_1_seg_v_args.html#a6286bd6e23198ef71cc235192db24f60',1,'opt::SegVArgs::branches_()'],['../structopt_1_1_voter_pool.html#a743ebf82707e1ee2efd4f33868388b3f',1,'opt::VoterPool::branches_()']]], - ['builders_5f',['builders_',['../structead_1_1_node_converters.html#af3ee716170365ee4be686f4ac2aa2926',1,'ead::NodeConverters']]] -]; diff --git a/docs/search/variables_3.html b/docs/search/variables_3.html deleted file mode 100644 index fbc36712f..000000000 --- a/docs/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_3.js b/docs/search/variables_3.js deleted file mode 100644 index 9abd34274..000000000 --- a/docs/search/variables_3.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['candidates_5f',['candidates_',['../structopt_1_1_cand_arg.html#aca5646d51023b449fb5b23da3cc149d7',1,'opt::CandArg::candidates_()'],['../structopt_1_1_matcher.html#aa3804ec677cfee22185fe92627e8a341',1,'opt::Matcher::candidates_()']]], - ['cfg_5f',['cfg_',['../structdbg_1_1_graph_emitter_client.html#a0ea47f63debde5ba173e7abb0ca3f231',1,'dbg::GraphEmitterClient']]], - ['child_5f',['child_',['../structdbg_1_1_edge_info.html#aca2e6f53260486e961908a96bde1a816',1,'dbg::EdgeInfo::child_()'],['../struct_c_s_v_equation_1_1_edge.html#a566da224fdbd2e88802ebed28e9ece11',1,'CSVEquation::Edge::child_()']]], - ['child_5fid_5f',['child_id_',['../struct_graph_emitter_impl_1_1_edge.html#a4139ba8e5425436d93d130d40f3859e2',1,'GraphEmitterImpl::Edge']]], - ['children_5f',['children_',['../structpbm_1_1_pathed_tens.html#a4265e683cd1ffeab4b957a101bb93dfb',1,'pbm::PathedTens::children_()'],['../structtag_1_1_subgraph.html#abe793e8144ad3cf81d712a62ec27ce87',1,'tag::Subgraph::children_()']]], - ['client_5f',['client_',['../structdbg_1_1_interactive_session.html#af959894054e0f96ecc563795e9561792',1,'dbg::InteractiveSession']]], - ['code_5f',['code_',['../structade_1_1_opcode.html#a37bc6502405df1638aa87ba8204f558f',1,'ade::Opcode']]], - ['commutative_5ftag',['commutative_tag',['../namespacetag.html#a87d5b1be905e77f9a527bb187da4bbb8',1,'tag']]], - ['connected_5f',['connected_',['../structdbg_1_1_graph_emitter_client.html#ab9c65d707e61e4000c26e60c9b65ef07',1,'dbg::GraphEmitterClient']]], - ['const_5fconv_5f',['const_conv_',['../structopt_1_1_opt_ctx.html#a7aa3765da6f66663e91b3aa04092bda7',1,'opt::OptCtx']]], - ['content_5f',['content_',['../structtag_1_1_subgraph.html#af04084c22d5b4f35bf4c28a301091472',1,'tag::Subgraph']]], - ['converts_5f',['converts_',['../structopt_1_1_opt_ctx.html#adcc833ef4e7c82028ce1729985806054',1,'opt::OptCtx']]], - ['coorder_5f',['coorder_',['../structade_1_1_func_arg.html#a816fdce0468ebd56faa5413969fe68cd',1,'ade::FuncArg::coorder_()'],['../struct_graph_emitter_impl_1_1_edge.html#a5ad5be2ccfb46a7331a8895b3c6a43af',1,'GraphEmitterImpl::Edge::coorder_()'],['../struct_c_s_v_equation_1_1_edge.html#a51865ad41c86bc7d3b5e75fc7d75a04b',1,'CSVEquation::Edge::coorder_()'],['../structead_1_1_func_arg.html#a2044aedf583e08338aa803a91421d821',1,'ead::FuncArg::coorder_()'],['../structead_1_1_op_arg.html#abaa6b56e0f56d28d22c4be7fe612f2f9',1,'ead::OpArg::coorder_()'],['../structead_1_1_builder_arg.html#ab7a4cd32649acf59e55cf760043fc1a0',1,'ead::BuilderArg::coorder_()'],['../structopt_1_1_cand_arg.html#af4282fdcbed674811e5e86e732d942e2',1,'opt::CandArg::coorder_()'],['../structopt_1_1_voter_arg.html#a9b86027a2936a333260baf2f962ff896',1,'opt::VoterArg::coorder_()'],['../struct_arg.html#ab5e011bc5dd2c97ccfa6f70426b61718',1,'Arg::coorder_()']]], - ['coorders_5f',['coorders_',['../struct_c_s_v_equation.html#ab39250d4e536eeea4f96541378035080',1,'CSVEquation']]], - ['cst_5f',['cst_',['../structead_1_1_constant_node.html#abc353df03c3710ded3310bd8aff2d2df',1,'ead::ConstantNode']]] -]; diff --git a/docs/search/variables_4.html b/docs/search/variables_4.html deleted file mode 100644 index 8067e67f8..000000000 --- a/docs/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_4.js b/docs/search/variables_4.js deleted file mode 100644 index 0e83e9f8f..000000000 --- a/docs/search/variables_4.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['d',['d',['../structead_1_1_size_t.html#a11639b09e5e72ad82ee99fd3feccd79c',1,'ead::SizeT']]], - ['data_5f',['data_',['../structead_1_1_eigen_tens_op.html#a4e24cbfe1951069d1079db5d85b712c5',1,'ead::EigenTensOp::data_()'],['../structead_1_1_eigen_mat_op.html#a4686898691564e953ec5381b495cf644',1,'ead::EigenMatOp::data_()'],['../structead_1_1i_leaf.html#aff680597b1a7e671427fc8c06179b4c4',1,'ead::iLeaf::data_()'],['../structead_1_1_op_arg.html#ad9917eab8754f016e0ee4535dec4b486',1,'ead::OpArg::data_()']]], - ['data_5fsync_5finterval',['data_sync_interval',['../namespacedbg.html#a07f38263b65f2d0dc5c3e50acfedc71e',1,'dbg']]], - ['datalimit_5f',['datalimit_',['../struct_pretty_tensor.html#aa9f13ddcae6a546c21a73fa636d5fc32',1,'PrettyTensor']]], - ['default',['default',['../namespacecsv__to__png.html#acf337991348f4b26a7d60cdcc8b461c3',1,'csv_to_png']]], - ['dest_5f',['dest_',['../struct_conversion.html#abd22c1dc06d1d2895a4d3a704d85478c',1,'Conversion']]], - ['dims_5f',['dims_',['../structade_1_1_shape.html#a0ed417376c158cf66d6803dd88262446',1,'ade::Shape']]], - ['drawer_5f',['drawer_',['../struct_pretty_equation.html#acb1e69a87e7d374a5070dd31a4a5eae2',1,'PrettyEquation']]] -]; diff --git a/docs/search/variables_5.html b/docs/search/variables_5.html deleted file mode 100644 index 7e95e946f..000000000 --- a/docs/search/variables_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_5.js b/docs/search/variables_5.js deleted file mode 100644 index 75dc37b56..000000000 --- a/docs/search/variables_5.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['edge_5flabel_5f',['edge_label_',['../struct_c_s_v_equation_1_1_edge.html#a1189aa1950816beb4796d794316ff56f',1,'CSVEquation::Edge']]], - ['edge_5flabel_5ffmt',['edge_label_fmt',['../namespacedbg.html#a60e744ab67b98f4a24e5defe0d90e1c2',1,'dbg']]], - ['edges_5f',['edges_',['../structdbg_1_1_interactive_session.html#a13dc483479f4b45f3c6f172f638488ce',1,'dbg::InteractiveSession::edges_()'],['../struct_graph_emitter_impl.html#a4a856d16c147eefb31056b8086b643e1',1,'GraphEmitterImpl::edges_()'],['../struct_c_s_v_equation.html#a05bd7b5dabb52c85d317612045833ad5',1,'CSVEquation::edges_()']]] -]; diff --git a/docs/search/variables_6.html b/docs/search/variables_6.html deleted file mode 100644 index 3d398e628..000000000 --- a/docs/search/variables_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_6.js b/docs/search/variables_6.js deleted file mode 100644 index a0bac21db..000000000 --- a/docs/search/variables_6.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['func_5f',['func_',['../struct_c_s_v_equation_1_1_edge.html#a4f3fb5902af0c4e1d249c6b2e22ac278',1,'CSVEquation::Edge::func_()'],['../structead_1_1_functor_node.html#aa77ef1d7341b2ae1165571370de66506',1,'ead::FunctorNode::func_()']]], - ['funcs_5f',['funcs_',['../structade_1_1_height_matrix.html#a797c002d2a2ca416d923f22253494399',1,'ade::HeightMatrix::funcs_()'],['../structpbm_1_1_graph_saver.html#a889b990b34164c5e058ed6dfe29435ac',1,'pbm::GraphSaver::funcs_()']]], - ['fwd_5f',['fwd_',['../structade_1_1_coord_map.html#ad0bb539056fd8f8acce96109ff41f6da',1,'ade::CoordMap']]] -]; diff --git a/docs/search/variables_7.html b/docs/search/variables_7.html deleted file mode 100644 index 7b791460a..000000000 --- a/docs/search/variables_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_7.js b/docs/search/variables_7.js deleted file mode 100644 index 0611e87fd..000000000 --- a/docs/search/variables_7.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['get_5fftype_5f',['get_ftype_',['../struct_c_s_v_equation.html#a58a31844c3d8f65e093cceb5e3dc1fce',1,'CSVEquation']]], - ['gid_5f',['gid_',['../struct_graph_emitter_impl.html#ab5b3703a478eef41c866e398730fb6d6',1,'GraphEmitterImpl']]], - ['graphsize_5f',['graphsize_',['../structade_1_1_graph_stat.html#aada9c11ed84364702aa2ac4422af057d',1,'ade::GraphStat']]], - ['group_5f',['group_',['../structead_1_1_group_convr.html#a53550d9234f8cdf8db3db7a1932ebc8a',1,'ead::GroupConvr::group_()'],['../structtag_1_1_subgraph.html#a8053868c95b7677366951278d483a5a5',1,'tag::Subgraph::group_()']]], - ['group_5fhead_5f',['group_head_',['../structopt_1_1_matcher.html#a3266c70735f4c4edb57e97f6d5c001e3',1,'opt::Matcher']]], - ['group_5fprefix',['group_prefix',['../namespaceopt.html#a880213957cf570053ec5c49c0fe6556d',1,'opt']]], - ['groups_5f',['groups_',['../structtag_1_1_group_registry.html#a2b24b3ab82c5ba9fd5f955c8b005b627',1,'tag::GroupRegistry']]], - ['groups_5fkey',['groups_key',['../namespacetag.html#ad4535d497218819b944e949497c4aa29',1,'tag']]] -]; diff --git a/docs/search/variables_8.html b/docs/search/variables_8.html deleted file mode 100644 index 8ebc5f6b7..000000000 --- a/docs/search/variables_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_8.js b/docs/search/variables_8.js deleted file mode 100644 index 190b94314..000000000 --- a/docs/search/variables_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['hasher_5f',['hasher_',['../structopt_1_1_comm_hasher.html#ad21e3eac1f7a236939cc7110b1f3ed98',1,'opt::CommHasher']]], - ['head_5f',['head_',['../struct_num_list.html#a00536bfb06aab7c733c7e32ce902e24c',1,'NumList::head_()'],['../struct_ptr_list.html#abe044f286dbb5c9634386e87110f4e41',1,'PtrList::head_()']]], - ['health_5fchecker_5f',['health_checker_',['../structdbg_1_1_graph_emitter_client.html#a1317f1772a06b30210189054f382a958',1,'dbg::GraphEmitterClient']]], - ['help',['help',['../namespacecsv__to__png.html#a559aa984c4f3de06d113fed7a4dc73c0',1,'csv_to_png']]] -]; diff --git a/docs/search/variables_9.html b/docs/search/variables_9.html deleted file mode 100644 index 12136613e..000000000 --- a/docs/search/variables_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_9.js b/docs/search/variables_9.js deleted file mode 100644 index 27784fdf6..000000000 --- a/docs/search/variables_9.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['id_5f',['id_',['../struct_c_s_v_equation_1_1_node.html#acd46e58a0d1ae621d26d67aaa53f672e',1,'CSVEquation::Node']]], - ['identity',['identity',['../namespaceade.html#a51de3f8cb4058a56fc0e51a7b7b564c3',1,'ade']]], - ['immutable_5ftag',['immutable_tag',['../namespacetag.html#ad9cbcc3428600060081653e38c3c611a',1,'tag']]], - ['immutables_5f',['immutables_',['../structopt_1_1_voter_pool.html#aa2323084992842ead71d30f8b67c0e08',1,'opt::VoterPool']]], - ['indices_5f',['indices_',['../structead_1_1_coord_map.html#a2d64bbfcf49fccfd79dfa132b88257aa',1,'ead::CoordMap']]], - ['is_5fgroup_5f',['is_group_',['../struct_branch.html#a0265850333aab95ae1f034de322fe204',1,'Branch::is_group_()'],['../struct_property.html#aa60235e724f7b910c8a278c0138ce11e',1,'Property::is_group_()']]] -]; diff --git a/docs/search/variables_a.html b/docs/search/variables_a.html deleted file mode 100644 index 24819a377..000000000 --- a/docs/search/variables_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_a.js b/docs/search/variables_a.js deleted file mode 100644 index cdb286e34..000000000 --- a/docs/search/variables_a.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['label_5f',['label_',['../structdbg_1_1_edge_info.html#aef8e45abf92014e64c0a8eb6354917fb',1,'dbg::EdgeInfo::label_()'],['../struct_graph_emitter_impl_1_1_edge.html#a2010387621c5b582681f795167add9c0',1,'GraphEmitterImpl::Edge::label_()'],['../struct_c_s_v_equation_1_1_node.html#a88b8528800f93c79a7f8d1dc15d52f91',1,'CSVEquation::Node::label_()'],['../structead_1_1_variable.html#a64a1f8be23a3ec245630fbb2430ef59e',1,'ead::Variable::label_()'],['../structopt_1_1_voter_arg.html#a6b2e2459023c61c4a27cb7556ab74d9a',1,'opt::VoterArg::label_()'],['../struct_branch.html#a46c5f86a8074c0287f4105f94b8bd940',1,'Branch::label_()'],['../struct_property.html#a2ea81549cdff2474a3858d0430320026',1,'Property::label_()'],['../structopt_1_1_ordr_voter.html#a40d5452f483d234e5fb2ada0a4315ee6',1,'opt::OrdrVoter::label_()'],['../structopt_1_1_comm_voter.html#a7bc3f602957a945392063cd24e0a23ee',1,'opt::CommVoter::label_()'],['../structopt_1_1_variadic_voter.html#a63f0cef6cde431e0ad1956ec72551122',1,'opt::VariadicVoter::label_()']]], - ['label_5fdelim',['label_delim',['../ade__csv_8hpp.html#abe66766bd31aecbdbde62e22f2e53b52',1,'ade_csv.hpp']]], - ['label_5flimit',['label_limit',['../namespaceead.html#a26f3aaccd06e1e585408119bda2db44d',1,'ead']]], - ['labels_5f',['labels_',['../struct_pretty_equation.html#a48e82321023511d6d996d143373d62e6',1,'PrettyEquation::labels_()'],['../struct_c_s_v_equation.html#a907bbbcee85d465621531ef43de20451',1,'CSVEquation::labels_()'],['../structtag_1_1_group_tag.html#a8e7be9cd8aad902769c68d61025b5a11',1,'tag::GroupTag::labels_()'],['../structtag_1_1_prop_tag.html#a4af44491ae89b354912d06c3ff184d7f',1,'tag::PropTag::labels_()']]], - ['leaves_5f',['leaves_',['../structade_1_1_height_matrix.html#a90ca063c213023ec930d9b5ea3824a7d',1,'ade::HeightMatrix::leaves_()'],['../structpbm_1_1_graph_saver.html#a018275de799a0dffc764226e5cf01039',1,'pbm::GraphSaver::leaves_()']]] -]; diff --git a/docs/search/variables_b.html b/docs/search/variables_b.html deleted file mode 100644 index b306931e2..000000000 --- a/docs/search/variables_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_b.js b/docs/search/variables_b.js deleted file mode 100644 index 73bbb2221..000000000 --- a/docs/search/variables_b.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['map_5fio_5f',['map_io_',['../structade_1_1_func_arg.html#a40ca3f8562d24fb00519d40e5a90308d',1,'ade::FuncArg']]], - ['mat_5fdim',['mat_dim',['../namespaceade.html#aef5340f38e0071d8c292cc099722a980',1,'ade']]], - ['mat_5fsize',['mat_size',['../namespaceade.html#a2510c0d77a622cfaa58a0865d86ce8d5',1,'ade']]], - ['matrixbase_5f',['matrixbase_',['../structead_1_1_eigen_mat_op.html#ae68d8453c20fa6fafbde3012cb2c6abe',1,'ead::EigenMatOp']]], - ['max_5fattempts',['max_attempts',['../namespacedbg.html#ad65930e6ff368da58fe3283436eaf53e',1,'dbg']]], - ['max_5fheight_5f',['max_height_',['../struct_graph_emitter_impl_1_1_node.html#a3e053c73bd3a0838eaf062d44588ffe2',1,'GraphEmitterImpl::Node']]], - ['min_5fheight_5f',['min_height_',['../struct_graph_emitter_impl_1_1_node.html#aa854b489cc629baa6fab94adfa5edda6',1,'GraphEmitterImpl::Node']]] -]; diff --git a/docs/search/variables_c.html b/docs/search/variables_c.html deleted file mode 100644 index 75709df8f..000000000 --- a/docs/search/variables_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_c.js b/docs/search/variables_c.js deleted file mode 100644 index 6038dd644..000000000 --- a/docs/search/variables_c.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['name_5f',['name_',['../structade_1_1_opcode.html#a669505bcf6ccff8d01a1bf943bffe150',1,'ade::Opcode']]], - ['nargs',['nargs',['../namespacecsv__to__png.html#a6f449909296594e8fe1da3c023c577fa',1,'csv_to_png']]], - ['next_5f',['next_',['../struct_num_node.html#afb2f60acd5b42a5318c2960be53500b8',1,'NumNode::next_()'],['../struct_ptr_node.html#ae5967a4e29046f9b743488fe3a891156',1,'PtrNode::next_()']]], - ['node_5f',['node_',['../structead_1_1_func_arg.html#ab79ea3783267cec52ffe46bb53c62e72',1,'ead::FuncArg']]], - ['node_5fids_5f',['node_ids_',['../structdbg_1_1_interactive_session.html#a64e75b7fc318fe50c949a84661854d2a',1,'dbg::InteractiveSession']]], - ['nodes_5f',['nodes_',['../struct_graph_emitter_impl.html#aa9d51c8485258866548262c55331f607',1,'GraphEmitterImpl::nodes_()'],['../struct_c_s_v_equation.html#a51dd48568a524c084e76db475bb8b902',1,'CSVEquation::nodes_()']]], - ['non_5fbijectives',['non_bijectives',['../namespaceead.html#a83b415399bfb3c00ec07d34a9bde9af7',1,'ead']]], - ['ntype_5f',['ntype_',['../struct_c_s_v_equation_1_1_node.html#adb8f86416aed773a88e46763f67daa1f',1,'CSVEquation::Node']]] -]; diff --git a/docs/search/variables_d.html b/docs/search/variables_d.html deleted file mode 100644 index 34c80a486..000000000 --- a/docs/search/variables_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_d.js b/docs/search/variables_d.js deleted file mode 100644 index 06ae1f260..000000000 --- a/docs/search/variables_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['opcode_5f',['opcode_',['../structade_1_1_functor.html#a510bd987710b9f124e178bd0e826ab6d',1,'ade::Functor::opcode_()'],['../structead_1_1_functor.html#aecd0349b210f3b3d29d85ac7471add2d',1,'ead::Functor::opcode_()'],['../structead_1_1_func_convr.html#a1690bda82be8cf3b152510f2c322d351',1,'ead::FuncConvr::opcode_()']]], - ['out_5f',['out_',['../structead_1_1_functor.html#af66b449e402b6763515057d6f0c62843',1,'ead::Functor']]] -]; diff --git a/docs/search/variables_e.html b/docs/search/variables_e.html deleted file mode 100644 index 4a1c8a614..000000000 --- a/docs/search/variables_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_e.js b/docs/search/variables_e.js deleted file mode 100644 index f30066876..000000000 --- a/docs/search/variables_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['parent_5f',['parent_',['../structdbg_1_1_edge_info.html#af3ad4365624eadf3ee34c9f9541bb765',1,'dbg::EdgeInfo']]], - ['parent_5fid_5f',['parent_id_',['../struct_graph_emitter_impl_1_1_edge.html#a21fa95d236f1749eb653aec5d04be885',1,'GraphEmitterImpl::Edge']]], - ['parents_5f',['parents_',['../structade_1_1_path_finder.html#a7748417958bed305338af5e238dc5362',1,'ade::PathFinder::parents_()'],['../structade_1_1_parent_finder.html#a4dac2cea4ff6bff153debf4180cfaa0e',1,'ade::ParentFinder::parents_()'],['../structead_1_1_session.html#a49840f07b1679c9a4ae253cf85192fd6',1,'ead::Session::parents_()']]], - ['parser',['parser',['../namespacecsv__to__png.html#a2ba28e897973436caf76d7a4d0149b34',1,'csv_to_png']]], - ['prog_5fdescription',['prog_description',['../namespaceagen.html#a37ff01cda30d5df761f0e0ae8e9f492f',1,'agen']]], - ['properties_5f',['properties_',['../structopt_1_1_rules_context.html#ab9ea8397a897bce08ecb897fa30836ff',1,'opt::RulesContext']]], - ['property_5f',['property_',['../struct_property.html#a92e6efa20d4619ed8ce3e39a468dbafb',1,'Property']]], - ['props_5fkey',['props_key',['../namespacetag.html#a5dea3b3743ab50403cb8e084e3623be6',1,'tag']]] -]; diff --git a/docs/search/variables_f.html b/docs/search/variables_f.html deleted file mode 100644 index cc86fb590..000000000 --- a/docs/search/variables_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/search/variables_f.js b/docs/search/variables_f.js deleted file mode 100644 index 4fc8f892b..000000000 --- a/docs/search/variables_f.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['rank_5fcap',['rank_cap',['../namespaceade.html#a010f58650ea19a281182bf10d0f26440',1,'ade']]], - ['ref_5f',['ref_',['../struct_group.html#acaeea356a198e72b941ed73b386563ed',1,'Group::ref_()'],['../structtag_1_1_tens_key.html#a5f002593f3b75c7a78292a98d73f0b0d',1,'tag::TensKey::ref_()']]], - ['reference_5f',['reference_',['../structopt_1_1_symbol.html#a491d94ed5f671e365984012ce77a069c',1,'opt::Symbol']]], - ['registry_5f',['registry_',['../structdbg_1_1_interactive_session.html#a6f5715a68eb3f41223749c1ae8694101',1,'dbg::InteractiveSession::registry_()'],['../structtag_1_1_tag_registry.html#aa0a43a93779cb22de02053d3fa96b347',1,'tag::TagRegistry::registry_()']]], - ['request_5fduration_5f',['request_duration_',['../structdbg_1_1_client_config.html#a68d6885c4210cb28b00c455c91f8f909',1,'dbg::ClientConfig']]], - ['requirements_5f',['requirements_',['../structead_1_1_session.html#a44d289b7c19e6f4b52662768a0a8c4c4',1,'ead::Session']]], - ['roots_5f',['roots_',['../structpbm_1_1_graph_info.html#ad415f1f762db303c520b2f88d8b656c4',1,'pbm::GraphInfo']]] -]; diff --git a/docs/serialize_8hpp.html b/docs/serialize_8hpp.html deleted file mode 100644 index 9c88069ae..000000000 --- a/docs/serialize_8hpp.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - -Tenncor: ead/serialize.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    serialize.hpp File Reference
    -
    -
    -
    #include "pbm/data.hpp"
    -#include "ead/generated/opcode.hpp"
    -#include "ead/generated/dtype.hpp"
    -#include "ead/coord.hpp"
    -#include "ead/constant.hpp"
    -#include "ead/variable.hpp"
    -
    -Include dependency graph for serialize.hpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - -

    -Classes

    struct  ead::EADSaver
     
    struct  ead::EADLoader
     Unmarshal cortenn::Source as Variable containing context of source. More...
     
    - - - -

    -Namespaces

     ead
     
    - - - -

    -Macros

    #define _OUT_GENERIC(realtype)
     
    - - - -

    -Functions

    static bool ead::is_big_endian (void)
     
    - - - -

    -Variables

    static std::unordered_set< size_t > ead::non_bijectives
     
    -

    Macro Definition Documentation

    - -

    ◆ _OUT_GENERIC

    - -
    -
    - - - - - - - - -
    #define _OUT_GENERIC( realtype)
    -
    -Value:
    leaf = is_const?\
    make_constant<realtype>((realtype*) pb, shape)->get_tensor():\
    ade::TensptrT(Variable<realtype>::get((realtype*) pb, shape, label));
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    -
    -
    -
    -
    - - - - diff --git a/docs/serialize_8hpp__dep__incl.map b/docs/serialize_8hpp__dep__incl.map deleted file mode 100644 index 34547133d..000000000 --- a/docs/serialize_8hpp__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/serialize_8hpp__dep__incl.md5 b/docs/serialize_8hpp__dep__incl.md5 deleted file mode 100644 index c17e26103..000000000 --- a/docs/serialize_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3f9da4067e052985b180ca0c84e0b8d1 \ No newline at end of file diff --git a/docs/serialize_8hpp__dep__incl.png b/docs/serialize_8hpp__dep__incl.png deleted file mode 100644 index 841514352..000000000 Binary files a/docs/serialize_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/serialize_8hpp__incl.map b/docs/serialize_8hpp__incl.map deleted file mode 100644 index 23873f4d4..000000000 --- a/docs/serialize_8hpp__incl.map +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/serialize_8hpp__incl.md5 b/docs/serialize_8hpp__incl.md5 deleted file mode 100644 index f17759ea3..000000000 --- a/docs/serialize_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9328378ac0d3cff4d553c6e390deb740 \ No newline at end of file diff --git a/docs/serialize_8hpp__incl.png b/docs/serialize_8hpp__incl.png deleted file mode 100644 index 08cc659d9..000000000 Binary files a/docs/serialize_8hpp__incl.png and /dev/null differ diff --git a/docs/serialize_8hpp_source.html b/docs/serialize_8hpp_source.html deleted file mode 100644 index 74a71e548..000000000 --- a/docs/serialize_8hpp_source.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Tenncor: ead/serialize.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    serialize.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include "pbm/data.hpp"
    10 
    11 #include "ead/generated/opcode.hpp"
    12 #include "ead/generated/dtype.hpp"
    13 
    14 #include "ead/coord.hpp"
    15 #include "ead/constant.hpp"
    16 #include "ead/variable.hpp"
    17 
    18 #ifndef EAD_SERIALIZE_HPP
    19 #define EAD_SERIALIZE_HPP
    20 
    21 namespace ead
    22 {
    23 
    24 static std::unordered_set<size_t> non_bijectives =
    25 {
    26  age::REDUCE_SUM,
    27  age::REDUCE_PROD,
    28  age::REDUCE_MIN,
    29  age::REDUCE_MAX,
    30  age::EXTEND,
    31 };
    32 
    33 static bool is_big_endian(void)
    34 {
    35  union
    36  {
    37  uint16_t _;
    38  char bytes[2];
    39  } twob = { 0x0001 };
    40 
    41  return twob.bytes[0] == 0;
    42 }
    43 
    44 struct EADSaver final : public pbm::iSaver
    45 {
    46  std::string save_leaf (bool& is_const, ade::iLeaf* leaf) override
    47  {
    48  char* data = (char*) leaf->data();
    49  size_t nelems = leaf->shape().n_elems();
    50  size_t nbytes = age::type_size((age::_GENERATED_DTYPE) leaf->type_code());
    51  if (is_big_endian() && nbytes > 1)
    52  {
    53  size_t totalbytes = nelems * nbytes;
    54  std::string out(totalbytes, '\0');
    55  for (size_t i = 0; i < totalbytes; ++i)
    56  {
    57  size_t elemi = i / nbytes;
    58  size_t outi = (elemi + 1) * nbytes - (i % nbytes);
    59  out[outi] = data[i];
    60  }
    61  return out;
    62  }
    63  return std::string(data, nelems * nbytes);
    64  }
    65 
    66  std::vector<double> save_shaper (const ade::CoordptrT& mapper) override
    67  {
    68  std::vector<double> out;
    69  mapper->access(
    70  [&out](const ade::MatrixT& mat)
    71  {
    72  for (ade::RankT i = 0; i < ade::mat_dim; ++i)
    73  {
    74  for (ade::RankT j = 0; j < ade::mat_dim; ++j)
    75  {
    76  out.push_back(mat[i][j]);
    77  }
    78  }
    79  });
    80  return out;
    81  }
    82 
    83  std::vector<double> save_coorder (const ade::CoordptrT& mapper) override
    84  {
    85  if (nullptr == mapper)
    86  {
    87  return std::vector<double>();
    88  }
    89  ade::CoordT coord;
    90  mapper->forward(coord.begin(), coord.begin());
    91  return std::vector<double>(coord.begin(), coord.end());
    92  }
    93 };
    94 
    95 #define _OUT_GENERIC(realtype)leaf = is_const?\
    96 make_constant<realtype>((realtype*) pb, shape)->get_tensor():\
    97 ade::TensptrT(Variable<realtype>::get((realtype*) pb, shape, label));
    98 
    100 struct EADLoader final : public pbm::iLoader
    101 {
    102  ade::TensptrT generate_leaf (const char* pb, ade::Shape shape,
    103  std::string typelabel, std::string label, bool is_const) override
    104  {
    105  ade::TensptrT leaf;
    106  age::_GENERATED_DTYPE gencode = age::get_type(typelabel);
    107  size_t nbytes = age::type_size(gencode);
    108  if (is_big_endian() && nbytes > 1)
    109  {
    110  size_t totalbytes = shape.n_elems() * nbytes;
    111  std::string out(totalbytes, '\0');
    112  for (size_t i = 0; i < totalbytes; ++i)
    113  {
    114  size_t elemi = i / nbytes;
    115  size_t outi = (elemi + 1) * nbytes - (i % nbytes);
    116  out[outi] = pb[i];
    117  }
    118  pb = out.c_str();
    119  TYPE_LOOKUP(_OUT_GENERIC, gencode)
    120  }
    121  else
    122  {
    123  TYPE_LOOKUP(_OUT_GENERIC, gencode)
    124  }
    125  return leaf;
    126  }
    127 
    128  ade::TensptrT generate_func (std::string opname, ade::ArgsT args) override
    129  {
    130  return ade::TensptrT(ade::Functor::get(ade::Opcode{opname, age::get_op(opname)}, args));
    131  }
    132 
    133  ade::CoordptrT generate_shaper (std::vector<double> coord) override
    134  {
    135  if (ade::mat_dim * ade::mat_dim != coord.size())
    136  {
    137  logs::fatal("cannot deserialize non-matrix shape map");
    138  }
    139  return std::make_shared<ade::CoordMap>(
    140  [&](ade::MatrixT fwd)
    141  {
    142  for (ade::RankT i = 0; i < ade::mat_dim; ++i)
    143  {
    144  for (ade::RankT j = 0; j < ade::mat_dim; ++j)
    145  {
    146  fwd[i][j] = coord[i * ade::mat_dim + j];
    147  }
    148  }
    149  });
    150  }
    151 
    153  std::string opname, std::vector<double> coord) override
    154  {
    155  if (0 == coord.size()) // is identity
    156  {
    157  return nullptr;
    158  }
    159  if (ade::rank_cap + 1 < coord.size())
    160  {
    161  logs::fatal("cannot deserialize non-vector coordinate map");
    162  }
    163  bool is_bijective = false == estd::has(non_bijectives, age::get_op(opname));
    164  ade::CoordT indices;
    165  auto cit = coord.begin();
    166  std::copy(cit, cit + ade::rank_cap, indices.begin());
    167  return std::make_shared<CoordMap>(indices, is_bijective);
    168  }
    169 };
    170 
    171 #undef _OUT_GENERIC
    172 
    173 }
    174 
    175 #endif // EAD_SERIALIZE_HPP
    args
    Definition: csv_to_png.py:105
    -
    std::vector< double > save_coorder(const ade::CoordptrT &mapper) override
    Definition: serialize.hpp:83
    -
    Encoding of operation.
    Definition: ifunctor.hpp:18
    -
    virtual const Shape & shape(void) const =0
    Return the shape held by this tensor.
    -
    ade::CoordptrT generate_coorder(std::string opname, std::vector< double > coord) override
    Definition: serialize.hpp:152
    - -
    Definition: constant.hpp:9
    -
    Leaf of the graph commonly representing the variable in an equation.
    Definition: ileaf.hpp:19
    -
    Unmarshal cortenn::Source as Variable containing context of source.
    Definition: serialize.hpp:100
    - -
    std::shared_ptr< iCoordMap > CoordptrT
    Type of iCoordMap smartpointer.
    Definition: coord.hpp:106
    -
    NElemT n_elems(void) const
    Return the total number of elements represented by the shape.
    Definition: shape.hpp:116
    -
    ade::TensptrT generate_leaf(const char *pb, ade::Shape shape, std::string typelabel, std::string label, bool is_const) override
    Definition: serialize.hpp:102
    -
    static std::unordered_set< size_t > non_bijectives
    Definition: serialize.hpp:24
    -
    std::string save_leaf(bool &is_const, ade::iLeaf *leaf) override
    Definition: serialize.hpp:46
    -
    double[mat_dim][mat_dim] MatrixT
    Coordinate transformation matrix (using homogeneous)
    Definition: matops.hpp:28
    - -
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    -
    #define _OUT_GENERIC(realtype)
    Definition: serialize.hpp:95
    -
    ade::TensptrT generate_func(std::string opname, ade::ArgsT args) override
    Definition: serialize.hpp:128
    -
    static bool is_big_endian(void)
    Definition: serialize.hpp:33
    -
    std::vector< double > save_shaper(const ade::CoordptrT &mapper) override
    Definition: serialize.hpp:66
    -
    const RankT mat_dim
    Number of rows and columns for the homogeneous matrix.
    Definition: matops.hpp:22
    -
    uint8_t RankT
    Type used for shape rank.
    Definition: shape.hpp:23
    -
    static Functor * get(Opcode opcode, ArgsT args)
    Return a Functor with with input tensor and meta arguments.
    Definition: functor.hpp:21
    -
    Definition: shape.hpp:60
    -
    Definition: data.hpp:36
    -
    std::array< CDimT, rank_cap > CoordT
    Definition: shape.hpp:54
    -
    ade::CoordptrT generate_shaper(std::vector< double > coord) override
    Definition: serialize.hpp:133
    -
    virtual void * data(void)=0
    Return pointer to internal data.
    -
    Definition: data.hpp:27
    -
    virtual size_t type_code(void) const =0
    Return data type encoding.
    -
    const RankT rank_cap
    Number of dimsensions in a shape/coordinate.
    Definition: shape.hpp:45
    - -
    Definition: serialize.hpp:44
    -
    std::vector< FuncArg > ArgsT
    Type of functor arguments.
    Definition: funcarg.hpp:101
    -
    - - - - diff --git a/docs/session_8hpp.html b/docs/session_8hpp.html deleted file mode 100644 index 359b04e0e..000000000 --- a/docs/session_8hpp.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: ead/session.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    session.hpp File Reference
    -
    -
    -
    #include <list>
    -#include <unordered_set>
    -#include "ade/traveler.hpp"
    -#include "opt/optimize.hpp"
    -#include "ead/constant.hpp"
    -#include "ead/functor.hpp"
    -
    -Include dependency graph for session.hpp:
    -
    -
    - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - -
    -
    -

    Go to the source code of this file.

    - - - - - - - - - - -

    -Classes

    struct  ead::iSession
     
    struct  ead::SizeT
     
    struct  ead::Traveler
     
    struct  ead::Session
     
    - - - -

    -Namespaces

     ead
     
    - - - -

    -Typedefs

    using ead::TensSetT = std::unordered_set< ade::iTensor * >
     
    -
    - - - - diff --git a/docs/session_8hpp__dep__incl.dot b/docs/session_8hpp__dep__incl.dot deleted file mode 100644 index 0203313ef..000000000 --- a/docs/session_8hpp__dep__incl.dot +++ /dev/null @@ -1,13 +0,0 @@ -digraph "ead/session.hpp" -{ - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node60 [label="ead/session.hpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black"]; - Node60 -> Node61 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node61 [label="ead/ead.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_8hpp.html"]; - Node61 -> Node62 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node62 [label="ead/parse.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2parse_8hpp.html"]; - Node62 -> Node63 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node63 [label="ead/python/ead.cpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_8cpp.html"]; - Node60 -> Node63 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; -} diff --git a/docs/session_8hpp__dep__incl.md5 b/docs/session_8hpp__dep__incl.md5 deleted file mode 100644 index 6a5d7d871..000000000 --- a/docs/session_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6f96cd7945940fdd1063cb8f613d3771 \ No newline at end of file diff --git a/docs/session_8hpp__incl.dot b/docs/session_8hpp__incl.dot deleted file mode 100644 index 162d9735b..000000000 --- a/docs/session_8hpp__incl.dot +++ /dev/null @@ -1,125 +0,0 @@ -digraph "ead/session.hpp" -{ - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node0 [label="ead/session.hpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black"]; - Node0 -> Node1 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node1 [label="list",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node0 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node2 [label="unordered_set",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node0 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node3 [label="ade/traveler.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$traveler_8hpp.html"]; - Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node4 [label="estd/estd.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node5 [label="ade/ileaf.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2ileaf_8hpp.html"]; - Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node6 [label="ade/itensor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$itensor_8hpp.html"]; - Node6 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node7 [label="ade/shape.hpp",height=0.2,width=0.4,color="red", fillcolor="white", style="filled",URL="$shape_8hpp.html"]; - Node7 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node8 [label="array",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node7 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node9 [label="cmath",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node5 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node13 [label="ade/idata.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$idata_8hpp.html"]; - Node13 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node14 [label="cstdlib",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node13 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node15 [label="string",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node3 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node16 [label="ade/ifunctor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ifunctor_8hpp.html"]; - Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node17 [label="ade/funcarg.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ade_2funcarg_8hpp.html"]; - Node17 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node18 [label="ade/coord.hpp",height=0.2,width=0.4,color="red", fillcolor="white", style="filled",URL="$ade_2coord_8hpp.html"]; - Node18 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node19 [label="functional",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node0 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node23 [label="opt/optimize.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$optimize_8hpp.html"]; - Node23 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node24 [label="opt/matcher.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$matcher_8hpp.html"]; - Node24 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node24 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node25 [label="tag/group.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node24 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node26 [label="opt/ivoter.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ivoter_8hpp.html"]; - Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node27 [label="opt/parse/def.h",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$def_8h.html"]; - Node27 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node28 [label="stdio.h",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node27 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node29 [label="opt/parse/list.h",height=0.2,width=0.4,color="red", fillcolor="white", style="filled",URL="$list_8h.html"]; - Node26 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node32 [label="opt/stats.hpp",height=0.2,width=0.4,color="red", fillcolor="white", style="filled",URL="$stats_8hpp.html"]; - Node32 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node36 [label="tag/prop.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node26 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node37 [label="opt/candidate.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$candidate_8hpp.html"]; - Node37 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node38 [label="unordered_map",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node37 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node39 [label="boost/functional/hash.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node37 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node23 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node40 [label="opt/iconverter.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$iconverter_8hpp.html"]; - Node40 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node40 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node0 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node41 [label="ead/constant.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$constant_8hpp.html"]; - Node41 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node41 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node42 [label="tag/tag.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node41 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node43 [label="map",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node41 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node44 [label="set",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node41 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node45 [label="ade/ade.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node41 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node46 [label="ead/ileaf.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2ileaf_8hpp.html"]; - Node46 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node46 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node47 [label="ead/eigen.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$eigen_8hpp.html"]; - Node47 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node48 [label="Eigen/Core",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node47 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node49 [label="unsupported/Eigen/CXX11\l/Tensor",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node47 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node47 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node50 [label="ead/generated/dtype.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node41 -> Node51 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node51 [label="ead/inode.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$inode_8hpp.html"]; - Node51 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node51 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node51 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node0 -> Node52 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node52 [label="ead/functor.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2functor_8hpp.html"]; - Node52 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node35 [label="ade/iopfunc.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$iopfunc_8hpp.html"]; - Node35 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node35 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node52 -> Node53 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node53 [label="ead/generated/opcode.hpp",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node52 -> Node54 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node54 [label="ead/funcarg.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2funcarg_8hpp.html"]; - Node54 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node54 -> Node55 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node55 [label="ead/coord.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$ead_2coord_8hpp.html"]; - Node55 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node54 -> Node51 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node52 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node52 -> Node56 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node56 [label="ead/operator.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$operator_8hpp.html"]; - Node56 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node56 -> Node55 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node56 -> Node57 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node57 [label="ead/random.hpp",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$random_8hpp.html"]; - Node57 -> Node58 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node58 [label="random",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node57 -> Node59 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node59 [label="type_traits",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled"]; - Node57 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; -} diff --git a/docs/session_8hpp__incl.md5 b/docs/session_8hpp__incl.md5 deleted file mode 100644 index 9e496ea86..000000000 --- a/docs/session_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -cc462cb6c28f977888421069410cf838 \ No newline at end of file diff --git a/docs/session_8hpp_source.html b/docs/session_8hpp_source.html deleted file mode 100644 index 555326ff5..000000000 --- a/docs/session_8hpp_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: ead/session.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    session.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include <list>
    2 #include <unordered_set>
    3 
    4 #include "ade/traveler.hpp"
    5 
    6 #include "opt/optimize.hpp"
    7 
    8 #include "ead/constant.hpp"
    9 #include "ead/functor.hpp"
    10 
    11 #ifndef EAD_SESSION_HPP
    12 #define EAD_SESSION_HPP
    13 
    14 namespace ead
    15 {
    16 
    17 using TensSetT = std::unordered_set<ade::iTensor*>;
    18 
    19 struct iSession
    20 {
    21  virtual ~iSession (void) = default;
    22 
    23  virtual void track (ade::TensT roots) = 0;
    24 
    28  virtual void update (TensSetT updated = {}, TensSetT ignores = {}) = 0;
    29 
    30  virtual void update_target (TensSetT target, TensSetT updated = {}) = 0;
    31 };
    32 
    33 struct SizeT
    34 {
    35  size_t d = 0;
    36 
    37  operator size_t() const { return d; }
    38 };
    39 
    40 // todo: give this more reasons for existence
    41 struct Traveler final : public ade::iTraveler
    42 {
    44  void visit (ade::iLeaf* leaf) override
    45  {
    46  visited_.emplace(leaf);
    47  }
    48 
    50  void visit (ade::iFunctor* func) override
    51  {
    52  if (false == estd::has(visited_, func))
    53  {
    54  visited_.emplace(func);
    55  auto& children = func->get_children();
    56  for (auto& child : children)
    57  {
    58  child.get_tensor()->accept(*this);
    59  }
    60  }
    61  }
    62 
    64 };
    65 
    66 // for each leaf node, iteratively update the parents
    67 // don't update parent node if it is part of ignored set
    68 struct Session final : public iSession
    69 {
    70  void track (ade::TensT roots) override
    71  {
    72  tracked_.insert(roots.begin(), roots.end());
    73  ade::ParentFinder pfinder;
    74  for (ade::TensptrT& root : roots)
    75  {
    76  root->accept(pfinder);
    77  root->accept(stat_);
    78  }
    79  auto& statmap = stat_.graphsize_;
    80 
    81  std::list<ade::iOperableFunc*> all_ops;
    82  for (auto& statpair : statmap)
    83  {
    84  if (0 < statpair.second.upper_)
    85  {
    86  // ensure we only track operable functors
    87  auto op = dynamic_cast<ade::iOperableFunc*>(statpair.first);
    88  if (nullptr == op)
    89  {
    90  logs::fatalf("cannot track non-operable functor %s",
    91  statpair.first->to_string().c_str());
    92  }
    93  all_ops.push_back(op);
    94  }
    95  }
    96  all_ops.sort(
    97  [&statmap](ade::iOperableFunc* a, ade::iOperableFunc* b)
    98  {
    99  return statmap[a].upper_ < statmap[b].upper_;
    100  });
    101  requirements_.clear();
    102  for (ade::iOperableFunc* op : all_ops)
    103  {
    104  auto& args = op->get_children();
    105  TensSetT unique_children;
    106  for (const ade::FuncArg& arg : args)
    107  {
    108  auto tens = arg.get_tensor().get();
    109  if (0 < statmap[tens].upper_) // ignore leaves
    110  {
    111  unique_children.emplace(tens);
    112  }
    113  }
    114  requirements_.push_back({op, unique_children.size()});
    115  }
    116 
    117  for (auto& assocs : pfinder.parents_)
    118  {
    119  for (auto& parent_pair : assocs.second)
    120  {
    121  parents_[assocs.first].emplace(
    122  static_cast<ade::iOperableFunc*>(parent_pair.first));
    123  }
    124  }
    125  }
    126 
    127  void update (TensSetT updated = {}, TensSetT ignores = {}) override
    128  {
    129  std::unordered_map<ade::iOperableFunc*,SizeT> fulfilments;
    130  for (ade::iTensor* unodes : updated)
    131  {
    132  auto& node_parents = parents_[unodes];
    133  for (auto& node_parent : node_parents)
    134  {
    135  ++fulfilments[node_parent].d;
    136  }
    137  }
    138  // ignored nodes and its dependers will never fulfill requirement
    139  for (auto& op : requirements_)
    140  {
    141  // fulfilled and not ignored
    142  if (fulfilments[op.first].d >= op.second &&
    143  false == estd::has(ignores, op.first))
    144  {
    145  op.first->update();
    146  auto& op_parents = parents_[op.first];
    147  for (auto& op_parent : op_parents)
    148  {
    149  ++fulfilments[op_parent].d;
    150  }
    151  }
    152  }
    153  }
    154 
    155  void update_target (TensSetT target, TensSetT updated = {}) override
    156  {
    157  Traveler targetted;
    158  for (auto& tens : target)
    159  {
    160  tens->accept(targetted);
    161  }
    162  std::unordered_map<ade::iOperableFunc*,SizeT> fulfilments;
    163  for (ade::iTensor* unodes : updated)
    164  {
    165  auto& node_parents = parents_[unodes];
    166  for (auto& node_parent : node_parents)
    167  {
    168  ++fulfilments[node_parent].d;
    169  }
    170  }
    171  // ignored nodes and its dependers will never fulfill requirement
    172  for (auto& op : requirements_)
    173  {
    174  // is relevant to target, is fulfilled and not ignored
    175  if (estd::has(targetted.visited_, op.first) &&
    176  fulfilments[op.first].d >= op.second)
    177  {
    178  op.first->update();
    179  auto& op_parents = parents_[op.first];
    180  for (auto& op_parent : op_parents)
    181  {
    182  ++fulfilments[op_parent].d;
    183  }
    184  }
    185  }
    186  }
    187 
    188  void optimize (const opt::OptCtx& rules)
    189  {
    190  ade::TensT tracked(tracked_.begin(), tracked_.end());
    191  opt::optimize(tracked, rules);
    192  stat_.graphsize_.clear();
    193  parents_.clear();
    194  track(tracked);
    195  }
    196 
    197  std::unordered_set<ade::TensptrT> tracked_;
    198 
    200 
    201  std::unordered_map<ade::iTensor*,
    202  std::unordered_set<ade::iOperableFunc*>> parents_;
    203 
    204  std::vector<std::pair<ade::iOperableFunc*,size_t>> requirements_; // todo: test minimal requirements
    205 };
    206 
    207 }
    208 
    209 #endif // EAD_SESSION_HPP
    std::unordered_map< ade::iTensor *, std::unordered_set< ade::iOperableFunc * > > parents_
    Definition: session.hpp:202
    -
    Interface of iOperation-defined operation node.
    Definition: ifunctor.hpp:28
    -
    Definition: session.hpp:68
    -
    void visit(ade::iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: session.hpp:44
    -
    void optimize(const opt::OptCtx &rules)
    Definition: session.hpp:188
    -
    std::unordered_map< iTensor *, NumRange< size_t > > graphsize_
    Definition: traveler.hpp:89
    -
    void update(TensSetT updated={}, TensSetT ignores={}) override
    Definition: session.hpp:127
    -
    Definition: session.hpp:41
    - -
    virtual void update_target(TensSetT target, TensSetT updated={})=0
    -
    std::unordered_set< ade::iTensor * > TensSetT
    Definition: session.hpp:17
    -
    Definition: session.hpp:19
    -
    void visit(ade::iFunctor *func) override
    Implementation of iTraveler.
    Definition: session.hpp:50
    -
    Definition: constant.hpp:9
    -
    Leaf of the graph commonly representing the variable in an equation.
    Definition: ileaf.hpp:19
    - -
    Traveler that maps each tensor to its subtree&#39;s maximum depth.
    Definition: traveler.hpp:37
    -
    Definition: optimize.hpp:12
    -
    TensSetT visited_
    Definition: session.hpp:63
    -
    virtual void update(TensSetT updated={}, TensSetT ignores={})=0
    -
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    -
    std::unordered_set< ade::TensptrT > tracked_
    Definition: session.hpp:197
    -
    std::unordered_map< ade::iTensor *, ParentMapT > parents_
    Tracks child to parents relationship.
    Definition: traveler.hpp:174
    -
    virtual void track(ade::TensT roots)=0
    -
    Interface to travel through graph, treating iLeaf and iFunctor differently.
    Definition: itensor.hpp:22
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    A functor node with direct access to evaluated data.
    Definition: iopfunc.hpp:20
    -
    void track(ade::TensT roots) override
    Definition: session.hpp:70
    - -
    virtual const ArgsT & get_children(void) const =0
    Return children nodes as a vector of raw pointers.
    -
    std::vector< std::pair< ade::iOperableFunc *, size_t > > requirements_
    Definition: session.hpp:204
    -
    Definition: session.hpp:33
    -
    Coordinate mapper and tensor pair.
    Definition: funcarg.hpp:21
    -
    std::vector< TensptrT > TensT
    Vector representation of ade tensor pointers.
    Definition: funcarg.hpp:104
    -
    Traveler that for each child tracks the relationship to all parents.
    Definition: traveler.hpp:146
    -
    ade::TensT optimize(ade::TensT roots, const OptCtx &opts)
    -
    ade::GraphStat stat_
    Definition: session.hpp:199
    -
    void update_target(TensSetT target, TensSetT updated={}) override
    Definition: session.hpp:155
    -
    size_t d
    Definition: session.hpp:35
    -
    virtual ~iSession(void)=default
    - -
    - - - - diff --git a/docs/shape_8cpp.html b/docs/shape_8cpp.html deleted file mode 100644 index d964fea0f..000000000 --- a/docs/shape_8cpp.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: ade/src/shape.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    shape.cpp File Reference
    -
    -
    -
    #include "ade/shape.hpp"
    -
    -Include dependency graph for shape.cpp:
    -
    -
    - - - -
    -
    - - - - diff --git a/docs/shape_8cpp__incl.map b/docs/shape_8cpp__incl.map deleted file mode 100644 index 45236c2c4..000000000 --- a/docs/shape_8cpp__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/shape_8cpp__incl.md5 b/docs/shape_8cpp__incl.md5 deleted file mode 100644 index 8c847f54a..000000000 --- a/docs/shape_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2cd627555563e07c13a92ba8dbc7b2fb \ No newline at end of file diff --git a/docs/shape_8cpp__incl.png b/docs/shape_8cpp__incl.png deleted file mode 100644 index 34676c9fc..000000000 Binary files a/docs/shape_8cpp__incl.png and /dev/null differ diff --git a/docs/shape_8hpp.html b/docs/shape_8hpp.html deleted file mode 100644 index e23738319..000000000 --- a/docs/shape_8hpp.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -Tenncor: ade/shape.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    shape.hpp File Reference
    -
    -
    -
    #include <array>
    -#include <cmath>
    -#include <numeric>
    -#include <vector>
    -#include "logs/logs.hpp"
    -
    -Include dependency graph for shape.hpp:
    -
    -
    -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    struct  ade::Shape
     
    - - - -

    -Namespaces

     ade
     
    - - - - - - - - - - - - - - - - -

    -Typedefs

    using ade::RankT = uint8_t
     Type used for shape rank. More...
     
    using ade::DimT = uint16_t
     
    using ade::CDimT = double
     Type used for coordinate dimensions. More...
     
    using ade::NElemT = uint64_t
     
    using ade::ShapeT = std::array< DimT, rank_cap >
     Array type used to hold dimension info in Shape. More...
     
    using ade::CoordT = std::array< CDimT, rank_cap >
     
    - - - - - -

    -Functions

    NElemT ade::index (Shape shape, CoordT coord)
     
    CoordT ade::coordinate (Shape shape, NElemT idx)
     
    - - - - -

    -Variables

    const RankT ade::rank_cap = 8
     Number of dimsensions in a shape/coordinate. More...
     
    -
    - - - - diff --git a/docs/shape_8hpp__dep__incl.map b/docs/shape_8hpp__dep__incl.map deleted file mode 100644 index e02b4b8db..000000000 --- a/docs/shape_8hpp__dep__incl.map +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/shape_8hpp__dep__incl.md5 b/docs/shape_8hpp__dep__incl.md5 deleted file mode 100644 index b2d54f7d6..000000000 --- a/docs/shape_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -17bc3940866276b07cdcf4fefa2f5fc8 \ No newline at end of file diff --git a/docs/shape_8hpp__dep__incl.png b/docs/shape_8hpp__dep__incl.png deleted file mode 100644 index bae265bc3..000000000 Binary files a/docs/shape_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/shape_8hpp__incl.map b/docs/shape_8hpp__incl.map deleted file mode 100644 index 381e9d756..000000000 --- a/docs/shape_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/shape_8hpp__incl.md5 b/docs/shape_8hpp__incl.md5 deleted file mode 100644 index 291be0491..000000000 --- a/docs/shape_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -de2e59d3ff30bac8fdf137c29d2241d9 \ No newline at end of file diff --git a/docs/shape_8hpp__incl.png b/docs/shape_8hpp__incl.png deleted file mode 100644 index f035b2f21..000000000 Binary files a/docs/shape_8hpp__incl.png and /dev/null differ diff --git a/docs/shape_8hpp_source.html b/docs/shape_8hpp_source.html deleted file mode 100644 index bce03df3c..000000000 --- a/docs/shape_8hpp_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Tenncor: ade/shape.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    shape.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include <array>
    10 #include <cmath>
    11 #include <numeric>
    12 #include <vector>
    13 
    14 #include "logs/logs.hpp"
    15 
    16 #ifndef ADE_SHAPE_HPP
    17 #define ADE_SHAPE_HPP
    18 
    19 namespace ade
    20 {
    21 
    23 using RankT = uint8_t;
    24 
    25 // /// Type used for shape dimension
    26 // #if !defined(SDIM_BYTES) || SDIM_BYTES <= 1
    27 // using DimT = uint8_t;
    28 // #elif SDIM_BYTES <= 2
    29 using DimT = uint16_t;
    30 // #elif SDIM_BYTES <= 4
    31 // using DimT = uint32_t;
    32 // #else
    33 // using DimT = uint64_t;
    34 // #endif
    35 
    37 using CDimT = double;
    38 
    42 using NElemT = uint64_t;
    43 
    45 const RankT rank_cap = 8;
    46 
    48 using ShapeT = std::array<DimT,rank_cap>;
    49 
    54 using CoordT = std::array<CDimT,rank_cap>;
    55 
    60 struct Shape final
    61 {
    63  using iterator = ShapeT::iterator;
    64 
    66  using const_iterator = ShapeT::const_iterator;
    67 
    68  Shape (void)
    69  {
    70  std::fill(dims_.begin(), dims_.end(), 1);
    71  }
    72 
    73  Shape (std::vector<DimT> dims)
    74  {
    75  vector_assign(dims);
    76  }
    77 
    78  Shape (const Shape& other) = default;
    79 
    80  Shape& operator = (const Shape& other) = default;
    81 
    82  Shape& operator = (const std::vector<DimT>& dims)
    83  {
    84  vector_assign(dims);
    85  return *this;
    86  }
    87 
    88  Shape (Shape&& other)
    89  {
    90  move_helper(std::move(other));
    91  }
    92 
    94  {
    95  if (this != &other)
    96  {
    97  move_helper(std::move(other));
    98  }
    99  return *this;
    100  }
    101 
    102 
    103  // >>>> ACCESSORS <<<<
    104 
    106  DimT at (RankT idx) const
    107  {
    108  if (rank_cap <= idx)
    109  {
    110  logs::fatalf("cannot access out of bounds index %d", idx);
    111  }
    112  return dims_.at(idx);
    113  }
    114 
    116  NElemT n_elems (void) const
    117  {
    118  auto it = dims_.begin();
    119  return std::accumulate(it, it + rank_cap, (NElemT) 1,
    120  std::multiplies<NElemT>());
    121  }
    122 
    125  bool compatible_before (const Shape& other, RankT idx) const
    126  {
    127  auto it = dims_.begin();
    128  return std::equal(it, it + std::min(idx, rank_cap), other.dims_.begin());
    129  }
    130 
    134  bool compatible_after (const Shape& other, RankT idx) const
    135  {
    136  bool compatible = false;
    137  if (idx < rank_cap)
    138  {
    139  compatible = std::equal(dims_.begin() + idx,
    140  dims_.end(), other.dims_.begin() + idx);
    141  }
    142  return compatible;
    143  }
    144 
    146  std::string to_string (void) const
    147  {
    148  return fmts::to_string(begin(), end());
    149  }
    150 
    151  // >>>> INTERNAL CONTROL <<<<
    152 
    155  {
    156  return dims_.begin();
    157  }
    158 
    160  iterator end (void)
    161  {
    162  return dims_.end();
    163  }
    164 
    166  const_iterator begin (void) const
    167  {
    168  return dims_.begin();
    169  }
    170 
    172  const_iterator end (void) const
    173  {
    174  return dims_.end();
    175  }
    176 
    177 private:
    178  void vector_assign (const std::vector<DimT>& dims)
    179  {
    180  auto src = dims.begin();
    181  if (std::any_of(src, dims.end(),
    182  [](DimT d)
    183  {
    184  return d == 0;
    185  }))
    186  {
    187  logs::fatalf("cannot create shape with vector containing zero: %s",
    188  fmts::to_string(dims.begin(), dims.end()).c_str());
    189  }
    190  auto dest = dims_.begin();
    191  RankT rank = std::min((size_t) rank_cap, dims.size());
    192  std::copy(src, src + rank, dest);
    193  std::fill(dest + rank, dest + rank_cap, 1);
    194  }
    195 
    196  void move_helper (Shape&& other)
    197  {
    198  dims_ = std::move(other.dims_);
    199  std::fill(other.dims_.begin(), other.dims_.end(), 1);
    200  }
    201 
    204 };
    205 
    212 NElemT index (Shape shape, CoordT coord);
    213 
    217 CoordT coordinate (Shape shape, NElemT idx);
    218 
    219 }
    220 
    221 #endif // ADE_SHAPE_HPP
    uint64_t NElemT
    Definition: shape.hpp:42
    -
    void move_helper(Shape &&other)
    Definition: shape.hpp:196
    -
    std::array< DimT, rank_cap > ShapeT
    Array type used to hold dimension info in Shape.
    Definition: shape.hpp:48
    -
    DimT at(RankT idx) const
    Return DimT element at idx for any index in range [0:rank_cap)
    Definition: shape.hpp:106
    -
    const_iterator begin(void) const
    Return begin constant iterator of internal array.
    Definition: shape.hpp:166
    -
    std::string to_string(void) const
    Return string representation of shape.
    Definition: shape.hpp:146
    -
    Shape & operator=(const Shape &other)=default
    -
    iterator end(void)
    Return end iterator of internal array.
    Definition: shape.hpp:160
    -
    NElemT n_elems(void) const
    Return the total number of elements represented by the shape.
    Definition: shape.hpp:116
    -
    uint16_t DimT
    Definition: shape.hpp:29
    -
    ShapeT::iterator iterator
    Type of iterator used to iterate through internal array.
    Definition: shape.hpp:63
    -
    EigenptrT< T > min(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:893
    -
    Shape(Shape &&other)
    Definition: shape.hpp:88
    -
    iterator begin(void)
    Return begin iterator of internal array.
    Definition: shape.hpp:154
    -
    ShapeT::const_iterator const_iterator
    Type of constant iterator used to iterate through internal array.
    Definition: shape.hpp:66
    -
    Definition: coord.hpp:16
    -
    double CDimT
    Type used for coordinate dimensions.
    Definition: shape.hpp:37
    -
    bool compatible_before(const Shape &other, RankT idx) const
    Definition: shape.hpp:125
    -
    void vector_assign(const std::vector< DimT > &dims)
    Definition: shape.hpp:178
    -
    Shape(std::vector< DimT > dims)
    Definition: shape.hpp:73
    -
    uint8_t RankT
    Type used for shape rank.
    Definition: shape.hpp:23
    -
    NElemT index(Shape shape, CoordT coord)
    -
    ShapeT dims_
    Array of dimension values.
    Definition: shape.hpp:203
    -
    bool compatible_after(const Shape &other, RankT idx) const
    Definition: shape.hpp:134
    -
    Definition: shape.hpp:60
    -
    std::array< CDimT, rank_cap > CoordT
    Definition: shape.hpp:54
    -
    const_iterator end(void) const
    Return end constant iterator of internal array.
    Definition: shape.hpp:172
    -
    CoordT coordinate(Shape shape, NElemT idx)
    -
    Shape(void)
    Definition: shape.hpp:68
    -
    const RankT rank_cap
    Number of dimsensions in a shape/coordinate.
    Definition: shape.hpp:45
    -
    std::string to_string(const MatrixT &mat)
    Return the string representation of input matrix.
    -
    - - - - diff --git a/docs/splitbar.png b/docs/splitbar.png deleted file mode 100644 index fe895f2c5..000000000 Binary files a/docs/splitbar.png and /dev/null differ diff --git a/docs/stats_8cpp.html b/docs/stats_8cpp.html deleted file mode 100644 index f9bb66be6..000000000 --- a/docs/stats_8cpp.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: opt/src/stats.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    stats.cpp File Reference
    -
    -
    -
    #include "opt/stats.hpp"
    -
    -Include dependency graph for stats.cpp:
    -
    -
    - - - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/stats_8cpp__incl.map b/docs/stats_8cpp__incl.map deleted file mode 100644 index 58b7a03db..000000000 --- a/docs/stats_8cpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/stats_8cpp__incl.md5 b/docs/stats_8cpp__incl.md5 deleted file mode 100644 index bf496a132..000000000 --- a/docs/stats_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e60662a7d16186dc7de7338f76c78b27 \ No newline at end of file diff --git a/docs/stats_8cpp__incl.png b/docs/stats_8cpp__incl.png deleted file mode 100644 index 86aa9874b..000000000 Binary files a/docs/stats_8cpp__incl.png and /dev/null differ diff --git a/docs/stats_8hpp.html b/docs/stats_8hpp.html deleted file mode 100644 index 7199fca45..000000000 --- a/docs/stats_8hpp.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - -Tenncor: opt/stats.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    stats.hpp File Reference
    -
    -
    -
    #include "ade/ade.hpp"
    -#include "tag/prop.hpp"
    -
    -Include dependency graph for stats.hpp:
    -
    -
    - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Namespaces

     opt
     
    - - - - - - - - - - - - - - - - - -

    -Functions

    bool opt::is_scalar (ade::iLeaf *leaf)
     
    std::string opt::to_string (ade::CoordptrT c)
     
    bool opt::lt (ade::CoordptrT a, ade::CoordptrT b)
     
    bool opt::is_equal (ade::CoordptrT a, ade::CoordptrT b)
     
    bool opt::lt (std::unordered_set< ade::iTensor *> priorities, ade::iLeaf *a, ade::iLeaf *b)
     
    bool opt::is_equal (ade::iLeaf *a, ade::iLeaf *b)
     
    bool opt::lt (std::unordered_set< ade::iTensor *> priorities, ade::iFunctor *a, ade::iFunctor *b)
     
    bool opt::is_equal (ade::iFunctor *a, ade::iFunctor *b)
     
    -
    - - - - diff --git a/docs/stats_8hpp__dep__incl.map b/docs/stats_8hpp__dep__incl.map deleted file mode 100644 index 5199a815a..000000000 --- a/docs/stats_8hpp__dep__incl.map +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/docs/stats_8hpp__dep__incl.md5 b/docs/stats_8hpp__dep__incl.md5 deleted file mode 100644 index 6ab36bfc0..000000000 --- a/docs/stats_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -99a35729ec02fcfb1dd9d62bbac97c03 \ No newline at end of file diff --git a/docs/stats_8hpp__dep__incl.png b/docs/stats_8hpp__dep__incl.png deleted file mode 100644 index f04d1b034..000000000 Binary files a/docs/stats_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/stats_8hpp__incl.map b/docs/stats_8hpp__incl.map deleted file mode 100644 index f6f067113..000000000 --- a/docs/stats_8hpp__incl.map +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/stats_8hpp__incl.md5 b/docs/stats_8hpp__incl.md5 deleted file mode 100644 index 06b6fb19b..000000000 --- a/docs/stats_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ad03ee16a26e8f603cdc9c7119b805c0 \ No newline at end of file diff --git a/docs/stats_8hpp__incl.png b/docs/stats_8hpp__incl.png deleted file mode 100644 index c90d67a78..000000000 Binary files a/docs/stats_8hpp__incl.png and /dev/null differ diff --git a/docs/stats_8hpp_source.html b/docs/stats_8hpp_source.html deleted file mode 100644 index 6d9a1afb7..000000000 --- a/docs/stats_8hpp_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: opt/stats.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    stats.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "ade/ade.hpp"
    2 
    3 #include "tag/prop.hpp"
    4 
    5 #ifndef OPT_STATS_HPP
    6 #define OPT_STATS_HPP
    7 
    8 namespace opt
    9 {
    10 
    11 bool is_scalar (ade::iLeaf* leaf);
    12 
    13 // ==== CoordptrT stringification + comparators
    14 
    15 std::string to_string (ade::CoordptrT c);
    16 
    17 bool lt (ade::CoordptrT a, ade::CoordptrT b);
    18 
    20 
    21 // ==== Leaf comparators
    22 
    23 bool lt (std::unordered_set<ade::iTensor*> priorities,
    24  ade::iLeaf* a, ade::iLeaf* b);
    25 
    26 // for any ileaf pair a-b, they are equivalent IFF they are both tagged immutable AND
    27 // share same shape and data values
    28 bool is_equal (ade::iLeaf* a, ade::iLeaf* b);
    29 
    30 // ==== Functor comparators
    31 
    32 bool lt (std::unordered_set<ade::iTensor*> priorities,
    34 
    35 // for any functors a-b, they are equivalent IFF a and b are the same opcode AND
    36 // share identical function arguments (same children, shapers, and coorders)
    37 // order matters UNLESS the op is tagged as commutative
    39 
    40 }
    41 
    42 #endif // OPT_STATS_HPP
    Interface of iOperation-defined operation node.
    Definition: ifunctor.hpp:28
    -
    bool lt(ade::CoordptrT a, ade::CoordptrT b)
    -
    bool is_scalar(ade::iLeaf *leaf)
    - -
    Leaf of the graph commonly representing the variable in an equation.
    Definition: ileaf.hpp:19
    -
    bool is_equal(ade::CoordptrT a, ade::CoordptrT b)
    -
    std::shared_ptr< iCoordMap > CoordptrT
    Type of iCoordMap smartpointer.
    Definition: coord.hpp:106
    -
    Definition: candidate.hpp:11
    -
    std::string to_string(ade::CoordptrT c)
    - -
    - - - - diff --git a/docs/stream_8cpp.html b/docs/stream_8cpp.html deleted file mode 100644 index a09bdf802..000000000 --- a/docs/stream_8cpp.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - -Tenncor: dbg/python/stream.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    stream.cpp File Reference
    -
    -
    -
    #include <fstream>
    -#include <sstream>
    -#include "pybind11/pybind11.h"
    -#include "pybind11/stl.h"
    -#include "ade/ade.hpp"
    -#include "dbg/stream/ade.hpp"
    -#include "dbg/stream/ade_csv.hpp"
    -
    -Include dependency graph for stream.cpp:
    -
    -
    - - - - - - - - - - - - - - - - - -
    -
    - - - -

    -Functions

     PYBIND11_MODULE (stream_dbg, m)
     
    -

    Function Documentation

    - -

    ◆ PYBIND11_MODULE()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    PYBIND11_MODULE (stream_dbg ,
     
    )
    -
    - -
    -
    -
    - - - - diff --git a/docs/stream_8cpp__incl.map b/docs/stream_8cpp__incl.map deleted file mode 100644 index b8b4309b8..000000000 --- a/docs/stream_8cpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/stream_8cpp__incl.md5 b/docs/stream_8cpp__incl.md5 deleted file mode 100644 index 0aa530a1d..000000000 --- a/docs/stream_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e661b40591597dd4ea1a66d526e895d1 \ No newline at end of file diff --git a/docs/stream_8cpp__incl.png b/docs/stream_8cpp__incl.png deleted file mode 100644 index 05435cda6..000000000 Binary files a/docs/stream_8cpp__incl.png and /dev/null differ diff --git a/docs/struct_arg-members.html b/docs/struct_arg-members.html deleted file mode 100644 index ee10610e0..000000000 --- a/docs/struct_arg-members.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Arg Member List
    -
    -
    - -

    This is the complete list of members for Arg, including all inherited members.

    - - - - -
    coorder_Arg
    shaper_Arg
    subgraph_Arg
    - - - - diff --git a/docs/struct_arg.html b/docs/struct_arg.html deleted file mode 100644 index 9a4f84bfe..000000000 --- a/docs/struct_arg.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Tenncor: Arg Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Arg Struct Reference
    -
    -
    - -

    #include <def.h>

    -
    -Collaboration diagram for Arg:
    -
    -
    Collaboration graph
    - - - - - - - - -
    [legend]
    - - - - - - - - -

    -Public Attributes

    struct Subgraphsubgraph_
     
    struct NumListshaper_
     
    struct NumListcoorder_
     
    -

    Member Data Documentation

    - -

    ◆ coorder_

    - -
    -
    - - - - -
    struct NumList* Arg::coorder_
    -
    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - -
    struct NumList* Arg::shaper_
    -
    - -
    -
    - -

    ◆ subgraph_

    - -
    -
    - - - - -
    struct Subgraph* Arg::subgraph_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_arg__coll__graph.map b/docs/struct_arg__coll__graph.map deleted file mode 100644 index 07a5b5cb1..000000000 --- a/docs/struct_arg__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/struct_arg__coll__graph.md5 b/docs/struct_arg__coll__graph.md5 deleted file mode 100644 index 4915c7385..000000000 --- a/docs/struct_arg__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4c0c768f2f54d91f21d5b892c0e4eac0 \ No newline at end of file diff --git a/docs/struct_arg__coll__graph.png b/docs/struct_arg__coll__graph.png deleted file mode 100644 index 314b71d1d..000000000 Binary files a/docs/struct_arg__coll__graph.png and /dev/null differ diff --git a/docs/struct_branch-members.html b/docs/struct_branch-members.html deleted file mode 100644 index 47ac07b8c..000000000 --- a/docs/struct_branch-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Branch Member List
    -
    -
    - -

    This is the complete list of members for Branch, including all inherited members.

    - - - - - -
    args_Branch
    is_group_Branch
    label_Branch
    variadic_Branch
    - - - - diff --git a/docs/struct_branch.html b/docs/struct_branch.html deleted file mode 100644 index ff0274b6a..000000000 --- a/docs/struct_branch.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -Tenncor: Branch Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Branch Struct Reference
    -
    -
    - -

    #include <def.h>

    -
    -Collaboration diagram for Branch:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - -

    -Public Attributes

    int is_group_
     
    struct PtrListargs_
     
    char label_ [32]
     
    char variadic_ [32]
     
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    - - - - -
    struct PtrList* Branch::args_
    -
    - -
    -
    - -

    ◆ is_group_

    - -
    -
    - - - - -
    int Branch::is_group_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    char Branch::label_[32]
    -
    - -
    -
    - -

    ◆ variadic_

    - -
    -
    - - - - -
    char Branch::variadic_[32]
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_branch__coll__graph.map b/docs/struct_branch__coll__graph.map deleted file mode 100644 index 7bff7c24f..000000000 --- a/docs/struct_branch__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/struct_branch__coll__graph.md5 b/docs/struct_branch__coll__graph.md5 deleted file mode 100644 index 5c36fc6e9..000000000 --- a/docs/struct_branch__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -37261bd5e8c17448bfa5af3b7e5a072a \ No newline at end of file diff --git a/docs/struct_branch__coll__graph.png b/docs/struct_branch__coll__graph.png deleted file mode 100644 index 80f7a5f0d..000000000 Binary files a/docs/struct_branch__coll__graph.png and /dev/null differ diff --git a/docs/struct_c_s_v_equation-members.html b/docs/struct_c_s_v_equation-members.html deleted file mode 100644 index 88607a4b7..000000000 --- a/docs/struct_c_s_v_equation-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    CSVEquation Member List
    -
    -
    - -

    This is the complete list of members for CSVEquation, including all inherited members.

    - - - - - - - - - - - - -
    coorders_CSVEquation
    CSVEquation(GetTypeF get_ftype=[](ade::iFunctor *func) { return FUNCTOR;})CSVEquationinline
    edges_CSVEquation
    get_ftype_CSVEquation
    labels_CSVEquation
    nodes_CSVEquation
    showshape_CSVEquation
    to_stream(std::ostream &out)CSVEquationinline
    visit(ade::iLeaf *leaf) overrideCSVEquationinlinevirtual
    visit(ade::iFunctor *func) overrideCSVEquationinlinevirtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/struct_c_s_v_equation.html b/docs/struct_c_s_v_equation.html deleted file mode 100644 index cc85e34f6..000000000 --- a/docs/struct_c_s_v_equation.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -Tenncor: CSVEquation Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    CSVEquation Struct Referencefinal
    -
    -
    - -

    #include <ade_csv.hpp>

    -
    -Inheritance diagram for CSVEquation:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for CSVEquation:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - -

    -Classes

    struct  Edge
     
    struct  Node
     
    - - - - - - - - - - - - - - -

    -Public Member Functions

     CSVEquation (GetTypeF get_ftype=[](ade::iFunctor *func) { return FUNCTOR;})
     
    void visit (ade::iLeaf *leaf) override
     Visit leaf node. More...
     
    void visit (ade::iFunctor *func) override
     Visit functor node. More...
     
    void to_stream (std::ostream &out)
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - - - - - - - - - - -

    -Public Attributes

    bool showshape_ = false
     
    LabelsMapT labels_
     For every label associated with a tensor, show LABEL=value in the tree. More...
     
    std::vector< Edgeedges_
     
    std::unordered_map< ade::iTensor *, Nodenodes_
     
    std::unordered_map< ade::iCoordMap *, std::string > coorders_
     
    GetTypeF get_ftype_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ CSVEquation()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CSVEquation::CSVEquation (GetTypeF get_ftype = [](ade::iFunctor* func) { return FUNCTOR; })
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ to_stream()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void CSVEquation::to_stream (std::ostream & out)
    -
    -inline
    -
    - -
    -
    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void CSVEquation::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Visit leaf node.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void CSVEquation::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Visit functor node.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ coorders_

    - -
    -
    - - - - -
    std::unordered_map<ade::iCoordMap*,std::string> CSVEquation::coorders_
    -
    - -
    -
    - -

    ◆ edges_

    - -
    -
    - - - - -
    std::vector<Edge> CSVEquation::edges_
    -
    - -
    -
    - -

    ◆ get_ftype_

    - -
    -
    - - - - -
    GetTypeF CSVEquation::get_ftype_
    -
    - -
    -
    - -

    ◆ labels_

    - -
    -
    - - - - -
    LabelsMapT CSVEquation::labels_
    -
    - -

    For every label associated with a tensor, show LABEL=value in the tree.

    - -
    -
    - -

    ◆ nodes_

    - -
    -
    - - - - -
    std::unordered_map<ade::iTensor*,Node> CSVEquation::nodes_
    -
    - -
    -
    - -

    ◆ showshape_

    - -
    -
    - - - - -
    bool CSVEquation::showshape_ = false
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_c_s_v_equation_1_1_edge-members.html b/docs/struct_c_s_v_equation_1_1_edge-members.html deleted file mode 100644 index 0988fbe2b..000000000 --- a/docs/struct_c_s_v_equation_1_1_edge-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    CSVEquation::Edge Member List
    -
    -
    - -

    This is the complete list of members for CSVEquation::Edge, including all inherited members.

    - - - - - -
    child_CSVEquation::Edge
    coorder_CSVEquation::Edge
    edge_label_CSVEquation::Edge
    func_CSVEquation::Edge
    - - - - diff --git a/docs/struct_c_s_v_equation_1_1_edge.html b/docs/struct_c_s_v_equation_1_1_edge.html deleted file mode 100644 index c79cc4a3a..000000000 --- a/docs/struct_c_s_v_equation_1_1_edge.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -Tenncor: CSVEquation::Edge Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    CSVEquation::Edge Struct Reference
    -
    -
    - -

    #include <ade_csv.hpp>

    -
    -Collaboration diagram for CSVEquation::Edge:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - -

    -Public Attributes

    ade::iFunctorfunc_
     
    ade::iTensorchild_
     
    ade::iCoordMapcoorder_
     
    std::string edge_label_
     
    -

    Member Data Documentation

    - -

    ◆ child_

    - -
    -
    - - - - -
    ade::iTensor* CSVEquation::Edge::child_
    -
    - -
    -
    - -

    ◆ coorder_

    - -
    -
    - - - - -
    ade::iCoordMap* CSVEquation::Edge::coorder_
    -
    - -
    -
    - -

    ◆ edge_label_

    - -
    -
    - - - - -
    std::string CSVEquation::Edge::edge_label_
    -
    - -
    -
    - -

    ◆ func_

    - -
    -
    - - - - -
    ade::iFunctor* CSVEquation::Edge::func_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.map b/docs/struct_c_s_v_equation_1_1_edge__coll__graph.map deleted file mode 100644 index 046a66b88..000000000 --- a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.md5 b/docs/struct_c_s_v_equation_1_1_edge__coll__graph.md5 deleted file mode 100644 index 9279136f4..000000000 --- a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -85fe650b6625df4400a82f6fe1ace0dd \ No newline at end of file diff --git a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.png b/docs/struct_c_s_v_equation_1_1_edge__coll__graph.png deleted file mode 100644 index 0926e5f20..000000000 Binary files a/docs/struct_c_s_v_equation_1_1_edge__coll__graph.png and /dev/null differ diff --git a/docs/struct_c_s_v_equation_1_1_node-members.html b/docs/struct_c_s_v_equation_1_1_node-members.html deleted file mode 100644 index a2b1df633..000000000 --- a/docs/struct_c_s_v_equation_1_1_node-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    CSVEquation::Node Member List
    -
    -
    - -

    This is the complete list of members for CSVEquation::Node, including all inherited members.

    - - - - -
    id_CSVEquation::Node
    label_CSVEquation::Node
    ntype_CSVEquation::Node
    - - - - diff --git a/docs/struct_c_s_v_equation_1_1_node.html b/docs/struct_c_s_v_equation_1_1_node.html deleted file mode 100644 index 463e4bf0e..000000000 --- a/docs/struct_c_s_v_equation_1_1_node.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Tenncor: CSVEquation::Node Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    CSVEquation::Node Struct Reference
    -
    -
    - -

    #include <ade_csv.hpp>

    - - - - - - - - -

    -Public Attributes

    std::string label_
     
    NODE_TYPE ntype_
     
    size_t id_
     
    -

    Member Data Documentation

    - -

    ◆ id_

    - -
    -
    - - - - -
    size_t CSVEquation::Node::id_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string CSVEquation::Node::label_
    -
    - -
    -
    - -

    ◆ ntype_

    - -
    -
    - - - - -
    NODE_TYPE CSVEquation::Node::ntype_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_c_s_v_equation__coll__graph.map b/docs/struct_c_s_v_equation__coll__graph.map deleted file mode 100644 index 968f3a737..000000000 --- a/docs/struct_c_s_v_equation__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/struct_c_s_v_equation__coll__graph.md5 b/docs/struct_c_s_v_equation__coll__graph.md5 deleted file mode 100644 index f00e8daee..000000000 --- a/docs/struct_c_s_v_equation__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9f3338a1a2eaf9bf64b9ea969596ccc7 \ No newline at end of file diff --git a/docs/struct_c_s_v_equation__coll__graph.png b/docs/struct_c_s_v_equation__coll__graph.png deleted file mode 100644 index 5238b9571..000000000 Binary files a/docs/struct_c_s_v_equation__coll__graph.png and /dev/null differ diff --git a/docs/struct_c_s_v_equation__inherit__graph.map b/docs/struct_c_s_v_equation__inherit__graph.map deleted file mode 100644 index 968f3a737..000000000 --- a/docs/struct_c_s_v_equation__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/struct_c_s_v_equation__inherit__graph.md5 b/docs/struct_c_s_v_equation__inherit__graph.md5 deleted file mode 100644 index b32372d82..000000000 --- a/docs/struct_c_s_v_equation__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -08347fdad121b1009ad3464908b5b4f7 \ No newline at end of file diff --git a/docs/struct_c_s_v_equation__inherit__graph.png b/docs/struct_c_s_v_equation__inherit__graph.png deleted file mode 100644 index 5238b9571..000000000 Binary files a/docs/struct_c_s_v_equation__inherit__graph.png and /dev/null differ diff --git a/docs/struct_conversion-members.html b/docs/struct_conversion-members.html deleted file mode 100644 index bf1b87103..000000000 --- a/docs/struct_conversion-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Conversion Member List
    -
    -
    - -

    This is the complete list of members for Conversion, including all inherited members.

    - - - -
    dest_Conversion
    source_Conversion
    - - - - diff --git a/docs/struct_conversion.html b/docs/struct_conversion.html deleted file mode 100644 index aca36c599..000000000 --- a/docs/struct_conversion.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Tenncor: Conversion Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Conversion Struct Reference
    -
    -
    - -

    #include <def.h>

    -
    -Collaboration diagram for Conversion:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - -

    -Public Attributes

    struct Subgraphsource_
     
    struct Subgraphdest_
     
    -

    Member Data Documentation

    - -

    ◆ dest_

    - -
    -
    - - - - -
    struct Subgraph* Conversion::dest_
    -
    - -
    -
    - -

    ◆ source_

    - -
    -
    - - - - -
    struct Subgraph* Conversion::source_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_conversion__coll__graph.map b/docs/struct_conversion__coll__graph.map deleted file mode 100644 index 6ff06fabc..000000000 --- a/docs/struct_conversion__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/struct_conversion__coll__graph.md5 b/docs/struct_conversion__coll__graph.md5 deleted file mode 100644 index 6d433268d..000000000 --- a/docs/struct_conversion__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -91771e151992c296a80a3ddd7884dbfe \ No newline at end of file diff --git a/docs/struct_conversion__coll__graph.png b/docs/struct_conversion__coll__graph.png deleted file mode 100644 index 6eb5a6660..000000000 Binary files a/docs/struct_conversion__coll__graph.png and /dev/null differ diff --git a/docs/struct_graph_emitter_impl-members.html b/docs/struct_graph_emitter_impl-members.html deleted file mode 100644 index 9e39bb247..000000000 --- a/docs/struct_graph_emitter_impl-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    GraphEmitterImpl Member List
    -
    -
    - -

    This is the complete list of members for GraphEmitterImpl, including all inherited members.

    - - - - - - - - -
    CreateGraph(grpc::ServerContext *context, const tenncor::CreateGraphRequest *request, tenncor::CreateGraphResponse *response) overrideGraphEmitterImplinline
    edges_GraphEmitterImpl
    gid_GraphEmitterImpl
    HealthCheck(grpc::ServerContext *context, const tenncor::Empty *request, tenncor::Empty *response) overrideGraphEmitterImplinline
    nodes_GraphEmitterImpl
    UpdateGraph(grpc::ServerContext *context, const tenncor::UpdateGraphRequest *request, tenncor::UpdateGraphResponse *response) overrideGraphEmitterImplinline
    UpdateNodeData(grpc::ServerContext *context, grpc::ServerReader< tenncor::UpdateNodeDataRequest > *reader, tenncor::UpdateNodeDataResponse *response) overrideGraphEmitterImplinline
    - - - - diff --git a/docs/struct_graph_emitter_impl.html b/docs/struct_graph_emitter_impl.html deleted file mode 100644 index bbbcfa6f4..000000000 --- a/docs/struct_graph_emitter_impl.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - -Tenncor: GraphEmitterImpl Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    GraphEmitterImpl Struct Referencefinal
    -
    -
    -
    -Inheritance diagram for GraphEmitterImpl:
    -
    -
    Inheritance graph
    -
    [legend]
    -
    -Collaboration diagram for GraphEmitterImpl:
    -
    -
    Collaboration graph
    -
    [legend]
    - - - - - - -

    -Classes

    struct  Edge
     
    struct  Node
     
    - - - - - - - - - -

    -Public Member Functions

    grpc::Status HealthCheck (grpc::ServerContext *context, const tenncor::Empty *request, tenncor::Empty *response) override
     
    grpc::Status CreateGraph (grpc::ServerContext *context, const tenncor::CreateGraphRequest *request, tenncor::CreateGraphResponse *response) override
     
    grpc::Status UpdateGraph (grpc::ServerContext *context, const tenncor::UpdateGraphRequest *request, tenncor::UpdateGraphResponse *response) override
     
    grpc::Status UpdateNodeData (grpc::ServerContext *context, grpc::ServerReader< tenncor::UpdateNodeDataRequest > *reader, tenncor::UpdateNodeDataResponse *response) override
     
    - - - - - - - -

    -Public Attributes

    std::string gid_
     
    std::unordered_map< int32_t, Nodenodes_
     
    std::vector< Edgeedges_
     
    -

    Member Function Documentation

    - -

    ◆ CreateGraph()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    grpc::Status GraphEmitterImpl::CreateGraph (grpc::ServerContext * context,
    const tenncor::CreateGraphRequest * request,
    tenncor::CreateGraphResponse * response 
    )
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ HealthCheck()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    grpc::Status GraphEmitterImpl::HealthCheck (grpc::ServerContext * context,
    const tenncor::Empty * request,
    tenncor::Empty * response 
    )
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ UpdateGraph()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    grpc::Status GraphEmitterImpl::UpdateGraph (grpc::ServerContext * context,
    const tenncor::UpdateGraphRequest * request,
    tenncor::UpdateGraphResponse * response 
    )
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ UpdateNodeData()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    grpc::Status GraphEmitterImpl::UpdateNodeData (grpc::ServerContext * context,
    grpc::ServerReader< tenncor::UpdateNodeDataRequest > * reader,
    tenncor::UpdateNodeDataResponse * response 
    )
    -
    -inlineoverride
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ edges_

    - -
    -
    - - - - -
    std::vector<Edge> GraphEmitterImpl::edges_
    -
    - -
    -
    - -

    ◆ gid_

    - -
    -
    - - - - -
    std::string GraphEmitterImpl::gid_
    -
    - -
    -
    - -

    ◆ nodes_

    - -
    -
    - - - - -
    std::unordered_map<int32_t,Node> GraphEmitterImpl::nodes_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_graph_emitter_impl_1_1_edge-members.html b/docs/struct_graph_emitter_impl_1_1_edge-members.html deleted file mode 100644 index 1d7b584b2..000000000 --- a/docs/struct_graph_emitter_impl_1_1_edge-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    GraphEmitterImpl::Edge Member List
    -
    - - - - - diff --git a/docs/struct_graph_emitter_impl_1_1_edge.html b/docs/struct_graph_emitter_impl_1_1_edge.html deleted file mode 100644 index 5ddf9361e..000000000 --- a/docs/struct_graph_emitter_impl_1_1_edge.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - -Tenncor: GraphEmitterImpl::Edge Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    GraphEmitterImpl::Edge Struct Reference
    -
    -
    - - - - - - - - - - - - -

    -Public Attributes

    int32_t parent_id_
     
    int32_t child_id_
     
    std::string label_
     
    std::string shaper_
     
    std::string coorder_
     
    -

    Member Data Documentation

    - -

    ◆ child_id_

    - -
    -
    - - - - -
    int32_t GraphEmitterImpl::Edge::child_id_
    -
    - -
    -
    - -

    ◆ coorder_

    - -
    -
    - - - - -
    std::string GraphEmitterImpl::Edge::coorder_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string GraphEmitterImpl::Edge::label_
    -
    - -
    -
    - -

    ◆ parent_id_

    - -
    -
    - - - - -
    int32_t GraphEmitterImpl::Edge::parent_id_
    -
    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - -
    std::string GraphEmitterImpl::Edge::shaper_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_graph_emitter_impl_1_1_node-members.html b/docs/struct_graph_emitter_impl_1_1_node-members.html deleted file mode 100644 index afb960fc3..000000000 --- a/docs/struct_graph_emitter_impl_1_1_node-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    GraphEmitterImpl::Node Member List
    -
    - - - - - diff --git a/docs/struct_graph_emitter_impl_1_1_node.html b/docs/struct_graph_emitter_impl_1_1_node.html deleted file mode 100644 index 5e1cf8d38..000000000 --- a/docs/struct_graph_emitter_impl_1_1_node.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Tenncor: GraphEmitterImpl::Node Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    GraphEmitterImpl::Node Struct Reference
    -
    -
    - - - - - - - - - - -

    -Public Attributes

    std::vector< uint32_t > shape_
     
    std::unordered_map< std::string, std::vector< std::string > > tags_
     
    uint32_t max_height_
     
    uint32_t min_height_
     
    -

    Member Data Documentation

    - -

    ◆ max_height_

    - -
    -
    - - - - -
    uint32_t GraphEmitterImpl::Node::max_height_
    -
    - -
    -
    - -

    ◆ min_height_

    - -
    -
    - - - - -
    uint32_t GraphEmitterImpl::Node::min_height_
    -
    - -
    -
    - -

    ◆ shape_

    - -
    -
    - - - - -
    std::vector<uint32_t> GraphEmitterImpl::Node::shape_
    -
    - -
    -
    - -

    ◆ tags_

    - -
    -
    - - - - -
    std::unordered_map<std::string, std::vector<std::string> > GraphEmitterImpl::Node::tags_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_graph_emitter_impl__coll__graph.map b/docs/struct_graph_emitter_impl__coll__graph.map deleted file mode 100644 index 3fdad40a8..000000000 --- a/docs/struct_graph_emitter_impl__coll__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/struct_graph_emitter_impl__coll__graph.md5 b/docs/struct_graph_emitter_impl__coll__graph.md5 deleted file mode 100644 index d4b5dfd93..000000000 --- a/docs/struct_graph_emitter_impl__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3966f6fab7888d3f577034cbc6217294 \ No newline at end of file diff --git a/docs/struct_graph_emitter_impl__coll__graph.png b/docs/struct_graph_emitter_impl__coll__graph.png deleted file mode 100644 index 915c9fc37..000000000 Binary files a/docs/struct_graph_emitter_impl__coll__graph.png and /dev/null differ diff --git a/docs/struct_graph_emitter_impl__inherit__graph.map b/docs/struct_graph_emitter_impl__inherit__graph.map deleted file mode 100644 index 3fdad40a8..000000000 --- a/docs/struct_graph_emitter_impl__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/struct_graph_emitter_impl__inherit__graph.md5 b/docs/struct_graph_emitter_impl__inherit__graph.md5 deleted file mode 100644 index bd612f843..000000000 --- a/docs/struct_graph_emitter_impl__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -67b60f68eb9595e9bfa7e3d34bddc6cf \ No newline at end of file diff --git a/docs/struct_graph_emitter_impl__inherit__graph.png b/docs/struct_graph_emitter_impl__inherit__graph.png deleted file mode 100644 index 915c9fc37..000000000 Binary files a/docs/struct_graph_emitter_impl__inherit__graph.png and /dev/null differ diff --git a/docs/struct_group-members.html b/docs/struct_group-members.html deleted file mode 100644 index 35fad8c1b..000000000 --- a/docs/struct_group-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Group Member List
    -
    -
    - -

    This is the complete list of members for Group, including all inherited members.

    - - - -
    ref_Group
    tag_Group
    - - - - diff --git a/docs/struct_group.html b/docs/struct_group.html deleted file mode 100644 index 11719ef19..000000000 --- a/docs/struct_group.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: Group Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Group Struct Reference
    -
    -
    - -

    #include <def.h>

    - - - - - - -

    -Public Attributes

    char ref_ [32]
     
    char tag_ [32]
     
    -

    Member Data Documentation

    - -

    ◆ ref_

    - -
    -
    - - - - -
    char Group::ref_[32]
    -
    - -
    -
    - -

    ◆ tag_

    - -
    -
    - - - - -
    char Group::tag_[32]
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_num_list-members.html b/docs/struct_num_list-members.html deleted file mode 100644 index c41ad252d..000000000 --- a/docs/struct_num_list-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    NumList Member List
    -
    -
    - -

    This is the complete list of members for NumList, including all inherited members.

    - - - -
    head_NumList
    tail_NumList
    - - - - diff --git a/docs/struct_num_list.html b/docs/struct_num_list.html deleted file mode 100644 index 9684c77a2..000000000 --- a/docs/struct_num_list.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Tenncor: NumList Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    NumList Struct Reference
    -
    -
    - -

    #include <list.h>

    -
    -Collaboration diagram for NumList:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - -

    -Public Attributes

    struct NumNodehead_
     
    struct NumNodetail_
     
    -

    Member Data Documentation

    - -

    ◆ head_

    - -
    -
    - - - - -
    struct NumNode* NumList::head_
    -
    - -
    -
    - -

    ◆ tail_

    - -
    -
    - - - - -
    struct NumNode* NumList::tail_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_num_list__coll__graph.map b/docs/struct_num_list__coll__graph.map deleted file mode 100644 index 881d9ce01..000000000 --- a/docs/struct_num_list__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/struct_num_list__coll__graph.md5 b/docs/struct_num_list__coll__graph.md5 deleted file mode 100644 index 6a76e8b1a..000000000 --- a/docs/struct_num_list__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -024828f87887e50335ef1c208d876640 \ No newline at end of file diff --git a/docs/struct_num_list__coll__graph.png b/docs/struct_num_list__coll__graph.png deleted file mode 100644 index 3d14a823a..000000000 Binary files a/docs/struct_num_list__coll__graph.png and /dev/null differ diff --git a/docs/struct_num_node-members.html b/docs/struct_num_node-members.html deleted file mode 100644 index e72a71a3a..000000000 --- a/docs/struct_num_node-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    NumNode Member List
    -
    -
    - -

    This is the complete list of members for NumNode, including all inherited members.

    - - - -
    next_NumNode
    val_NumNode
    - - - - diff --git a/docs/struct_num_node.html b/docs/struct_num_node.html deleted file mode 100644 index 78412d065..000000000 --- a/docs/struct_num_node.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: NumNode Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    NumNode Struct Reference
    -
    -
    - -

    #include <list.h>

    -
    -Collaboration diagram for NumNode:
    -
    -
    Collaboration graph
    -
    [legend]
    - - - - - - -

    -Public Attributes

    struct NumNodenext_
     
    double val_
     
    -

    Member Data Documentation

    - -

    ◆ next_

    - -
    -
    - - - - -
    struct NumNode* NumNode::next_
    -
    - -
    -
    - -

    ◆ val_

    - -
    -
    - - - - -
    double NumNode::val_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_num_node__coll__graph.map b/docs/struct_num_node__coll__graph.map deleted file mode 100644 index 3e225d9fa..000000000 --- a/docs/struct_num_node__coll__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/struct_num_node__coll__graph.md5 b/docs/struct_num_node__coll__graph.md5 deleted file mode 100644 index 0f7b842c1..000000000 --- a/docs/struct_num_node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -fe6231216be5fdc4fd90c560dfc577d2 \ No newline at end of file diff --git a/docs/struct_num_node__coll__graph.png b/docs/struct_num_node__coll__graph.png deleted file mode 100644 index 8f04caa3c..000000000 Binary files a/docs/struct_num_node__coll__graph.png and /dev/null differ diff --git a/docs/struct_pretty_equation-members.html b/docs/struct_pretty_equation-members.html deleted file mode 100644 index 9bdd6c2d5..000000000 --- a/docs/struct_pretty_equation-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PrettyEquation Member List
    -
    -
    - -

    This is the complete list of members for PrettyEquation, including all inherited members.

    - - - - - - - -
    drawer_PrettyEquationprivate
    labels_PrettyEquation
    PrettyEquation(void)PrettyEquationinline
    print(std::ostream &out, ade::TensptrT &ptr)PrettyEquationinline
    print(std::ostream &out, ade::iTensor *ptr)PrettyEquationinline
    showshape_PrettyEquation
    - - - - diff --git a/docs/struct_pretty_equation.html b/docs/struct_pretty_equation.html deleted file mode 100644 index a0ff7d174..000000000 --- a/docs/struct_pretty_equation.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - - -Tenncor: PrettyEquation Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PrettyEquation Struct Referencefinal
    -
    -
    - -

    Use PrettyTree to render ade::TensptrT graph as an ascii art. - More...

    - -

    #include <ade.hpp>

    -
    -Collaboration diagram for PrettyEquation:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - -

    -Public Member Functions

     PrettyEquation (void)
     
    void print (std::ostream &out, ade::TensptrT &ptr)
     Stream equation of ptr to out. More...
     
    void print (std::ostream &out, ade::iTensor *ptr)
     
    - - - - - - -

    -Public Attributes

    LabelsMapT labels_
     For every label associated with a tensor, show LABEL=value in the tree. More...
     
    bool showshape_ = false
     
    - - - - -

    -Private Attributes

    PrettyTree< ade::iTensor * > drawer_
     Actual ascii renderer. More...
     
    -

    Detailed Description

    -

    Use PrettyTree to render ade::TensptrT graph as an ascii art.

    -

    Constructor & Destructor Documentation

    - -

    ◆ PrettyEquation()

    - -
    -
    - - - - - -
    - - - - - - - - -
    PrettyEquation::PrettyEquation (void )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void PrettyEquation::print (std::ostream & out,
    ade::TensptrTptr 
    )
    -
    -inline
    -
    - -

    Stream equation of ptr to out.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void PrettyEquation::print (std::ostream & out,
    ade::iTensorptr 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ drawer_

    - -
    -
    - - - - - -
    - - - - -
    PrettyTree<ade::iTensor*> PrettyEquation::drawer_
    -
    -private
    -
    - -

    Actual ascii renderer.

    - -
    -
    - -

    ◆ labels_

    - -
    -
    - - - - -
    LabelsMapT PrettyEquation::labels_
    -
    - -

    For every label associated with a tensor, show LABEL=value in the tree.

    - -
    -
    - -

    ◆ showshape_

    - -
    -
    - - - - -
    bool PrettyEquation::showshape_ = false
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_pretty_equation__coll__graph.map b/docs/struct_pretty_equation__coll__graph.map deleted file mode 100644 index 5e10c2a25..000000000 --- a/docs/struct_pretty_equation__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/struct_pretty_equation__coll__graph.md5 b/docs/struct_pretty_equation__coll__graph.md5 deleted file mode 100644 index bed6e18c0..000000000 --- a/docs/struct_pretty_equation__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d65ea03d5da2de321096500427e7f39f \ No newline at end of file diff --git a/docs/struct_pretty_equation__coll__graph.png b/docs/struct_pretty_equation__coll__graph.png deleted file mode 100644 index 2ab8c18ca..000000000 Binary files a/docs/struct_pretty_equation__coll__graph.png and /dev/null differ diff --git a/docs/struct_pretty_tensor-members.html b/docs/struct_pretty_tensor-members.html deleted file mode 100644 index 348ffe67c..000000000 --- a/docs/struct_pretty_tensor-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PrettyTensor< T > Member List
    -
    -
    - -

    This is the complete list of members for PrettyTensor< T >, including all inherited members.

    - - - - - -
    datalimit_PrettyTensor< T >
    PrettyTensor(std::vector< uint16_t > datalimit)PrettyTensor< T >inline
    print(std::ostream &out, T *arr, std::vector< uint8_t > shape)PrettyTensor< T >inline
    print_helper(std::ostream &out, const std::vector< uint8_t > &shape, T *arr, uint8_t rank)PrettyTensor< T >inlineprivate
    - - - - diff --git a/docs/struct_pretty_tensor.html b/docs/struct_pretty_tensor.html deleted file mode 100644 index 947cb5d83..000000000 --- a/docs/struct_pretty_tensor.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Tenncor: PrettyTensor< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PrettyTensor< T > Struct Template Referencefinal
    -
    -
    - -

    Draw data as a multi-dimension array (similar to python) according to shape. - More...

    - -

    #include <tensor.hpp>

    - - - - - - -

    -Public Member Functions

     PrettyTensor (std::vector< uint16_t > datalimit)
     
    void print (std::ostream &out, T *arr, std::vector< uint8_t > shape)
     
    - - - - -

    -Public Attributes

    std::vector< uint16_t > datalimit_
     Number of elements to show for each dimension. More...
     
    - - - -

    -Private Member Functions

    void print_helper (std::ostream &out, const std::vector< uint8_t > &shape, T *arr, uint8_t rank)
     
    -

    Detailed Description

    -

    template<typename T>
    -struct PrettyTensor< T >

    - -

    Draw data as a multi-dimension array (similar to python) according to shape.

    -

    tensor.hpp dbg

    -

    Purpose: Draw tensor data in python-array format

    -

    Constructor & Destructor Documentation

    - -

    ◆ PrettyTensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    PrettyTensor< T >::PrettyTensor (std::vector< uint16_t > datalimit)
    -
    -inline
    -
    -

    Datalimit represents the maximum number of elements to print for each dimension corresponding to datalimit's index For example: given datalimit={5, 4, 3, 2}, print will only display at most 5 elements of the first dimension, at most 4 of the second, etc. beyond the first four dimensions, printing will display as many elements as there are

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ print()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void PrettyTensor< T >::print (std::ostream & out,
    T * arr,
    std::vector< uint8_t > shape 
    )
    -
    -inline
    -
    -

    Given the output stream, flattened tensor data, and the shape, wrap square brackets around each dimension in the tensor and stream to out For example: given arr={1, 2, 3, 4}, shape={2, 2}, print will stream [[1, 2], [3, 4]] to out

    - -
    -
    - -

    ◆ print_helper()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void PrettyTensor< T >::print_helper (std::ostream & out,
    const std::vector< uint8_t > & shape,
    T * arr,
    uint8_t rank 
    )
    -
    -inlineprivate
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ datalimit_

    - -
    -
    -
    -template<typename T >
    - - - - -
    std::vector<uint16_t> PrettyTensor< T >::datalimit_
    -
    - -

    Number of elements to show for each dimension.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_pretty_tree-members.html b/docs/struct_pretty_tree-members.html deleted file mode 100644 index e75997460..000000000 --- a/docs/struct_pretty_tree-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PrettyTree< T > Member List
    -
    -
    - -

    This is the complete list of members for PrettyTree< T >, including all inherited members.

    - - - - - - - -
    branch_length_PrettyTree< T >
    PrettyTree(std::function< std::vector< T >(T &)> traverser, std::function< void(std::ostream &, T &)> to_stream)PrettyTree< T >inline
    print(std::ostream &out, T root)PrettyTree< T >inline
    print_helper(std::ostream &out, T root, std::string prefix)PrettyTree< T >inlineprivate
    to_stream_PrettyTree< T >
    traverser_PrettyTree< T >
    - - - - diff --git a/docs/struct_pretty_tree.html b/docs/struct_pretty_tree.html deleted file mode 100644 index 299cf9d3f..000000000 --- a/docs/struct_pretty_tree.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - - -Tenncor: PrettyTree< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PrettyTree< T > Struct Template Referencefinal
    -
    -
    - -

    #include <tree.hpp>

    - - - - - - -

    -Public Member Functions

     PrettyTree (std::function< std::vector< T >(T &)> traverser, std::function< void(std::ostream &, T &)> to_stream)
     
    void print (std::ostream &out, T root)
     
    - - - - - - - - - - -

    -Public Attributes

    size_t branch_length_ = 2
     Horizontal length of the branch, by default the branch looks like `–. More...
     
    std::function< std::vector< T >T &)> traverser_
     Behavior of traversing through a structure. More...
     
    std::function< void(std::ostream &, T &)> to_stream_
     Behavior of displaying a node in the structure. More...
     
    - - - -

    -Private Member Functions

    void print_helper (std::ostream &out, T root, std::string prefix)
     
    -

    Detailed Description

    -

    template<typename T>
    -struct PrettyTree< T >

    - -

    Generically draw a traversible structure Traversible structure is anything having a parent-children relationship Template argument T defines one node of the traversible structure

    -

    Constructor & Destructor Documentation

    - -

    ◆ PrettyTree()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    PrettyTree< T >::PrettyTree (std::function< std::vector< T >(T &)> traverser,
    std::function< void(std::ostream &, T &)> to_stream 
    )
    -
    -inline
    -
    -

    Traverser and streamer methods define behavior for traversing through and displaying elements of a generic structure

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ print()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void PrettyTree< T >::print (std::ostream & out,
    root 
    )
    -
    -inline
    -
    -

    Given the output stream, and a root to start the traversal, wrap brackets around string representation of each node and connect each node with series of | and `– branches and stream to out

    - -
    -
    - -

    ◆ print_helper()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void PrettyTree< T >::print_helper (std::ostream & out,
    root,
    std::string prefix 
    )
    -
    -inlineprivate
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ branch_length_

    - -
    -
    -
    -template<typename T>
    - - - - -
    size_t PrettyTree< T >::branch_length_ = 2
    -
    - -

    Horizontal length of the branch, by default the branch looks like `–.

    - -
    -
    - -

    ◆ to_stream_

    - -
    -
    -
    -template<typename T>
    - - - - -
    std::function<void(std::ostream&,T&)> PrettyTree< T >::to_stream_
    -
    - -

    Behavior of displaying a node in the structure.

    - -
    -
    - -

    ◆ traverser_

    - -
    -
    -
    -template<typename T>
    - - - - -
    std::function<std::vector<T>T&)> PrettyTree< T >::traverser_
    -
    - -

    Behavior of traversing through a structure.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_property-members.html b/docs/struct_property-members.html deleted file mode 100644 index 6d91e8ec1..000000000 --- a/docs/struct_property-members.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Property Member List
    -
    -
    - -

    This is the complete list of members for Property, including all inherited members.

    - - - - -
    is_group_Property
    label_Property
    property_Property
    - - - - diff --git a/docs/struct_property.html b/docs/struct_property.html deleted file mode 100644 index 2abc79d7c..000000000 --- a/docs/struct_property.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -Tenncor: Property Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Property Struct Reference
    -
    -
    - -

    #include <def.h>

    - - - - - - - - -

    -Public Attributes

    char label_ [32]
     
    char property_ [32]
     
    int is_group_
     
    -

    Member Data Documentation

    - -

    ◆ is_group_

    - -
    -
    - - - - -
    int Property::is_group_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    char Property::label_[32]
    -
    - -
    -
    - -

    ◆ property_

    - -
    -
    - - - - -
    char Property::property_[32]
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_ptr_list-members.html b/docs/struct_ptr_list-members.html deleted file mode 100644 index 22d90f926..000000000 --- a/docs/struct_ptr_list-members.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PtrList Member List
    -
    -
    - -

    This is the complete list of members for PtrList, including all inherited members.

    - - - - -
    head_PtrList
    tail_PtrList
    type_PtrList
    - - - - diff --git a/docs/struct_ptr_list.html b/docs/struct_ptr_list.html deleted file mode 100644 index a78fe6ee3..000000000 --- a/docs/struct_ptr_list.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - -Tenncor: PtrList Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PtrList Struct Reference
    -
    -
    - -

    #include <list.h>

    -
    -Collaboration diagram for PtrList:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Attributes

    struct PtrNodehead_
     
    struct PtrNodetail_
     
    size_t type_
     
    -

    Member Data Documentation

    - -

    ◆ head_

    - -
    -
    - - - - -
    struct PtrNode* PtrList::head_
    -
    - -
    -
    - -

    ◆ tail_

    - -
    -
    - - - - -
    struct PtrNode* PtrList::tail_
    -
    - -
    -
    - -

    ◆ type_

    - -
    -
    - - - - -
    size_t PtrList::type_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_ptr_list__coll__graph.map b/docs/struct_ptr_list__coll__graph.map deleted file mode 100644 index 18816e7b5..000000000 --- a/docs/struct_ptr_list__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/struct_ptr_list__coll__graph.md5 b/docs/struct_ptr_list__coll__graph.md5 deleted file mode 100644 index bb248336d..000000000 --- a/docs/struct_ptr_list__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8581c79f29f700131fa556960ad54427 \ No newline at end of file diff --git a/docs/struct_ptr_list__coll__graph.png b/docs/struct_ptr_list__coll__graph.png deleted file mode 100644 index 3c1289246..000000000 Binary files a/docs/struct_ptr_list__coll__graph.png and /dev/null differ diff --git a/docs/struct_ptr_node-members.html b/docs/struct_ptr_node-members.html deleted file mode 100644 index 45cee0b61..000000000 --- a/docs/struct_ptr_node-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PtrNode Member List
    -
    -
    - -

    This is the complete list of members for PtrNode, including all inherited members.

    - - - -
    next_PtrNode
    val_PtrNode
    - - - - diff --git a/docs/struct_ptr_node.html b/docs/struct_ptr_node.html deleted file mode 100644 index db4c2e13a..000000000 --- a/docs/struct_ptr_node.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Tenncor: PtrNode Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PtrNode Struct Reference
    -
    -
    - -

    #include <list.h>

    -
    -Collaboration diagram for PtrNode:
    -
    -
    Collaboration graph
    -
    [legend]
    - - - - - - -

    -Public Attributes

    struct PtrNodenext_
     
    void * val_
     
    -

    Member Data Documentation

    - -

    ◆ next_

    - -
    -
    - - - - -
    struct PtrNode* PtrNode::next_
    -
    - -
    -
    - -

    ◆ val_

    - -
    -
    - - - - -
    void* PtrNode::val_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_ptr_node__coll__graph.map b/docs/struct_ptr_node__coll__graph.map deleted file mode 100644 index 269d727c4..000000000 --- a/docs/struct_ptr_node__coll__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/struct_ptr_node__coll__graph.md5 b/docs/struct_ptr_node__coll__graph.md5 deleted file mode 100644 index cd70c03cc..000000000 --- a/docs/struct_ptr_node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4d1d7e85cfecb3fa923f02b90497451a \ No newline at end of file diff --git a/docs/struct_ptr_node__coll__graph.png b/docs/struct_ptr_node__coll__graph.png deleted file mode 100644 index 34e7c2d26..000000000 Binary files a/docs/struct_ptr_node__coll__graph.png and /dev/null differ diff --git a/docs/struct_statement-members.html b/docs/struct_statement-members.html deleted file mode 100644 index 9c7a5abe5..000000000 --- a/docs/struct_statement-members.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Statement Member List
    -
    -
    - -

    This is the complete list of members for Statement, including all inherited members.

    - - - -
    type_Statement
    val_Statement
    - - - - diff --git a/docs/struct_statement.html b/docs/struct_statement.html deleted file mode 100644 index 9367f3169..000000000 --- a/docs/struct_statement.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: Statement Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Statement Struct Reference
    -
    -
    - -

    #include <def.h>

    - - - - - - -

    -Public Attributes

    enum STMT_TYPE type_
     
    void * val_
     
    -

    Member Data Documentation

    - -

    ◆ type_

    - -
    -
    - - - - -
    enum STMT_TYPE Statement::type_
    -
    - -
    -
    - -

    ◆ val_

    - -
    -
    - - - - -
    void* Statement::val_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_subgraph-members.html b/docs/struct_subgraph-members.html deleted file mode 100644 index acb88bd2b..000000000 --- a/docs/struct_subgraph-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Subgraph Member List
    -
    -
    - -

    This is the complete list of members for Subgraph, including all inherited members.

    - - - - - - -
    any_Subgraph
    branch_Subgraph
    scalar_Subgraph
    type_Subgraph
    val_Subgraph
    - - - - diff --git a/docs/struct_subgraph.html b/docs/struct_subgraph.html deleted file mode 100644 index 30a5f58cc..000000000 --- a/docs/struct_subgraph.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -Tenncor: Subgraph Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Subgraph Struct Reference
    -
    -
    - -

    #include <def.h>

    -
    -Collaboration diagram for Subgraph:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - - -

    -Public Attributes

    enum SUBGRAPH_TYPE type_
     
    union {
       double   scalar_
     
       char *   any_
     
       struct Branch *   branch_
     
    val_
     
    -

    Member Data Documentation

    - -

    ◆ any_

    - -
    -
    - - - - -
    char* Subgraph::any_
    -
    - -
    -
    - -

    ◆ branch_

    - -
    -
    - - - - -
    struct Branch* Subgraph::branch_
    -
    - -
    -
    - -

    ◆ scalar_

    - -
    -
    - - - - -
    double Subgraph::scalar_
    -
    - -
    -
    - -

    ◆ type_

    - -
    -
    - - - - -
    enum SUBGRAPH_TYPE Subgraph::type_
    -
    - -
    -
    - -

    ◆ val_

    - -
    -
    - - - - -
    union { ... } Subgraph::val_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/struct_subgraph__coll__graph.map b/docs/struct_subgraph__coll__graph.map deleted file mode 100644 index aa4f1c4cb..000000000 --- a/docs/struct_subgraph__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/struct_subgraph__coll__graph.md5 b/docs/struct_subgraph__coll__graph.md5 deleted file mode 100644 index db9aeecfc..000000000 --- a/docs/struct_subgraph__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -31ca429fb3c599f656a97054f9cacbbb \ No newline at end of file diff --git a/docs/struct_subgraph__coll__graph.png b/docs/struct_subgraph__coll__graph.png deleted file mode 100644 index 4534540ef..000000000 Binary files a/docs/struct_subgraph__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_coord_map-members.html b/docs/structade_1_1_coord_map-members.html deleted file mode 100644 index 596a3925c..000000000 --- a/docs/structade_1_1_coord_map-members.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::CoordMap Member List
    -
    -
    - -

    This is the complete list of members for ade::CoordMap, including all inherited members.

    - - - - - - - - - - -
    access(std::function< void(const MatrixT &)> cb) const overrideade::CoordMapinlinevirtual
    connect(const iCoordMap &rhs) const overrideade::CoordMapinlinevirtual
    CoordMap(std::function< void(MatrixT)> init)ade::CoordMapinline
    forward(CoordT::iterator out, CoordT::const_iterator in) const overrideade::CoordMapvirtual
    fwd_ade::CoordMapprivate
    is_bijective(void) const overrideade::CoordMapinlinevirtual
    reverse(void) const overrideade::CoordMapinlinevirtual
    to_string(void) const overrideade::CoordMapinlinevirtual
    ~iCoordMap(void)=defaultade::iCoordMapvirtual
    - - - - diff --git a/docs/structade_1_1_coord_map.html b/docs/structade_1_1_coord_map.html deleted file mode 100644 index 10bab40d2..000000000 --- a/docs/structade_1_1_coord_map.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - -Tenncor: ade::CoordMap Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::CoordMap Struct Referencefinal
    -
    -
    - -

    #include <coord.hpp>

    -
    -Inheritance diagram for ade::CoordMap:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ade::CoordMap:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     CoordMap (std::function< void(MatrixT)> init)
     
    iCoordMapconnect (const iCoordMap &rhs) const override
     Implementation of iCoordMap. More...
     
    void forward (CoordT::iterator out, CoordT::const_iterator in) const override
     Implementation of iCoordMap. More...
     
    iCoordMapreverse (void) const override
     Implementation of iCoordMap. More...
     
    std::string to_string (void) const override
     Implementation of iCoordMap. More...
     
    void access (std::function< void(const MatrixT &)> cb) const override
     Implementation of iCoordMap. More...
     
    bool is_bijective (void) const override
     Implementation of iCoordMap. More...
     
    - Public Member Functions inherited from ade::iCoordMap
    virtual ~iCoordMap (void)=default
     
    - - - - -

    -Private Attributes

    MatrixT fwd_
     Forward transformation matrix. More...
     
    -

    Detailed Description

    -

    Coordinate transformation implementation using homogeneous matrices The transformation matrix must be inversible otherwise fatal on creation

    -

    Constructor & Destructor Documentation

    - -

    ◆ CoordMap()

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::CoordMap::CoordMap (std::function< void(MatrixT)> init)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ access()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::CoordMap::access (std::function< void(const MatrixT &)> cb) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ connect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    iCoordMap* ade::CoordMap::connect (const iCoordMaprhs) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ forward()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ade::CoordMap::forward (CoordT::iterator out,
    CoordT::const_iterator in 
    ) const
    -
    -overridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ is_bijective()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool ade::CoordMap::is_bijective (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ reverse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    iCoordMap* ade::CoordMap::reverse (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string ade::CoordMap::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iCoordMap.

    - -

    Implements ade::iCoordMap.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ fwd_

    - -
    -
    - - - - - -
    - - - - -
    MatrixT ade::CoordMap::fwd_
    -
    -private
    -
    - -

    Forward transformation matrix.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_coord_map__coll__graph.map b/docs/structade_1_1_coord_map__coll__graph.map deleted file mode 100644 index d8322667f..000000000 --- a/docs/structade_1_1_coord_map__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_coord_map__coll__graph.md5 b/docs/structade_1_1_coord_map__coll__graph.md5 deleted file mode 100644 index b165e4c86..000000000 --- a/docs/structade_1_1_coord_map__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f9d6d773959b60a73b5166cf4a6ff46f \ No newline at end of file diff --git a/docs/structade_1_1_coord_map__coll__graph.png b/docs/structade_1_1_coord_map__coll__graph.png deleted file mode 100644 index 629581720..000000000 Binary files a/docs/structade_1_1_coord_map__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_coord_map__inherit__graph.map b/docs/structade_1_1_coord_map__inherit__graph.map deleted file mode 100644 index d8322667f..000000000 --- a/docs/structade_1_1_coord_map__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_coord_map__inherit__graph.md5 b/docs/structade_1_1_coord_map__inherit__graph.md5 deleted file mode 100644 index 5cd169bc2..000000000 --- a/docs/structade_1_1_coord_map__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -14d86cbebe9c372685c4762f5170aed3 \ No newline at end of file diff --git a/docs/structade_1_1_coord_map__inherit__graph.png b/docs/structade_1_1_coord_map__inherit__graph.png deleted file mode 100644 index 629581720..000000000 Binary files a/docs/structade_1_1_coord_map__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_func_arg-members.html b/docs/structade_1_1_func_arg-members.html deleted file mode 100644 index 7788b8f2a..000000000 --- a/docs/structade_1_1_func_arg-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::FuncArg Member List
    -
    -
    - -

    This is the complete list of members for ade::FuncArg, including all inherited members.

    - - - - - - - - - - - - -
    coorder_ade::FuncArgprivate
    FuncArg(TensptrT tensor, CoordptrT shaper)ade::FuncArginline
    FuncArg(TensptrT tensor, CoordptrT shaper, bool map_io, CoordptrT coorder)ade::FuncArginline
    get_coorder(void) constade::FuncArginline
    get_shaper(void) constade::FuncArginline
    get_tensor(void) constade::FuncArginline
    map_io(void) constade::FuncArginline
    map_io_ade::FuncArgprivate
    shape(void) constade::FuncArginline
    shaper_ade::FuncArgprivate
    tensor_ade::FuncArgprivate
    - - - - diff --git a/docs/structade_1_1_func_arg.html b/docs/structade_1_1_func_arg.html deleted file mode 100644 index 465c4035d..000000000 --- a/docs/structade_1_1_func_arg.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - - -Tenncor: ade::FuncArg Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::FuncArg Struct Referencefinal
    -
    -
    - -

    Coordinate mapper and tensor pair. - More...

    - -

    #include <funcarg.hpp>

    - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     FuncArg (TensptrT tensor, CoordptrT shaper)
     Construct FuncArg auto deducing coorder_ and map_io_ flag. More...
     
     FuncArg (TensptrT tensor, CoordptrT shaper, bool map_io, CoordptrT coorder)
     Construct FuncArg with specific coorder_ and map_io_ flag. More...
     
    Shape shape (void) const
     Return shape of tensor filtered through coordinate mapper. More...
     
    TensptrT get_tensor (void) const
     Return tensor being mapped. More...
     
    CoordptrT get_shaper (void) const
     Return shaper coord map. More...
     
    bool map_io (void) const
     
    CoordptrT get_coorder (void) const
     Return coord map for coordinates. More...
     
    - - - - - - - - - - - - -

    -Private Attributes

    TensptrT tensor_
     Tensor reference. More...
     
    CoordptrT shaper_
     Shape mapper. More...
     
    bool map_io_
     
    CoordptrT coorder_
     Coordinate mapper. More...
     
    -

    Detailed Description

    -

    Coordinate mapper and tensor pair.

    -

    Constructor & Destructor Documentation

    - -

    ◆ FuncArg() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::FuncArg::FuncArg (TensptrT tensor,
    CoordptrT shaper 
    )
    -
    -inline
    -
    - -

    Construct FuncArg auto deducing coorder_ and map_io_ flag.

    - -
    -
    - -

    ◆ FuncArg() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ade::FuncArg::FuncArg (TensptrT tensor,
    CoordptrT shaper,
    bool map_io,
    CoordptrT coorder 
    )
    -
    -inline
    -
    - -

    Construct FuncArg with specific coorder_ and map_io_ flag.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_coorder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CoordptrT ade::FuncArg::get_coorder (void ) const
    -
    -inline
    -
    - -

    Return coord map for coordinates.

    - -
    -
    - -

    ◆ get_shaper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CoordptrT ade::FuncArg::get_shaper (void ) const
    -
    -inline
    -
    - -

    Return shaper coord map.

    - -
    -
    - -

    ◆ get_tensor()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TensptrT ade::FuncArg::get_tensor (void ) const
    -
    -inline
    -
    - -

    Return tensor being mapped.

    - -
    -
    - -

    ◆ map_io()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool ade::FuncArg::map_io (void ) const
    -
    -inline
    -
    -

    Return map_io_ flag, True if coorder accepts input coord and generated output, False otherwise

    - -
    -
    - -

    ◆ shape()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Shape ade::FuncArg::shape (void ) const
    -
    -inline
    -
    - -

    Return shape of tensor filtered through coordinate mapper.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ coorder_

    - -
    -
    - - - - - -
    - - - - -
    CoordptrT ade::FuncArg::coorder_
    -
    -private
    -
    - -

    Coordinate mapper.

    - -
    -
    - -

    ◆ map_io_

    - -
    -
    - - - - - -
    - - - - -
    bool ade::FuncArg::map_io_
    -
    -private
    -
    -

    True if map input coordinate to output, False otherwise (if n_elems of inputshape > n_elems of outputshape)

    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - - -
    - - - - -
    CoordptrT ade::FuncArg::shaper_
    -
    -private
    -
    - -

    Shape mapper.

    - -
    -
    - -

    ◆ tensor_

    - -
    -
    - - - - - -
    - - - - -
    TensptrT ade::FuncArg::tensor_
    -
    -private
    -
    - -

    Tensor reference.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_functor-members.html b/docs/structade_1_1_functor-members.html deleted file mode 100644 index ff8a71f36..000000000 --- a/docs/structade_1_1_functor-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::Functor Member List
    -
    -
    - -

    This is the complete list of members for ade::Functor, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iFunctorinlinevirtual
    args_ade::Functorprivate
    Functor(Opcode opcode, Shape shape, ArgsT args)ade::Functorinlineprivate
    Functor(const Functor &other)=defaultade::Functorprivate
    Functor(Functor &&other)=defaultade::Functorprivate
    get(Opcode opcode, ArgsT args)ade::Functorinlinestatic
    get(const Functor &other)ade::Functorinlinestatic
    get(Functor &&other)ade::Functorinlinestatic
    get_children(void) const overrideade::Functorinlinevirtual
    get_opcode(void) const overrideade::Functorinlinevirtual
    opcode_ade::Functorprivate
    operator=(const Functor &other)=deleteade::Functor
    operator=(Functor &&other)=deleteade::Functor
    shape(void) const overrideade::Functorinlinevirtual
    shape_ade::Functorprivate
    to_string(void) const overrideade::Functorinlinevirtual
    update_child(FuncArg arg, size_t index) overrideade::Functorinlinevirtual
    ~iFunctor(void)=defaultade::iFunctorvirtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structade_1_1_functor.html b/docs/structade_1_1_functor.html deleted file mode 100644 index adba5020c..000000000 --- a/docs/structade_1_1_functor.html +++ /dev/null @@ -1,650 +0,0 @@ - - - - - - - -Tenncor: ade::Functor Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    - -
    - -

    Functor of the graph mapping to operators specified by opcode argument. - More...

    - -

    #include <functor.hpp>

    -
    -Inheritance diagram for ade::Functor:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    -
    -Collaboration diagram for ade::Functor:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    Functoroperator= (const Functor &other)=delete
     
    Functoroperator= (Functor &&other)=delete
     
    const Shapeshape (void) const override
     Implementation of iTensor. More...
     
    std::string to_string (void) const override
     Implementation of iTensor. More...
     
    Opcode get_opcode (void) const override
     Implementation of iFunctor. More...
     
    const ArgsTget_children (void) const override
     Implementation of iFunctor. More...
     
    void update_child (FuncArg arg, size_t index) override
     Implementation of iFunctor. More...
     
    - Public Member Functions inherited from ade::iFunctor
    virtual ~iFunctor (void)=default
     
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    - - - - - - - - -

    -Static Public Member Functions

    static Functorget (Opcode opcode, ArgsT args)
     Return a Functor with with input tensor and meta arguments. More...
     
    static Functorget (const Functor &other)
     
    static Functorget (Functor &&other)
     
    - - - - - - - -

    -Private Member Functions

     Functor (Opcode opcode, Shape shape, ArgsT args)
     
     Functor (const Functor &other)=default
     
     Functor (Functor &&other)=default
     
    - - - - - - - - - - -

    -Private Attributes

    Opcode opcode_
     Operation encoding. More...
     
    Shape shape_
     Shape info built at construction time according to arguments. More...
     
    ArgsT args_
     Tensor arguments (and children) More...
     
    -

    Detailed Description

    -

    Functor of the graph mapping to operators specified by opcode argument.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Functor() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ade::Functor::Functor (Opcode opcode,
    Shape shape,
    ArgsT args 
    )
    -
    -inlineprivate
    -
    - -
    -
    - -

    ◆ Functor() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Functor::Functor (const Functorother)
    -
    -privatedefault
    -
    - -
    -
    - -

    ◆ Functor() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Functor::Functor (Functor && other)
    -
    -privatedefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    static Functor* ade::Functor::get (Opcode opcode,
    ArgsT args 
    )
    -
    -inlinestatic
    -
    - -

    Return a Functor with with input tensor and meta arguments.

    - -
    -
    - -

    ◆ get() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    static Functor* ade::Functor::get (const Functorother)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    static Functor* ade::Functor::get (Functor && other)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get_children()

    - -
    -
    - - - - - -
    - - - - - - - - -
    const ArgsT& ade::Functor::get_children (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    - -

    ◆ get_opcode()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Opcode ade::Functor::get_opcode (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    - -

    ◆ operator=() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Functor& ade::Functor::operator= (const Functorother)
    -
    -delete
    -
    - -
    -
    - -

    ◆ operator=() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Functor& ade::Functor::operator= (Functor && other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ shape()

    - -
    -
    - - - - - -
    - - - - - - - - -
    const Shape& ade::Functor::shape (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string ade::Functor::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ update_child()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ade::Functor::update_child (FuncArg arg,
    size_t index 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    - - - - - -
    - - - - -
    ArgsT ade::Functor::args_
    -
    -private
    -
    - -

    Tensor arguments (and children)

    - -
    -
    - -

    ◆ opcode_

    - -
    -
    - - - - - -
    - - - - -
    Opcode ade::Functor::opcode_
    -
    -private
    -
    - -

    Operation encoding.

    - -
    -
    - -

    ◆ shape_

    - -
    -
    - - - - - -
    - - - - -
    Shape ade::Functor::shape_
    -
    -private
    -
    - -

    Shape info built at construction time according to arguments.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_functor__coll__graph.map b/docs/structade_1_1_functor__coll__graph.map deleted file mode 100644 index 18b0b1788..000000000 --- a/docs/structade_1_1_functor__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structade_1_1_functor__coll__graph.md5 b/docs/structade_1_1_functor__coll__graph.md5 deleted file mode 100644 index 7db7b7b2c..000000000 --- a/docs/structade_1_1_functor__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c5005626a330dd13a155567eebfafa34 \ No newline at end of file diff --git a/docs/structade_1_1_functor__coll__graph.png b/docs/structade_1_1_functor__coll__graph.png deleted file mode 100644 index a7ba290cc..000000000 Binary files a/docs/structade_1_1_functor__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_functor__inherit__graph.map b/docs/structade_1_1_functor__inherit__graph.map deleted file mode 100644 index f3c0d2395..000000000 --- a/docs/structade_1_1_functor__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structade_1_1_functor__inherit__graph.md5 b/docs/structade_1_1_functor__inherit__graph.md5 deleted file mode 100644 index 43e99ba30..000000000 --- a/docs/structade_1_1_functor__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3d7f4347d51821be079f5cef7fa2a541 \ No newline at end of file diff --git a/docs/structade_1_1_functor__inherit__graph.png b/docs/structade_1_1_functor__inherit__graph.png deleted file mode 100644 index d4cd727cc..000000000 Binary files a/docs/structade_1_1_functor__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_graph_stat-members.html b/docs/structade_1_1_graph_stat-members.html deleted file mode 100644 index 62528ca6d..000000000 --- a/docs/structade_1_1_graph_stat-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::GraphStat Member List
    -
    -
    - -

    This is the complete list of members for ade::GraphStat, including all inherited members.

    - - - - - -
    graphsize_ade::GraphStat
    visit(iLeaf *leaf) overrideade::GraphStatinlinevirtual
    visit(iFunctor *func) overrideade::GraphStatinlinevirtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structade_1_1_graph_stat.html b/docs/structade_1_1_graph_stat.html deleted file mode 100644 index a9441108e..000000000 --- a/docs/structade_1_1_graph_stat.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - -Tenncor: ade::GraphStat Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::GraphStat Struct Referencefinal
    -
    -
    - -

    Traveler that maps each tensor to its subtree's maximum depth. - More...

    - -

    #include <traveler.hpp>

    -
    -Inheritance diagram for ade::GraphStat:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ade::GraphStat:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

    void visit (iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - -

    -Public Attributes

    std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
     
    -

    Detailed Description

    -

    Traveler that maps each tensor to its subtree's maximum depth.

    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::GraphStat::visit (iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::GraphStat::visit (iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ graphsize_

    - -
    -
    - - - - -
    std::unordered_map<iTensor*,estd::NumRange<size_t> > ade::GraphStat::graphsize_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_graph_stat__coll__graph.map b/docs/structade_1_1_graph_stat__coll__graph.map deleted file mode 100644 index 9d52273d4..000000000 --- a/docs/structade_1_1_graph_stat__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_graph_stat__coll__graph.md5 b/docs/structade_1_1_graph_stat__coll__graph.md5 deleted file mode 100644 index 5dffa9c2d..000000000 --- a/docs/structade_1_1_graph_stat__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6bb9fd6f14ff261b2cb30efc441dca6a \ No newline at end of file diff --git a/docs/structade_1_1_graph_stat__coll__graph.png b/docs/structade_1_1_graph_stat__coll__graph.png deleted file mode 100644 index 5a19d381f..000000000 Binary files a/docs/structade_1_1_graph_stat__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_graph_stat__inherit__graph.map b/docs/structade_1_1_graph_stat__inherit__graph.map deleted file mode 100644 index 9d52273d4..000000000 --- a/docs/structade_1_1_graph_stat__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_graph_stat__inherit__graph.md5 b/docs/structade_1_1_graph_stat__inherit__graph.md5 deleted file mode 100644 index ee9b00baf..000000000 --- a/docs/structade_1_1_graph_stat__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3bc766299b2e9ad9899dfe06ba7b7f42 \ No newline at end of file diff --git a/docs/structade_1_1_graph_stat__inherit__graph.png b/docs/structade_1_1_graph_stat__inherit__graph.png deleted file mode 100644 index 5a19d381f..000000000 Binary files a/docs/structade_1_1_graph_stat__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_height_matrix-members.html b/docs/structade_1_1_height_matrix-members.html deleted file mode 100644 index 99b5c7c93..000000000 --- a/docs/structade_1_1_height_matrix-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::HeightMatrix Member List
    -
    -
    - -

    This is the complete list of members for ade::HeightMatrix, including all inherited members.

    - - - - -
    funcs_ade::HeightMatrix
    HeightMatrix(const ade::TensT &roots)ade::HeightMatrixinline
    leaves_ade::HeightMatrix
    - - - - diff --git a/docs/structade_1_1_height_matrix.html b/docs/structade_1_1_height_matrix.html deleted file mode 100644 index 723b9953a..000000000 --- a/docs/structade_1_1_height_matrix.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -Tenncor: ade::HeightMatrix Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::HeightMatrix Struct Reference
    -
    -
    - -

    #include <traveler.hpp>

    - - - - -

    -Public Member Functions

     HeightMatrix (const ade::TensT &roots)
     
    - - - - - -

    -Public Attributes

    std::unordered_set< ade::iLeaf * > leaves_
     
    std::vector< std::unordered_set< ade::iFunctor * > > funcs_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ HeightMatrix()

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::HeightMatrix::HeightMatrix (const ade::TensTroots)
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ funcs_

    - -
    -
    - - - - -
    std::vector<std::unordered_set<ade::iFunctor*> > ade::HeightMatrix::funcs_
    -
    - -
    -
    - -

    ◆ leaves_

    - -
    -
    - - - - -
    std::unordered_set<ade::iLeaf*> ade::HeightMatrix::leaves_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_num_range-members.html b/docs/structade_1_1_num_range-members.html deleted file mode 100644 index b8208aa48..000000000 --- a/docs/structade_1_1_num_range-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::NumRange< T, typename > Member List
    -
    -
    - -

    This is the complete list of members for ade::NumRange< T, typename >, including all inherited members.

    - - - - - -
    lower_ade::NumRange< T, typename >
    NumRange(void)ade::NumRange< T, typename >inline
    NumRange(T bound1, T bound2)ade::NumRange< T, typename >inline
    upper_ade::NumRange< T, typename >
    - - - - diff --git a/docs/structade_1_1_num_range.html b/docs/structade_1_1_num_range.html deleted file mode 100644 index f1a248abb..000000000 --- a/docs/structade_1_1_num_range.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - -Tenncor: ade::NumRange< T, typename > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::NumRange< T, typename > Struct Template Referencefinal
    -
    -
    - -

    #include <traveler.hpp>

    - - - - - - -

    -Public Member Functions

     NumRange (void)
     
     NumRange (T bound1, T bound2)
     
    - - - - - -

    -Public Attributes

    lower_
     
    upper_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ NumRange() [1/2]

    - -
    -
    -
    -template<typename T, typename = typename std::enable_if< std::is_arithmetic<T>::value, T>::type>
    - - - - - -
    - - - - - - - - -
    ade::NumRange< T, typename >::NumRange (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ NumRange() [2/2]

    - -
    -
    -
    -template<typename T, typename = typename std::enable_if< std::is_arithmetic<T>::value, T>::type>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::NumRange< T, typename >::NumRange (bound1,
    bound2 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ lower_

    - -
    -
    -
    -template<typename T, typename = typename std::enable_if< std::is_arithmetic<T>::value, T>::type>
    - - - - -
    T ade::NumRange< T, typename >::lower_
    -
    - -
    -
    - -

    ◆ upper_

    - -
    -
    -
    -template<typename T, typename = typename std::enable_if< std::is_arithmetic<T>::value, T>::type>
    - - - - -
    T ade::NumRange< T, typename >::upper_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_once_traveler-members.html b/docs/structade_1_1_once_traveler-members.html deleted file mode 100644 index 969f837f3..000000000 --- a/docs/structade_1_1_once_traveler-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::OnceTraveler Member List
    -
    -
    - -

    This is the complete list of members for ade::OnceTraveler, including all inherited members.

    - - - - - - - - -
    visit(iLeaf *leaf) overrideade::OnceTravelerinlinevirtual
    visit(iFunctor *func) overrideade::OnceTravelerinlinevirtual
    visit_func(iFunctor *func)ade::OnceTravelerinlinevirtual
    visit_leaf(iLeaf *leaf)ade::OnceTravelerinlinevirtual
    visited_ade::OnceTraveler
    ~iTraveler(void)=defaultade::iTravelervirtual
    ~OnceTraveler(void)=defaultade::OnceTravelervirtual
    - - - - diff --git a/docs/structade_1_1_once_traveler.html b/docs/structade_1_1_once_traveler.html deleted file mode 100644 index b7e37018e..000000000 --- a/docs/structade_1_1_once_traveler.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - -Tenncor: ade::OnceTraveler Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::OnceTraveler Struct Reference
    -
    -
    - -

    Extremely generic traveler that visits every node in the graph once. - More...

    - -

    #include <traveler.hpp>

    -
    -Inheritance diagram for ade::OnceTraveler:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ade::OnceTraveler:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~OnceTraveler (void)=default
     
    void visit (iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (iFunctor *func) override
     Implementation of iTraveler. More...
     
    virtual void visit_leaf (iLeaf *leaf)
     
    virtual void visit_func (iFunctor *func)
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - -

    -Public Attributes

    std::unordered_set< iTensor * > visited_
     
    -

    Detailed Description

    -

    Extremely generic traveler that visits every node in the graph once.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~OnceTraveler()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::OnceTraveler::~OnceTraveler (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::OnceTraveler::visit (iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::OnceTraveler::visit (iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit_func()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::OnceTraveler::visit_func (iFunctorfunc)
    -
    -inlinevirtual
    -
    - -
    -
    - -

    ◆ visit_leaf()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::OnceTraveler::visit_leaf (iLeafleaf)
    -
    -inlinevirtual
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ visited_

    - -
    -
    - - - - -
    std::unordered_set<iTensor*> ade::OnceTraveler::visited_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_once_traveler__coll__graph.map b/docs/structade_1_1_once_traveler__coll__graph.map deleted file mode 100644 index 365e3a2e4..000000000 --- a/docs/structade_1_1_once_traveler__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_once_traveler__coll__graph.md5 b/docs/structade_1_1_once_traveler__coll__graph.md5 deleted file mode 100644 index 6fe2e7121..000000000 --- a/docs/structade_1_1_once_traveler__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6930208b87330d7fa6d4b5dec4dd73b3 \ No newline at end of file diff --git a/docs/structade_1_1_once_traveler__coll__graph.png b/docs/structade_1_1_once_traveler__coll__graph.png deleted file mode 100644 index 90c2a88b8..000000000 Binary files a/docs/structade_1_1_once_traveler__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_once_traveler__inherit__graph.map b/docs/structade_1_1_once_traveler__inherit__graph.map deleted file mode 100644 index 365e3a2e4..000000000 --- a/docs/structade_1_1_once_traveler__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_once_traveler__inherit__graph.md5 b/docs/structade_1_1_once_traveler__inherit__graph.md5 deleted file mode 100644 index f28fdece2..000000000 --- a/docs/structade_1_1_once_traveler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -eff35db89b63b23b312754e76b7d50e3 \ No newline at end of file diff --git a/docs/structade_1_1_once_traveler__inherit__graph.png b/docs/structade_1_1_once_traveler__inherit__graph.png deleted file mode 100644 index 90c2a88b8..000000000 Binary files a/docs/structade_1_1_once_traveler__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_opcode-members.html b/docs/structade_1_1_opcode-members.html deleted file mode 100644 index 8be05c6b4..000000000 --- a/docs/structade_1_1_opcode-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::Opcode Member List
    -
    -
    - -

    This is the complete list of members for ade::Opcode, including all inherited members.

    - - - -
    code_ade::Opcode
    name_ade::Opcode
    - - - - diff --git a/docs/structade_1_1_opcode.html b/docs/structade_1_1_opcode.html deleted file mode 100644 index 8399545dc..000000000 --- a/docs/structade_1_1_opcode.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -Tenncor: ade::Opcode Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::Opcode Struct Referencefinal
    -
    -
    - -

    Encoding of operation. - More...

    - -

    #include <ifunctor.hpp>

    - - - - - - - - -

    -Public Attributes

    std::string name_
     String representation of operation. More...
     
    size_t code_
     Numerical encoding of operation. More...
     
    -

    Detailed Description

    -

    Encoding of operation.

    -

    Member Data Documentation

    - -

    ◆ code_

    - -
    -
    - - - - -
    size_t ade::Opcode::code_
    -
    - -

    Numerical encoding of operation.

    - -
    -
    - -

    ◆ name_

    - -
    -
    - - - - -
    std::string ade::Opcode::name_
    -
    - -

    String representation of operation.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_parent_finder-members.html b/docs/structade_1_1_parent_finder-members.html deleted file mode 100644 index 2514c0510..000000000 --- a/docs/structade_1_1_parent_finder-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::ParentFinder Member List
    -
    -
    - -

    This is the complete list of members for ade::ParentFinder, including all inherited members.

    - - - - - - -
    ParentMapT typedefade::ParentFinder
    parents_ade::ParentFinder
    visit(iLeaf *leaf) overrideade::ParentFinderinlinevirtual
    visit(iFunctor *func) overrideade::ParentFinderinlinevirtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structade_1_1_parent_finder.html b/docs/structade_1_1_parent_finder.html deleted file mode 100644 index 6e712cfa2..000000000 --- a/docs/structade_1_1_parent_finder.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - -Tenncor: ade::ParentFinder Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::ParentFinder Struct Referencefinal
    -
    -
    - -

    Traveler that for each child tracks the relationship to all parents. - More...

    - -

    #include <traveler.hpp>

    -
    -Inheritance diagram for ade::ParentFinder:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ade::ParentFinder:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - -

    -Public Types

    using ParentMapT = std::unordered_map< iTensor *, std::vector< size_t > >
     
    - - - - - - - - - - -

    -Public Member Functions

    void visit (iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - -

    -Public Attributes

    std::unordered_map< iTensor *, ParentMapTparents_
     Tracks child to parents relationship. More...
     
    -

    Detailed Description

    -

    Traveler that for each child tracks the relationship to all parents.

    -

    Member Typedef Documentation

    - -

    ◆ ParentMapT

    - -
    -
    - - - - -
    using ade::ParentFinder::ParentMapT = std::unordered_map<iTensor*,std::vector<size_t> >
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::ParentFinder::visit (iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::ParentFinder::visit (iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ parents_

    - -
    -
    - - - - -
    std::unordered_map<iTensor*,ParentMapT> ade::ParentFinder::parents_
    -
    - -

    Tracks child to parents relationship.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_parent_finder__coll__graph.map b/docs/structade_1_1_parent_finder__coll__graph.map deleted file mode 100644 index 1cefec828..000000000 --- a/docs/structade_1_1_parent_finder__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_parent_finder__coll__graph.md5 b/docs/structade_1_1_parent_finder__coll__graph.md5 deleted file mode 100644 index bc2b48218..000000000 --- a/docs/structade_1_1_parent_finder__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8cf89d3fffa771343030fdad8d3450eb \ No newline at end of file diff --git a/docs/structade_1_1_parent_finder__coll__graph.png b/docs/structade_1_1_parent_finder__coll__graph.png deleted file mode 100644 index 8bf3a6136..000000000 Binary files a/docs/structade_1_1_parent_finder__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_parent_finder__inherit__graph.map b/docs/structade_1_1_parent_finder__inherit__graph.map deleted file mode 100644 index 1cefec828..000000000 --- a/docs/structade_1_1_parent_finder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_parent_finder__inherit__graph.md5 b/docs/structade_1_1_parent_finder__inherit__graph.md5 deleted file mode 100644 index 214e58a09..000000000 --- a/docs/structade_1_1_parent_finder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7a0e2843c75b879162cdbfdf691460b2 \ No newline at end of file diff --git a/docs/structade_1_1_parent_finder__inherit__graph.png b/docs/structade_1_1_parent_finder__inherit__graph.png deleted file mode 100644 index 8bf3a6136..000000000 Binary files a/docs/structade_1_1_parent_finder__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_path_finder-members.html b/docs/structade_1_1_path_finder-members.html deleted file mode 100644 index e607ab244..000000000 --- a/docs/structade_1_1_path_finder-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::PathFinder Member List
    -
    -
    - -

    This is the complete list of members for ade::PathFinder, including all inherited members.

    - - - - - - - - -
    ParentMapT typedefade::PathFinder
    parents_ade::PathFinder
    PathFinder(const iTensor *target)ade::PathFinderinline
    target_ade::PathFinder
    visit(iLeaf *leaf) overrideade::PathFinderinlinevirtual
    visit(iFunctor *func) overrideade::PathFinderinlinevirtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structade_1_1_path_finder.html b/docs/structade_1_1_path_finder.html deleted file mode 100644 index 4d3898010..000000000 --- a/docs/structade_1_1_path_finder.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - -Tenncor: ade::PathFinder Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::PathFinder Struct Referencefinal
    -
    -
    - -

    #include <traveler.hpp>

    -
    -Inheritance diagram for ade::PathFinder:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ade::PathFinder:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - -

    -Public Types

    using ParentMapT = std::unordered_map< iTensor *, std::unordered_set< size_t > >
     Type for mapping function nodes in path to boolean vector. More...
     
    - - - - - - - - - - - - -

    -Public Member Functions

     PathFinder (const iTensor *target)
     
    void visit (iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - - - -

    -Public Attributes

    const iTensortarget_
     Target of tensor all paths are travelling to. More...
     
    ParentMapT parents_
     Map of parent nodes in path. More...
     
    -

    Detailed Description

    -

    Traveler that paints paths to a target tensor All nodes in the path are added as keys to the parents_ map with the values being a boolean vector denoting nodes leading to target For a boolean value x at index i in mapped vector, x is true if the ith child leads to target

    -

    Member Typedef Documentation

    - -

    ◆ ParentMapT

    - -
    -
    - - - - -
    using ade::PathFinder::ParentMapT = std::unordered_map<iTensor*,std::unordered_set<size_t> >
    -
    - -

    Type for mapping function nodes in path to boolean vector.

    - -
    -
    -

    Constructor & Destructor Documentation

    - -

    ◆ PathFinder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::PathFinder::PathFinder (const iTensortarget)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::PathFinder::visit (iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::PathFinder::visit (iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ parents_

    - -
    -
    - - - - -
    ParentMapT ade::PathFinder::parents_
    -
    - -

    Map of parent nodes in path.

    - -
    -
    - -

    ◆ target_

    - -
    -
    - - - - -
    const iTensor* ade::PathFinder::target_
    -
    - -

    Target of tensor all paths are travelling to.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1_path_finder__coll__graph.map b/docs/structade_1_1_path_finder__coll__graph.map deleted file mode 100644 index 30fe4ca87..000000000 --- a/docs/structade_1_1_path_finder__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structade_1_1_path_finder__coll__graph.md5 b/docs/structade_1_1_path_finder__coll__graph.md5 deleted file mode 100644 index a1d93efd1..000000000 --- a/docs/structade_1_1_path_finder__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b923101c186a2f9ca649b1e91e9492c5 \ No newline at end of file diff --git a/docs/structade_1_1_path_finder__coll__graph.png b/docs/structade_1_1_path_finder__coll__graph.png deleted file mode 100644 index 39e953c55..000000000 Binary files a/docs/structade_1_1_path_finder__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1_path_finder__inherit__graph.map b/docs/structade_1_1_path_finder__inherit__graph.map deleted file mode 100644 index 3fc694936..000000000 --- a/docs/structade_1_1_path_finder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1_path_finder__inherit__graph.md5 b/docs/structade_1_1_path_finder__inherit__graph.md5 deleted file mode 100644 index 4217ac0fe..000000000 --- a/docs/structade_1_1_path_finder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -17c715a35a0c51d9f033939338943baf \ No newline at end of file diff --git a/docs/structade_1_1_path_finder__inherit__graph.png b/docs/structade_1_1_path_finder__inherit__graph.png deleted file mode 100644 index 4911e2ce5..000000000 Binary files a/docs/structade_1_1_path_finder__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1_shape-members.html b/docs/structade_1_1_shape-members.html deleted file mode 100644 index 1f46008bb..000000000 --- a/docs/structade_1_1_shape-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::Shape Member List
    -
    -
    - -

    This is the complete list of members for ade::Shape, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - -
    at(RankT idx) constade::Shapeinline
    begin(void)ade::Shapeinline
    begin(void) constade::Shapeinline
    compatible_after(const Shape &other, RankT idx) constade::Shapeinline
    compatible_before(const Shape &other, RankT idx) constade::Shapeinline
    const_iterator typedefade::Shape
    dims_ade::Shapeprivate
    end(void)ade::Shapeinline
    end(void) constade::Shapeinline
    iterator typedefade::Shape
    move_helper(Shape &&other)ade::Shapeinlineprivate
    n_elems(void) constade::Shapeinline
    operator=(const Shape &other)=defaultade::Shape
    operator=(const std::vector< DimT > &dims)ade::Shapeinline
    operator=(Shape &&other)ade::Shapeinline
    Shape(void)ade::Shapeinline
    Shape(std::vector< DimT > dims)ade::Shapeinline
    Shape(const Shape &other)=defaultade::Shape
    Shape(Shape &&other)ade::Shapeinline
    to_string(void) constade::Shapeinline
    vector_assign(const std::vector< DimT > &dims)ade::Shapeinlineprivate
    - - - - diff --git a/docs/structade_1_1_shape.html b/docs/structade_1_1_shape.html deleted file mode 100644 index 3cf92432b..000000000 --- a/docs/structade_1_1_shape.html +++ /dev/null @@ -1,722 +0,0 @@ - - - - - - - -Tenncor: ade::Shape Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    - -
    - -

    #include <shape.hpp>

    - - - - - - - - -

    -Public Types

    using iterator = ShapeT::iterator
     Type of iterator used to iterate through internal array. More...
     
    using const_iterator = ShapeT::const_iterator
     Type of constant iterator used to iterate through internal array. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     Shape (void)
     
     Shape (std::vector< DimT > dims)
     
     Shape (const Shape &other)=default
     
    Shapeoperator= (const Shape &other)=default
     
    Shapeoperator= (const std::vector< DimT > &dims)
     
     Shape (Shape &&other)
     
    Shapeoperator= (Shape &&other)
     
    DimT at (RankT idx) const
     Return DimT element at idx for any index in range [0:rank_cap) More...
     
    NElemT n_elems (void) const
     Return the total number of elements represented by the shape. More...
     
    bool compatible_before (const Shape &other, RankT idx) const
     
    bool compatible_after (const Shape &other, RankT idx) const
     
    std::string to_string (void) const
     Return string representation of shape. More...
     
    iterator begin (void)
     Return begin iterator of internal array. More...
     
    iterator end (void)
     Return end iterator of internal array. More...
     
    const_iterator begin (void) const
     Return begin constant iterator of internal array. More...
     
    const_iterator end (void) const
     Return end constant iterator of internal array. More...
     
    - - - - - -

    -Private Member Functions

    void vector_assign (const std::vector< DimT > &dims)
     
    void move_helper (Shape &&other)
     
    - - - - -

    -Private Attributes

    ShapeT dims_
     Array of dimension values. More...
     
    -

    Detailed Description

    -

    Models an aligned shape using an array of DimT values For each DimT at index i, DimT value is number of elements at dimension i For example, shape={3, 2} can model tensor [[x, y, z], [u, v, w]] (In cartesian coordinate, we treat values along the X-axis as dimension 0)

    -

    Member Typedef Documentation

    - -

    ◆ const_iterator

    - -
    -
    - - - - -
    using ade::Shape::const_iterator = ShapeT::const_iterator
    -
    - -

    Type of constant iterator used to iterate through internal array.

    - -
    -
    - -

    ◆ iterator

    - -
    -
    - - - - -
    using ade::Shape::iterator = ShapeT::iterator
    -
    - -

    Type of iterator used to iterate through internal array.

    - -
    -
    -

    Constructor & Destructor Documentation

    - -

    ◆ Shape() [1/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Shape::Shape (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ Shape() [2/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Shape::Shape (std::vector< DimTdims)
    -
    -inline
    -
    - -
    -
    - -

    ◆ Shape() [3/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Shape::Shape (const Shapeother)
    -
    -default
    -
    - -
    -
    - -

    ◆ Shape() [4/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::Shape::Shape (Shape && other)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ at()

    - -
    -
    - - - - - -
    - - - - - - - - -
    DimT ade::Shape::at (RankT idx) const
    -
    -inline
    -
    - -

    Return DimT element at idx for any index in range [0:rank_cap)

    - -
    -
    - -

    ◆ begin() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    iterator ade::Shape::begin (void )
    -
    -inline
    -
    - -

    Return begin iterator of internal array.

    - -
    -
    - -

    ◆ begin() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    const_iterator ade::Shape::begin (void ) const
    -
    -inline
    -
    - -

    Return begin constant iterator of internal array.

    - -
    -
    - -

    ◆ compatible_after()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool ade::Shape::compatible_after (const Shapeother,
    RankT idx 
    ) const
    -
    -inline
    -
    -

    Return true if this->dims_[idx:rank_cap) is equal to other.dims_[idx:rank_cap), otherwise return false Set idx to 0 to compare entire shape

    - -
    -
    - -

    ◆ compatible_before()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool ade::Shape::compatible_before (const Shapeother,
    RankT idx 
    ) const
    -
    -inline
    -
    -

    Return true if this->dims_[0:idx) is equal to other.dims_[0:idx), otherwise return false

    - -
    -
    - -

    ◆ end() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    iterator ade::Shape::end (void )
    -
    -inline
    -
    - -

    Return end iterator of internal array.

    - -
    -
    - -

    ◆ end() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    const_iterator ade::Shape::end (void ) const
    -
    -inline
    -
    - -

    Return end constant iterator of internal array.

    - -
    -
    - -

    ◆ move_helper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::Shape::move_helper (Shape && other)
    -
    -inlineprivate
    -
    - -
    -
    - -

    ◆ n_elems()

    - -
    -
    - - - - - -
    - - - - - - - - -
    NElemT ade::Shape::n_elems (void ) const
    -
    -inline
    -
    - -

    Return the total number of elements represented by the shape.

    - -
    -
    - -

    ◆ operator=() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Shape& ade::Shape::operator= (const Shapeother)
    -
    -default
    -
    - -
    -
    - -

    ◆ operator=() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Shape& ade::Shape::operator= (const std::vector< DimT > & dims)
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator=() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    Shape& ade::Shape::operator= (Shape && other)
    -
    -inline
    -
    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string ade::Shape::to_string (void ) const
    -
    -inline
    -
    - -

    Return string representation of shape.

    - -
    -
    - -

    ◆ vector_assign()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::Shape::vector_assign (const std::vector< DimT > & dims)
    -
    -inlineprivate
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ dims_

    - -
    -
    - - - - - -
    - - - - -
    ShapeT ade::Shape::dims_
    -
    -private
    -
    - -

    Array of dimension values.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_coord_map-members.html b/docs/structade_1_1i_coord_map-members.html deleted file mode 100644 index a31b5d677..000000000 --- a/docs/structade_1_1i_coord_map-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iCoordMap Member List
    -
    -
    - -

    This is the complete list of members for ade::iCoordMap, including all inherited members.

    - - - - - - - - -
    access(std::function< void(const MatrixT &)> cb) const =0ade::iCoordMappure virtual
    connect(const iCoordMap &rhs) const =0ade::iCoordMappure virtual
    forward(CoordT::iterator out, CoordT::const_iterator in) const =0ade::iCoordMappure virtual
    is_bijective(void) const =0ade::iCoordMappure virtual
    reverse(void) const =0ade::iCoordMappure virtual
    to_string(void) const =0ade::iCoordMappure virtual
    ~iCoordMap(void)=defaultade::iCoordMapvirtual
    - - - - diff --git a/docs/structade_1_1i_coord_map.html b/docs/structade_1_1i_coord_map.html deleted file mode 100644 index 27dd7f5e4..000000000 --- a/docs/structade_1_1i_coord_map.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - -Tenncor: ade::iCoordMap Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iCoordMap Struct Referenceabstract
    -
    -
    - -

    Interface for transforming coordinates and reversing the coordinate. - More...

    - -

    #include <coord.hpp>

    -
    -Inheritance diagram for ade::iCoordMap:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iCoordMap (void)=default
     
    virtual iCoordMapconnect (const iCoordMap &rhs) const =0
     Return matmul(this, rhs) More...
     
    virtual void forward (CoordT::iterator out, CoordT::const_iterator in) const =0
     Forward transform coordinates. More...
     
    virtual iCoordMapreverse (void) const =0
     
    virtual std::string to_string (void) const =0
     Return string representation of coordinate transformer. More...
     
    virtual void access (std::function< void(const MatrixT &)> cb) const =0
     
    virtual bool is_bijective (void) const =0
     Return true if this instance maps coordinates/shapes bijectively. More...
     
    -

    Detailed Description

    -

    Interface for transforming coordinates and reversing the coordinate.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iCoordMap()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iCoordMap::~iCoordMap (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ access()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::iCoordMap::access (std::function< void(const MatrixT &)> cb) const
    -
    -pure virtual
    -
    -

    Access the forward matrix representation of transformer as a param to input callback function cb

    - -

    Implemented in ade::CoordMap.

    - -
    -
    - -

    ◆ connect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual iCoordMap* ade::iCoordMap::connect (const iCoordMaprhs) const
    -
    -pure virtual
    -
    - -

    Return matmul(this, rhs)

    - -

    Implemented in ade::CoordMap, and ead::CoordMap.

    - -
    -
    - -

    ◆ forward()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void ade::iCoordMap::forward (CoordT::iterator out,
    CoordT::const_iterator in 
    ) const
    -
    -pure virtual
    -
    - -

    Forward transform coordinates.

    - -

    Implemented in ade::CoordMap.

    - -
    -
    - -

    ◆ is_bijective()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual bool ade::iCoordMap::is_bijective (void ) const
    -
    -pure virtual
    -
    - -

    Return true if this instance maps coordinates/shapes bijectively.

    - -

    Implemented in ade::CoordMap, and ead::CoordMap.

    - -
    -
    - -

    ◆ reverse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual iCoordMap* ade::iCoordMap::reverse (void ) const
    -
    -pure virtual
    -
    -

    Return coordinate transformation with its forward and backward transformations reversed

    - -

    Implemented in ade::CoordMap, and ead::CoordMap.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::string ade::iCoordMap::to_string (void ) const
    -
    -pure virtual
    -
    - -

    Return string representation of coordinate transformer.

    - -

    Implemented in ade::CoordMap, and ead::CoordMap.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_coord_map__inherit__graph.map b/docs/structade_1_1i_coord_map__inherit__graph.map deleted file mode 100644 index 72d537185..000000000 --- a/docs/structade_1_1i_coord_map__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structade_1_1i_coord_map__inherit__graph.md5 b/docs/structade_1_1i_coord_map__inherit__graph.md5 deleted file mode 100644 index ff8111a44..000000000 --- a/docs/structade_1_1i_coord_map__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -59d83cf28c9d4d3ac1ad2cfc0458201a \ No newline at end of file diff --git a/docs/structade_1_1i_coord_map__inherit__graph.png b/docs/structade_1_1i_coord_map__inherit__graph.png deleted file mode 100644 index 480915784..000000000 Binary files a/docs/structade_1_1i_coord_map__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_data-members.html b/docs/structade_1_1i_data-members.html deleted file mode 100644 index 31f09d242..000000000 --- a/docs/structade_1_1i_data-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iData Member List
    -
    -
    - -

    This is the complete list of members for ade::iData, including all inherited members.

    - - - - - - - -
    data(void)=0ade::iDatapure virtual
    data(void) const =0ade::iDatapure virtual
    nbytes(void) const =0ade::iDatapure virtual
    type_code(void) const =0ade::iDatapure virtual
    type_label(void) const =0ade::iDatapure virtual
    ~iData(void)=defaultade::iDatavirtual
    - - - - diff --git a/docs/structade_1_1i_data.html b/docs/structade_1_1i_data.html deleted file mode 100644 index e7ec28d1e..000000000 --- a/docs/structade_1_1i_data.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - -Tenncor: ade::iData Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iData Struct Referenceabstract
    -
    -
    - -

    Interface for unveiling data. - More...

    - -

    #include <idata.hpp>

    -
    -Inheritance diagram for ade::iData:
    -
    -
    Inheritance graph
    - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iData (void)=default
     
    virtual void * data (void)=0
     Return pointer to internal data. More...
     
    virtual const void * data (void) const =0
     Return const pointer to internal data. More...
     
    virtual size_t type_code (void) const =0
     Return data type encoding. More...
     
    virtual std::string type_label (void) const =0
     Return data type label (for better readability) More...
     
    virtual size_t nbytes (void) const =0
     Return number of bytes in the data. More...
     
    -

    Detailed Description

    -

    Interface for unveiling data.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iData()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iData::~iData (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void* ade::iData::data (void )
    -
    -pure virtual
    -
    - -

    Return pointer to internal data.

    - -

    Implemented in ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    - -

    ◆ data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual const void* ade::iData::data (void ) const
    -
    -pure virtual
    -
    - -

    Return const pointer to internal data.

    - -

    Implemented in ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    - -

    ◆ nbytes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual size_t ade::iData::nbytes (void ) const
    -
    -pure virtual
    -
    - -

    Return number of bytes in the data.

    - -

    Implemented in ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    - -

    ◆ type_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual size_t ade::iData::type_code (void ) const
    -
    -pure virtual
    -
    - -

    Return data type encoding.

    - -

    Implemented in ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    - -

    ◆ type_label()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::string ade::iData::type_label (void ) const
    -
    -pure virtual
    -
    - -

    Return data type label (for better readability)

    - -

    Implemented in ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_data__inherit__graph.map b/docs/structade_1_1i_data__inherit__graph.map deleted file mode 100644 index 179870325..000000000 --- a/docs/structade_1_1i_data__inherit__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/structade_1_1i_data__inherit__graph.md5 b/docs/structade_1_1i_data__inherit__graph.md5 deleted file mode 100644 index 31828ed07..000000000 --- a/docs/structade_1_1i_data__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5be35ce141bd4425cf52af873f277f6d \ No newline at end of file diff --git a/docs/structade_1_1i_data__inherit__graph.png b/docs/structade_1_1i_data__inherit__graph.png deleted file mode 100644 index 6ac704ac5..000000000 Binary files a/docs/structade_1_1i_data__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_functor-members.html b/docs/structade_1_1i_functor-members.html deleted file mode 100644 index 6a8963a97..000000000 --- a/docs/structade_1_1i_functor-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iFunctor Member List
    -
    -
    - -

    This is the complete list of members for ade::iFunctor, including all inherited members.

    - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iFunctorinlinevirtual
    get_children(void) const =0ade::iFunctorpure virtual
    get_opcode(void) const =0ade::iFunctorpure virtual
    shape(void) const =0ade::iTensorpure virtual
    to_string(void) const =0ade::iTensorpure virtual
    update_child(FuncArg arg, size_t index)=0ade::iFunctorpure virtual
    ~iFunctor(void)=defaultade::iFunctorvirtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structade_1_1i_functor.html b/docs/structade_1_1i_functor.html deleted file mode 100644 index f07ee3a41..000000000 --- a/docs/structade_1_1i_functor.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - -Tenncor: ade::iFunctor Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iFunctor Struct Referenceabstract
    -
    -
    - -

    Interface of iOperation-defined operation node. - More...

    - -

    #include <ifunctor.hpp>

    -
    -Inheritance diagram for ade::iFunctor:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    -
    -Collaboration diagram for ade::iFunctor:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iFunctor (void)=default
     
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    virtual Opcode get_opcode (void) const =0
     Return operation encoding. More...
     
    virtual const ArgsTget_children (void) const =0
     Return children nodes as a vector of raw pointers. More...
     
    virtual void update_child (FuncArg arg, size_t index)=0
     Update child at specified index. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    virtual const Shapeshape (void) const =0
     Return the shape held by this tensor. More...
     
    virtual std::string to_string (void) const =0
     Return the string representation of the tensor. More...
     
    -

    Detailed Description

    -

    Interface of iOperation-defined operation node.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iFunctor()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iFunctor::~iFunctor (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ accept()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::iFunctor::accept (iTravelervisiter)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ get_children()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual const ArgsT& ade::iFunctor::get_children (void ) const
    -
    -pure virtual
    -
    - -

    Return children nodes as a vector of raw pointers.

    - -

    Implemented in ade::Functor, and ead::Functor< T >.

    - -
    -
    - -

    ◆ get_opcode()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual Opcode ade::iFunctor::get_opcode (void ) const
    -
    -pure virtual
    -
    - -

    Return operation encoding.

    - -

    Implemented in ade::Functor, and ead::Functor< T >.

    - -
    -
    - -

    ◆ update_child()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void ade::iFunctor::update_child (FuncArg arg,
    size_t index 
    )
    -
    -pure virtual
    -
    - -

    Update child at specified index.

    - -

    Implemented in ade::Functor, and ead::Functor< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_functor__coll__graph.map b/docs/structade_1_1i_functor__coll__graph.map deleted file mode 100644 index d1fb05819..000000000 --- a/docs/structade_1_1i_functor__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1i_functor__coll__graph.md5 b/docs/structade_1_1i_functor__coll__graph.md5 deleted file mode 100644 index aa5b13c35..000000000 --- a/docs/structade_1_1i_functor__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -70702f9f61dd7f770c30b4a309c9f907 \ No newline at end of file diff --git a/docs/structade_1_1i_functor__coll__graph.png b/docs/structade_1_1i_functor__coll__graph.png deleted file mode 100644 index 598302cd8..000000000 Binary files a/docs/structade_1_1i_functor__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_functor__inherit__graph.map b/docs/structade_1_1i_functor__inherit__graph.map deleted file mode 100644 index 3e0b4a2b4..000000000 --- a/docs/structade_1_1i_functor__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structade_1_1i_functor__inherit__graph.md5 b/docs/structade_1_1i_functor__inherit__graph.md5 deleted file mode 100644 index 6934e8096..000000000 --- a/docs/structade_1_1i_functor__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b0c6ed5380edf61c4a34a18f56603321 \ No newline at end of file diff --git a/docs/structade_1_1i_functor__inherit__graph.png b/docs/structade_1_1i_functor__inherit__graph.png deleted file mode 100644 index 055d19128..000000000 Binary files a/docs/structade_1_1i_functor__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_gradient_builder-members.html b/docs/structade_1_1i_gradient_builder-members.html deleted file mode 100644 index 86507090d..000000000 --- a/docs/structade_1_1i_gradient_builder-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iGradientBuilder Member List
    -
    -
    - -

    This is the complete list of members for ade::iGradientBuilder, including all inherited members.

    - - - - - - - - -
    add(TensptrT &lhs, TensptrT &rhs) const =0ade::iGradientBuilderpure virtual
    chain_rule(FuncptrT op, const TensptrT &local_der, TensptrT supcomp_grad, size_t arg_idx) const =0ade::iGradientBuilderpure virtual
    derive(TensptrT root, TensptrT target) constade::iGradientBuilderinline
    get_const_one(Shape shape) const =0ade::iGradientBuilderpure virtual
    get_const_zero(Shape shape) const =0ade::iGradientBuilderpure virtual
    local_derivative(FuncptrT op, size_t arg_idx) const =0ade::iGradientBuilderpure virtual
    ~iGradientBuilder(void)=defaultade::iGradientBuildervirtual
    - - - - diff --git a/docs/structade_1_1i_gradient_builder.html b/docs/structade_1_1i_gradient_builder.html deleted file mode 100644 index 2558f3a93..000000000 --- a/docs/structade_1_1i_gradient_builder.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - - -Tenncor: ade::iGradientBuilder Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iGradientBuilder Struct Referenceabstract
    -
    -
    - -

    #include <grad_def.hpp>

    -
    -Inheritance diagram for ade::iGradientBuilder:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iGradientBuilder (void)=default
     
    virtual TensptrT local_derivative (FuncptrT op, size_t arg_idx) const =0
     
    virtual TensptrT chain_rule (FuncptrT op, const TensptrT &local_der, TensptrT supcomp_grad, size_t arg_idx) const =0
     
    virtual TensptrT get_const_one (Shape shape) const =0
     Return tensor representing 1 constant. More...
     
    virtual TensptrT get_const_zero (Shape shape) const =0
     Return tensor representing 0 constant. More...
     
    virtual TensptrT add (TensptrT &lhs, TensptrT &rhs) const =0
     Return functor representing lhs + rhs. More...
     
    TensptrT derive (TensptrT root, TensptrT target) const
     Return derivative of root with respect to target. More...
     
    -

    Detailed Description

    -

    Define manditory definitions required for tensor differentiation For some graph F(G(x)), chain rule for calculating dF/dx is defined in the following order:

      -
    1. calcualte dF/dG => F local derivative and derivative of super composition (supcomp_grad for G)
    2. -
    3. calculate dG/dx => G local derivative
    4. -
    5. chain dF/dG (supcomp_grad) and dG/dx (local_der) This top-down approach updates tensor shape information such that output derivative dF/dx has the shape of x
    6. -
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iGradientBuilder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iGradientBuilder::~iGradientBuilder (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual TensptrT ade::iGradientBuilder::add (TensptrTlhs,
    TensptrTrhs 
    ) const
    -
    -pure virtual
    -
    - -

    Return functor representing lhs + rhs.

    - -

    Implemented in ead::GradientBuilder< T >.

    - -
    -
    - -

    ◆ chain_rule()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual TensptrT ade::iGradientBuilder::chain_rule (FuncptrT op,
    const TensptrTlocal_der,
    TensptrT supcomp_grad,
    size_t arg_idx 
    ) const
    -
    -pure virtual
    -
    -

    Let op be functor F with arguments args, and local_der is derivative of F wrt one of args (say x) Let supcomp_grad be defined as dG/dF where G is some super-functor using F Return derivative G wrt to arg x by applying chain rule

    - -

    Implemented in ead::GradientBuilder< T >.

    - -
    -
    - -

    ◆ derive()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    TensptrT ade::iGradientBuilder::derive (TensptrT root,
    TensptrT target 
    ) const
    -
    -inline
    -
    - -

    Return derivative of root with respect to target.

    - -
    -
    - -

    ◆ get_const_one()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual TensptrT ade::iGradientBuilder::get_const_one (Shape shape) const
    -
    -pure virtual
    -
    - -

    Return tensor representing 1 constant.

    - -

    Implemented in ead::GradientBuilder< T >.

    - -
    -
    - -

    ◆ get_const_zero()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual TensptrT ade::iGradientBuilder::get_const_zero (Shape shape) const
    -
    -pure virtual
    -
    - -

    Return tensor representing 0 constant.

    - -

    Implemented in ead::GradientBuilder< T >.

    - -
    -
    - -

    ◆ local_derivative()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual TensptrT ade::iGradientBuilder::local_derivative (FuncptrT op,
    size_t arg_idx 
    ) const
    -
    -pure virtual
    -
    -

    Let op be functor F with arguments args Return derivative of F wrt args[arg_idx]

    - -

    Implemented in ead::GradientBuilder< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_gradient_builder__inherit__graph.map b/docs/structade_1_1i_gradient_builder__inherit__graph.map deleted file mode 100644 index b0755fec9..000000000 --- a/docs/structade_1_1i_gradient_builder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structade_1_1i_gradient_builder__inherit__graph.md5 b/docs/structade_1_1i_gradient_builder__inherit__graph.md5 deleted file mode 100644 index a356c4775..000000000 --- a/docs/structade_1_1i_gradient_builder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e9248717ab196fb60d877159c05d40f7 \ No newline at end of file diff --git a/docs/structade_1_1i_gradient_builder__inherit__graph.png b/docs/structade_1_1i_gradient_builder__inherit__graph.png deleted file mode 100644 index da3ba12e7..000000000 Binary files a/docs/structade_1_1i_gradient_builder__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_leaf-members.html b/docs/structade_1_1i_leaf-members.html deleted file mode 100644 index f6f9594b6..000000000 --- a/docs/structade_1_1i_leaf-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iLeaf Member List
    -
    -
    - -

    This is the complete list of members for ade::iLeaf, including all inherited members.

    - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iLeafinlinevirtual
    data(void)=0ade::iDatapure virtual
    data(void) const =0ade::iDatapure virtual
    nbytes(void) const =0ade::iDatapure virtual
    shape(void) const =0ade::iTensorpure virtual
    to_string(void) const =0ade::iTensorpure virtual
    type_code(void) const =0ade::iDatapure virtual
    type_label(void) const =0ade::iDatapure virtual
    ~iData(void)=defaultade::iDatavirtual
    ~iLeaf(void)=defaultade::iLeafvirtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structade_1_1i_leaf.html b/docs/structade_1_1i_leaf.html deleted file mode 100644 index 73e9bd456..000000000 --- a/docs/structade_1_1i_leaf.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -Tenncor: ade::iLeaf Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iLeaf Struct Reference
    -
    -
    - -

    Leaf of the graph commonly representing the variable in an equation. - More...

    - -

    #include <ileaf.hpp>

    -
    -Inheritance diagram for ade::iLeaf:
    -
    -
    Inheritance graph
    - - - - - - - -
    [legend]
    -
    -Collaboration diagram for ade::iLeaf:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iLeaf (void)=default
     
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    virtual const Shapeshape (void) const =0
     Return the shape held by this tensor. More...
     
    virtual std::string to_string (void) const =0
     Return the string representation of the tensor. More...
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    virtual void * data (void)=0
     Return pointer to internal data. More...
     
    virtual const void * data (void) const =0
     Return const pointer to internal data. More...
     
    virtual size_t type_code (void) const =0
     Return data type encoding. More...
     
    virtual std::string type_label (void) const =0
     Return data type label (for better readability) More...
     
    virtual size_t nbytes (void) const =0
     Return number of bytes in the data. More...
     
    -

    Detailed Description

    -

    Leaf of the graph commonly representing the variable in an equation.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iLeaf()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iLeaf::~iLeaf (void )
    -
    -virtualdefault
    -
    - -

    Reimplemented in ead::iLeaf< T >.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ accept()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ade::iLeaf::accept (iTravelervisiter)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_leaf__coll__graph.map b/docs/structade_1_1i_leaf__coll__graph.map deleted file mode 100644 index a27b4ba79..000000000 --- a/docs/structade_1_1i_leaf__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structade_1_1i_leaf__coll__graph.md5 b/docs/structade_1_1i_leaf__coll__graph.md5 deleted file mode 100644 index da0f5307c..000000000 --- a/docs/structade_1_1i_leaf__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f8226c9081ec9f429998e9e93d88126d \ No newline at end of file diff --git a/docs/structade_1_1i_leaf__coll__graph.png b/docs/structade_1_1i_leaf__coll__graph.png deleted file mode 100644 index 3819dbecd..000000000 Binary files a/docs/structade_1_1i_leaf__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_leaf__inherit__graph.map b/docs/structade_1_1i_leaf__inherit__graph.map deleted file mode 100644 index 5a603516c..000000000 --- a/docs/structade_1_1i_leaf__inherit__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/structade_1_1i_leaf__inherit__graph.md5 b/docs/structade_1_1i_leaf__inherit__graph.md5 deleted file mode 100644 index 93ee18967..000000000 --- a/docs/structade_1_1i_leaf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e3cfd81a7652001a699389a43009bd86 \ No newline at end of file diff --git a/docs/structade_1_1i_leaf__inherit__graph.png b/docs/structade_1_1i_leaf__inherit__graph.png deleted file mode 100644 index bbf81a834..000000000 Binary files a/docs/structade_1_1i_leaf__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_operable_func-members.html b/docs/structade_1_1i_operable_func-members.html deleted file mode 100644 index fd6897d4d..000000000 --- a/docs/structade_1_1i_operable_func-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iOperableFunc Member List
    -
    -
    - -

    This is the complete list of members for ade::iOperableFunc, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iFunctorinlinevirtual
    data(void)=0ade::iDatapure virtual
    data(void) const =0ade::iDatapure virtual
    get_children(void) const =0ade::iFunctorpure virtual
    get_opcode(void) const =0ade::iFunctorpure virtual
    nbytes(void) const =0ade::iDatapure virtual
    shape(void) const =0ade::iTensorpure virtual
    to_string(void) const =0ade::iTensorpure virtual
    type_code(void) const =0ade::iDatapure virtual
    type_label(void) const =0ade::iDatapure virtual
    update(void)=0ade::iOperableFuncpure virtual
    update_child(FuncArg arg, size_t index)=0ade::iFunctorpure virtual
    ~iData(void)=defaultade::iDatavirtual
    ~iFunctor(void)=defaultade::iFunctorvirtual
    ~iOperableFunc(void)=defaultade::iOperableFuncvirtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structade_1_1i_operable_func.html b/docs/structade_1_1i_operable_func.html deleted file mode 100644 index bba010df4..000000000 --- a/docs/structade_1_1i_operable_func.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -Tenncor: ade::iOperableFunc Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iOperableFunc Struct Referenceabstract
    -
    -
    - -

    A functor node with direct access to evaluated data. - More...

    - -

    #include <iopfunc.hpp>

    -
    -Inheritance diagram for ade::iOperableFunc:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    -
    -Collaboration diagram for ade::iOperableFunc:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iOperableFunc (void)=default
     
    virtual void update (void)=0
     Update local data-cache using this functor's operation. More...
     
    - Public Member Functions inherited from ade::iFunctor
    virtual ~iFunctor (void)=default
     
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    virtual Opcode get_opcode (void) const =0
     Return operation encoding. More...
     
    virtual const ArgsTget_children (void) const =0
     Return children nodes as a vector of raw pointers. More...
     
    virtual void update_child (FuncArg arg, size_t index)=0
     Update child at specified index. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    virtual const Shapeshape (void) const =0
     Return the shape held by this tensor. More...
     
    virtual std::string to_string (void) const =0
     Return the string representation of the tensor. More...
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    virtual void * data (void)=0
     Return pointer to internal data. More...
     
    virtual const void * data (void) const =0
     Return const pointer to internal data. More...
     
    virtual size_t type_code (void) const =0
     Return data type encoding. More...
     
    virtual std::string type_label (void) const =0
     Return data type label (for better readability) More...
     
    virtual size_t nbytes (void) const =0
     Return number of bytes in the data. More...
     
    -

    Detailed Description

    -

    A functor node with direct access to evaluated data.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iOperableFunc()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iOperableFunc::~iOperableFunc (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ update()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::iOperableFunc::update (void )
    -
    -pure virtual
    -
    - -

    Update local data-cache using this functor's operation.

    - -

    Implemented in ead::Functor< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_operable_func__coll__graph.map b/docs/structade_1_1i_operable_func__coll__graph.map deleted file mode 100644 index 7b4ddec12..000000000 --- a/docs/structade_1_1i_operable_func__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/structade_1_1i_operable_func__coll__graph.md5 b/docs/structade_1_1i_operable_func__coll__graph.md5 deleted file mode 100644 index 93f6732ea..000000000 --- a/docs/structade_1_1i_operable_func__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -295a5d8ce4661c48db17cd54a66c8bd8 \ No newline at end of file diff --git a/docs/structade_1_1i_operable_func__coll__graph.png b/docs/structade_1_1i_operable_func__coll__graph.png deleted file mode 100644 index b6cdbb934..000000000 Binary files a/docs/structade_1_1i_operable_func__coll__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_operable_func__inherit__graph.map b/docs/structade_1_1i_operable_func__inherit__graph.map deleted file mode 100644 index b7428b924..000000000 --- a/docs/structade_1_1i_operable_func__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structade_1_1i_operable_func__inherit__graph.md5 b/docs/structade_1_1i_operable_func__inherit__graph.md5 deleted file mode 100644 index c8a44d8bf..000000000 --- a/docs/structade_1_1i_operable_func__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7028c23610517d44e2a87976f0bf2adc \ No newline at end of file diff --git a/docs/structade_1_1i_operable_func__inherit__graph.png b/docs/structade_1_1i_operable_func__inherit__graph.png deleted file mode 100644 index f226d91f7..000000000 Binary files a/docs/structade_1_1i_operable_func__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_tensor-members.html b/docs/structade_1_1i_tensor-members.html deleted file mode 100644 index aee819260..000000000 --- a/docs/structade_1_1i_tensor-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iTensor Member List
    -
    -
    - -

    This is the complete list of members for ade::iTensor, including all inherited members.

    - - - - - -
    accept(iTraveler &visiter)=0ade::iTensorpure virtual
    shape(void) const =0ade::iTensorpure virtual
    to_string(void) const =0ade::iTensorpure virtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structade_1_1i_tensor.html b/docs/structade_1_1i_tensor.html deleted file mode 100644 index c4a2f96a0..000000000 --- a/docs/structade_1_1i_tensor.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -Tenncor: ade::iTensor Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iTensor Struct Referenceabstract
    -
    -
    - -

    Interface of traversible and differentiable nodes with shape information. - More...

    - -

    #include <itensor.hpp>

    -
    -Inheritance diagram for ade::iTensor:
    -
    -
    Inheritance graph
    - - - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iTensor (void)=default
     
    virtual void accept (iTraveler &visiter)=0
     Obtain concrete information on either leaf or functor implementations. More...
     
    virtual const Shapeshape (void) const =0
     Return the shape held by this tensor. More...
     
    virtual std::string to_string (void) const =0
     Return the string representation of the tensor. More...
     
    -

    Detailed Description

    -

    Interface of traversible and differentiable nodes with shape information.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iTensor()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iTensor::~iTensor (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ accept()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::iTensor::accept (iTravelervisiter)
    -
    -pure virtual
    -
    - -

    Obtain concrete information on either leaf or functor implementations.

    - -

    Implemented in ade::iFunctor, and ade::iLeaf.

    - -
    -
    - -

    ◆ shape()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual const Shape& ade::iTensor::shape (void ) const
    -
    -pure virtual
    -
    - -

    Return the shape held by this tensor.

    - -

    Implemented in ade::Functor, ead::Functor< T >, and ead::iLeaf< T >.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::string ade::iTensor::to_string (void ) const
    -
    -pure virtual
    -
    - -

    Return the string representation of the tensor.

    - -

    Implemented in ead::Variable< T >, ade::Functor, ead::Functor< T >, and ead::Constant< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_tensor__inherit__graph.map b/docs/structade_1_1i_tensor__inherit__graph.map deleted file mode 100644 index d43df8055..000000000 --- a/docs/structade_1_1i_tensor__inherit__graph.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/structade_1_1i_tensor__inherit__graph.md5 b/docs/structade_1_1i_tensor__inherit__graph.md5 deleted file mode 100644 index 7b875ce5f..000000000 --- a/docs/structade_1_1i_tensor__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a2ffafe2e768da76a80ab8353a5f3969 \ No newline at end of file diff --git a/docs/structade_1_1i_tensor__inherit__graph.png b/docs/structade_1_1i_tensor__inherit__graph.png deleted file mode 100644 index 25f56fb4c..000000000 Binary files a/docs/structade_1_1i_tensor__inherit__graph.png and /dev/null differ diff --git a/docs/structade_1_1i_traveler-members.html b/docs/structade_1_1i_traveler-members.html deleted file mode 100644 index 232b9c34b..000000000 --- a/docs/structade_1_1i_traveler-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ade::iTraveler Member List
    -
    -
    - -

    This is the complete list of members for ade::iTraveler, including all inherited members.

    - - - - -
    visit(iLeaf *leaf)=0ade::iTravelerpure virtual
    visit(iFunctor *func)=0ade::iTravelerpure virtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structade_1_1i_traveler.html b/docs/structade_1_1i_traveler.html deleted file mode 100644 index 4fb38ac51..000000000 --- a/docs/structade_1_1i_traveler.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -Tenncor: ade::iTraveler Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ade::iTraveler Struct Referenceabstract
    -
    -
    - -

    Interface to travel through graph, treating iLeaf and iFunctor differently. - More...

    - -

    #include <itensor.hpp>

    -
    -Inheritance diagram for ade::iTraveler:
    -
    -
    Inheritance graph
    - - - - - - - - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

    virtual ~iTraveler (void)=default
     
    virtual void visit (iLeaf *leaf)=0
     Visit leaf node. More...
     
    virtual void visit (iFunctor *func)=0
     Visit functor node. More...
     
    -

    Detailed Description

    -

    Interface to travel through graph, treating iLeaf and iFunctor differently.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iTraveler()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::iTraveler::~iTraveler (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::iTraveler::visit (iLeafleaf)
    -
    -pure virtual
    -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ade::iTraveler::visit (iFunctorfunc)
    -
    -pure virtual
    -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structade_1_1i_traveler__inherit__graph.map b/docs/structade_1_1i_traveler__inherit__graph.map deleted file mode 100644 index ea8710cab..000000000 --- a/docs/structade_1_1i_traveler__inherit__graph.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/structade_1_1i_traveler__inherit__graph.md5 b/docs/structade_1_1i_traveler__inherit__graph.md5 deleted file mode 100644 index dd90d1f96..000000000 --- a/docs/structade_1_1i_traveler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a31ae3359d0a1c524ec5c7d248086672 \ No newline at end of file diff --git a/docs/structade_1_1i_traveler__inherit__graph.png b/docs/structade_1_1i_traveler__inherit__graph.png deleted file mode 100644 index bd02783b0..000000000 Binary files a/docs/structade_1_1i_traveler__inherit__graph.png and /dev/null differ diff --git a/docs/structdbg_1_1_client_config-members.html b/docs/structdbg_1_1_client_config-members.html deleted file mode 100644 index 08706f15e..000000000 --- a/docs/structdbg_1_1_client_config-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    dbg::ClientConfig Member List
    -
    -
    - -

    This is the complete list of members for dbg::ClientConfig, including all inherited members.

    - - - - - -
    ClientConfig(void)=defaultdbg::ClientConfig
    ClientConfig(std::chrono::duration< int64_t, std::milli > request_duration, std::chrono::duration< int64_t, std::milli > stream_duration)dbg::ClientConfiginline
    request_duration_dbg::ClientConfig
    stream_duration_dbg::ClientConfig
    - - - - diff --git a/docs/structdbg_1_1_client_config.html b/docs/structdbg_1_1_client_config.html deleted file mode 100644 index dc0dbc52b..000000000 --- a/docs/structdbg_1_1_client_config.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -Tenncor: dbg::ClientConfig Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    dbg::ClientConfig Struct Reference
    -
    -
    - -

    #include <client.hpp>

    - - - - - - -

    -Public Member Functions

     ClientConfig (void)=default
     
     ClientConfig (std::chrono::duration< int64_t, std::milli > request_duration, std::chrono::duration< int64_t, std::milli > stream_duration)
     
    - - - - - -

    -Public Attributes

    std::chrono::duration< int64_t, std::milli > request_duration_
     
    std::chrono::duration< int64_t, std::milli > stream_duration_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ClientConfig() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    dbg::ClientConfig::ClientConfig (void )
    -
    -default
    -
    - -
    -
    - -

    ◆ ClientConfig() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    dbg::ClientConfig::ClientConfig (std::chrono::duration< int64_t, std::milli > request_duration,
    std::chrono::duration< int64_t, std::milli > stream_duration 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ request_duration_

    - -
    -
    - - - - -
    std::chrono::duration<int64_t,std::milli> dbg::ClientConfig::request_duration_
    -
    -Initial value:
    =
    std::chrono::milliseconds(250)
    -
    -
    - -

    ◆ stream_duration_

    - -
    -
    - - - - -
    std::chrono::duration<int64_t,std::milli> dbg::ClientConfig::stream_duration_
    -
    -Initial value:
    =
    std::chrono::milliseconds(10000)
    -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structdbg_1_1_edge_info-members.html b/docs/structdbg_1_1_edge_info-members.html deleted file mode 100644 index 1f76d04ba..000000000 --- a/docs/structdbg_1_1_edge_info-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    dbg::EdgeInfo Member List
    -
    -
    - -

    This is the complete list of members for dbg::EdgeInfo, including all inherited members.

    - - - - -
    child_dbg::EdgeInfo
    label_dbg::EdgeInfo
    parent_dbg::EdgeInfo
    - - - - diff --git a/docs/structdbg_1_1_edge_info.html b/docs/structdbg_1_1_edge_info.html deleted file mode 100644 index 1233d2fc2..000000000 --- a/docs/structdbg_1_1_edge_info.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Tenncor: dbg::EdgeInfo Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    dbg::EdgeInfo Struct Reference
    -
    -
    - -

    #include <session.hpp>

    - - - - - - - - -

    -Public Attributes

    size_t parent_
     
    size_t child_
     
    std::string label_
     
    -

    Member Data Documentation

    - -

    ◆ child_

    - -
    -
    - - - - -
    size_t dbg::EdgeInfo::child_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string dbg::EdgeInfo::label_
    -
    - -
    -
    - -

    ◆ parent_

    - -
    -
    - - - - -
    size_t dbg::EdgeInfo::parent_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structdbg_1_1_edge_info_hash-members.html b/docs/structdbg_1_1_edge_info_hash-members.html deleted file mode 100644 index 2f40d3ed5..000000000 --- a/docs/structdbg_1_1_edge_info_hash-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    dbg::EdgeInfoHash Member List
    -
    -
    - -

    This is the complete list of members for dbg::EdgeInfoHash, including all inherited members.

    - - -
    operator()(const EdgeInfo &edge) constdbg::EdgeInfoHashinline
    - - - - diff --git a/docs/structdbg_1_1_edge_info_hash.html b/docs/structdbg_1_1_edge_info_hash.html deleted file mode 100644 index c6634d0e0..000000000 --- a/docs/structdbg_1_1_edge_info_hash.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: dbg::EdgeInfoHash Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    dbg::EdgeInfoHash Struct Referencefinal
    -
    -
    - -

    #include <session.hpp>

    - - - - -

    -Public Member Functions

    size_t operator() (const EdgeInfo &edge) const
     
    -

    Member Function Documentation

    - -

    ◆ operator()()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t dbg::EdgeInfoHash::operator() (const EdgeInfoedge) const
    -
    -inline
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structdbg_1_1_graph_emitter_client-members.html b/docs/structdbg_1_1_graph_emitter_client-members.html deleted file mode 100644 index 7885fbc58..000000000 --- a/docs/structdbg_1_1_graph_emitter_client-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    dbg::GraphEmitterClient Member List
    -
    -
    - -

    This is the complete list of members for dbg::GraphEmitterClient, including all inherited members.

    - - - - - - - - - - - - - -
    cfg_dbg::GraphEmitterClientprivate
    clear(void)dbg::GraphEmitterClientinline
    connected_dbg::GraphEmitterClientprivate
    create_graph(tenncor::CreateGraphRequest &request)dbg::GraphEmitterClientinline
    GraphEmitterClient(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig cfg)dbg::GraphEmitterClientinline
    health_checker_dbg::GraphEmitterClientprivate
    is_connected(void)dbg::GraphEmitterClientinline
    join(void)dbg::GraphEmitterClientinline
    sequential_jobs_dbg::GraphEmitterClientprivate
    stub_dbg::GraphEmitterClientprivate
    update_graph(tenncor::UpdateGraphRequest &request)dbg::GraphEmitterClientinline
    update_node_data(std::vector< tenncor::UpdateNodeDataRequest > &requests, size_t update_it)dbg::GraphEmitterClientinline
    - - - - diff --git a/docs/structdbg_1_1_graph_emitter_client.html b/docs/structdbg_1_1_graph_emitter_client.html deleted file mode 100644 index 3ccfb76f7..000000000 --- a/docs/structdbg_1_1_graph_emitter_client.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - -Tenncor: dbg::GraphEmitterClient Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    dbg::GraphEmitterClient Struct Referencefinal
    -
    -
    - -

    #include <client.hpp>

    -
    -Collaboration diagram for dbg::GraphEmitterClient:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     GraphEmitterClient (std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig cfg)
     
    void create_graph (tenncor::CreateGraphRequest &request)
     Add job that pass CreateGraphRequest. More...
     
    void update_graph (tenncor::UpdateGraphRequest &request)
     Add job that pass UpdateGraphRequest. More...
     
    void update_node_data (std::vector< tenncor::UpdateNodeDataRequest > &requests, size_t update_it)
     Add job that streams UpdateNodeDataRequest. More...
     
    bool is_connected (void)
     
    void join (void)
     
    void clear (void)
     
    - - - - - - - - - - - -

    -Private Attributes

    std::unique_ptr< tenncor::GraphEmitter::Stub > stub_
     
    ClientConfig cfg_
     
    jobs::Sequence sequential_jobs_
     
    std::atomic< bool > connected_
     
    jobs::ManagedJob health_checker_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ GraphEmitterClient()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    dbg::GraphEmitterClient::GraphEmitterClient (std::shared_ptr< grpc::ChannelInterface > channel,
    ClientConfig cfg 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ clear()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::GraphEmitterClient::clear (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ create_graph()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::GraphEmitterClient::create_graph (tenncor::CreateGraphRequest & request)
    -
    -inline
    -
    - -

    Add job that pass CreateGraphRequest.

    - -
    -
    - -

    ◆ is_connected()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool dbg::GraphEmitterClient::is_connected (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ join()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::GraphEmitterClient::join (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ update_graph()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::GraphEmitterClient::update_graph (tenncor::UpdateGraphRequest & request)
    -
    -inline
    -
    - -

    Add job that pass UpdateGraphRequest.

    - -
    -
    - -

    ◆ update_node_data()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void dbg::GraphEmitterClient::update_node_data (std::vector< tenncor::UpdateNodeDataRequest > & requests,
    size_t update_it 
    )
    -
    -inline
    -
    - -

    Add job that streams UpdateNodeDataRequest.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ cfg_

    - -
    -
    - - - - - -
    - - - - -
    ClientConfig dbg::GraphEmitterClient::cfg_
    -
    -private
    -
    - -
    -
    - -

    ◆ connected_

    - -
    -
    - - - - - -
    - - - - -
    std::atomic<bool> dbg::GraphEmitterClient::connected_
    -
    -private
    -
    - -
    -
    - -

    ◆ health_checker_

    - -
    -
    - - - - - -
    - - - - -
    jobs::ManagedJob dbg::GraphEmitterClient::health_checker_
    -
    -private
    -
    - -
    -
    - -

    ◆ sequential_jobs_

    - -
    -
    - - - - - -
    - - - - -
    jobs::Sequence dbg::GraphEmitterClient::sequential_jobs_
    -
    -private
    -
    - -
    -
    - -

    ◆ stub_

    - -
    -
    - - - - - -
    - - - - -
    std::unique_ptr<tenncor::GraphEmitter::Stub> dbg::GraphEmitterClient::stub_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structdbg_1_1_graph_emitter_client__coll__graph.map b/docs/structdbg_1_1_graph_emitter_client__coll__graph.map deleted file mode 100644 index a6702c96f..000000000 --- a/docs/structdbg_1_1_graph_emitter_client__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structdbg_1_1_graph_emitter_client__coll__graph.md5 b/docs/structdbg_1_1_graph_emitter_client__coll__graph.md5 deleted file mode 100644 index fae747736..000000000 --- a/docs/structdbg_1_1_graph_emitter_client__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c23b06eebfb95cb827aaa13402ce3a05 \ No newline at end of file diff --git a/docs/structdbg_1_1_graph_emitter_client__coll__graph.png b/docs/structdbg_1_1_graph_emitter_client__coll__graph.png deleted file mode 100644 index 22642c709..000000000 Binary files a/docs/structdbg_1_1_graph_emitter_client__coll__graph.png and /dev/null differ diff --git a/docs/structdbg_1_1_interactive_session-members.html b/docs/structdbg_1_1_interactive_session-members.html deleted file mode 100644 index b67d659c1..000000000 --- a/docs/structdbg_1_1_interactive_session-members.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    dbg::InteractiveSession Member List
    -
    -
    - -

    This is the complete list of members for dbg::InteractiveSession, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - -
    client_dbg::InteractiveSessionprivate
    edges_dbg::InteractiveSessionprivate
    get_session_id(void) constdbg::InteractiveSessioninline
    InteractiveSession(std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig client_cfg=ClientConfig(), tag::TagRegistry &registry=tag::get_reg())dbg::InteractiveSessioninline
    InteractiveSession(std::string host, ClientConfig client_cfg=ClientConfig())dbg::InteractiveSessioninline
    join(void)dbg::InteractiveSessioninline
    join_then_stop(const std::chrono::time_point< std::chrono::system_clock > &deadline)dbg::InteractiveSessioninline
    node_ids_dbg::InteractiveSessionprivate
    optimize(const opt::OptCtx &rules)dbg::InteractiveSessioninline
    registry_dbg::InteractiveSession
    sess_dbg::InteractiveSession
    sess_id_dbg::InteractiveSessionprivate
    stop(void)dbg::InteractiveSessioninline
    stub_dbg::InteractiveSession
    track(ade::TensT roots) overridedbg::InteractiveSessioninlinevirtual
    update(ead::TensSetT updated={}, ead::TensSetT ignores={}) overridedbg::InteractiveSessioninlinevirtual
    update_it_dbg::InteractiveSessionprivate
    update_target(ead::TensSetT targeted, ead::TensSetT updated={}) overridedbg::InteractiveSessioninlinevirtual
    uuid_gen_dbg::InteractiveSessionstatic
    ~iSession(void)=defaultead::iSessionvirtual
    - - - - diff --git a/docs/structdbg_1_1_interactive_session.html b/docs/structdbg_1_1_interactive_session.html deleted file mode 100644 index 3f48d5f8d..000000000 --- a/docs/structdbg_1_1_interactive_session.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - - -Tenncor: dbg::InteractiveSession Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    dbg::InteractiveSession Struct Referencefinal
    -
    -
    - -

    #include <session.hpp>

    -
    -Inheritance diagram for dbg::InteractiveSession:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for dbg::InteractiveSession:
    -
    -
    Collaboration graph
    - - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     InteractiveSession (std::shared_ptr< grpc::ChannelInterface > channel, ClientConfig client_cfg=ClientConfig(), tag::TagRegistry &registry=tag::get_reg())
     
     InteractiveSession (std::string host, ClientConfig client_cfg=ClientConfig())
     
    void track (ade::TensT roots) override
     
    void update (ead::TensSetT updated={}, ead::TensSetT ignores={}) override
     
    void update_target (ead::TensSetT targeted, ead::TensSetT updated={}) override
     
    void optimize (const opt::OptCtx &rules)
     
    void join (void)
     
    void join_then_stop (const std::chrono::time_point< std::chrono::system_clock > &deadline)
     
    void stop (void)
     
    std::string get_session_id (void) const
     
    - Public Member Functions inherited from ead::iSession
    virtual ~iSession (void)=default
     
    - - - - - - - -

    -Public Attributes

    std::unique_ptr< tenncor::GraphEmitter::Stub > stub_
     
    ead::Session sess_
     
    tag::TagRegistryregistry_
     
    - - - -

    -Static Public Attributes

    static boost::uuids::random_generator uuid_gen_
     
    - - - - - - - - - - - -

    -Private Attributes

    std::string sess_id_
     
    std::unordered_map< ade::iTensor *, size_t > node_ids_
     
    std::unordered_set< EdgeInfo, EdgeInfoHashedges_
     
    size_t update_it_ = 0
     
    GraphEmitterClient client_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ InteractiveSession() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    dbg::InteractiveSession::InteractiveSession (std::shared_ptr< grpc::ChannelInterface > channel,
    ClientConfig client_cfg = ClientConfig(),
    tag::TagRegistryregistry = tag::get_reg() 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ InteractiveSession() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    dbg::InteractiveSession::InteractiveSession (std::string host,
    ClientConfig client_cfg = ClientConfig() 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_session_id()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string dbg::InteractiveSession::get_session_id (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ join()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::InteractiveSession::join (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ join_then_stop()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::InteractiveSession::join_then_stop (const std::chrono::time_point< std::chrono::system_clock > & deadline)
    -
    -inline
    -
    - -
    -
    - -

    ◆ optimize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::InteractiveSession::optimize (const opt::OptCtxrules)
    -
    -inline
    -
    - -
    -
    - -

    ◆ stop()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::InteractiveSession::stop (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ track()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void dbg::InteractiveSession::track (ade::TensT roots)
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iSession.

    - -
    -
    - -

    ◆ update()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void dbg::InteractiveSession::update (ead::TensSetT updated = {},
    ead::TensSetT ignores = {} 
    )
    -
    -inlineoverridevirtual
    -
    -

    update all nodes related to updated, if updated set is empty update all nodes related to the leaves (so everyone) ignore all nodes dependent on ignores including the ignored nodes

    - -

    Implements ead::iSession.

    - -
    -
    - -

    ◆ update_target()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void dbg::InteractiveSession::update_target (ead::TensSetT targeted,
    ead::TensSetT updated = {} 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iSession.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ client_

    - -
    -
    - - - - - -
    - - - - -
    GraphEmitterClient dbg::InteractiveSession::client_
    -
    -private
    -
    - -
    -
    - -

    ◆ edges_

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_set<EdgeInfo,EdgeInfoHash> dbg::InteractiveSession::edges_
    -
    -private
    -
    - -
    -
    - -

    ◆ node_ids_

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_map<ade::iTensor*,size_t> dbg::InteractiveSession::node_ids_
    -
    -private
    -
    - -
    -
    - -

    ◆ registry_

    - -
    -
    - - - - -
    tag::TagRegistry& dbg::InteractiveSession::registry_
    -
    - -
    -
    - -

    ◆ sess_

    - -
    -
    - - - - -
    ead::Session dbg::InteractiveSession::sess_
    -
    - -
    -
    - -

    ◆ sess_id_

    - -
    -
    - - - - - -
    - - - - -
    std::string dbg::InteractiveSession::sess_id_
    -
    -private
    -
    -
    - -

    ◆ stub_

    - -
    -
    - - - - -
    std::unique_ptr<tenncor::GraphEmitter::Stub> dbg::InteractiveSession::stub_
    -
    - -
    -
    - -

    ◆ update_it_

    - -
    -
    - - - - - -
    - - - - -
    size_t dbg::InteractiveSession::update_it_ = 0
    -
    -private
    -
    - -
    -
    - -

    ◆ uuid_gen_

    - -
    -
    - - - - - -
    - - - - -
    boost::uuids::random_generator dbg::InteractiveSession::uuid_gen_
    -
    -static
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structdbg_1_1_interactive_session__coll__graph.map b/docs/structdbg_1_1_interactive_session__coll__graph.map deleted file mode 100644 index 93f5c0549..000000000 --- a/docs/structdbg_1_1_interactive_session__coll__graph.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/structdbg_1_1_interactive_session__coll__graph.md5 b/docs/structdbg_1_1_interactive_session__coll__graph.md5 deleted file mode 100644 index 62ad4187a..000000000 --- a/docs/structdbg_1_1_interactive_session__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cc41c4c6784beed1ae9845c9cfb20fc7 \ No newline at end of file diff --git a/docs/structdbg_1_1_interactive_session__coll__graph.png b/docs/structdbg_1_1_interactive_session__coll__graph.png deleted file mode 100644 index 93cce9d11..000000000 Binary files a/docs/structdbg_1_1_interactive_session__coll__graph.png and /dev/null differ diff --git a/docs/structdbg_1_1_interactive_session__inherit__graph.map b/docs/structdbg_1_1_interactive_session__inherit__graph.map deleted file mode 100644 index 5def49eaf..000000000 --- a/docs/structdbg_1_1_interactive_session__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structdbg_1_1_interactive_session__inherit__graph.md5 b/docs/structdbg_1_1_interactive_session__inherit__graph.md5 deleted file mode 100644 index 0efdf39d6..000000000 --- a/docs/structdbg_1_1_interactive_session__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b8bae50724f3cbcfb83e046030ec70bd \ No newline at end of file diff --git a/docs/structdbg_1_1_interactive_session__inherit__graph.png b/docs/structdbg_1_1_interactive_session__inherit__graph.png deleted file mode 100644 index 07fcedb8c..000000000 Binary files a/docs/structdbg_1_1_interactive_session__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_any_convr-members.html b/docs/structead_1_1_any_convr-members.html deleted file mode 100644 index 19a4f361b..000000000 --- a/docs/structead_1_1_any_convr-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::AnyConvr< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::AnyConvr< T >, including all inherited members.

    - - - - - - -
    any_id_ead::AnyConvr< T >
    AnyConvr(std::string any_id)ead::AnyConvr< T >inline
    build(const opt::ContexT &ctx, ade::Shape outshape) const overrideead::AnyConvr< T >inlinevirtual
    to_string(void) const overrideead::AnyConvr< T >inlinevirtual
    ~iConverter(void)=defaultopt::iConvertervirtual
    - - - - diff --git a/docs/structead_1_1_any_convr.html b/docs/structead_1_1_any_convr.html deleted file mode 100644 index 073315208..000000000 --- a/docs/structead_1_1_any_convr.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - -Tenncor: ead::AnyConvr< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::AnyConvr< T > Struct Template Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for ead::AnyConvr< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::AnyConvr< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     AnyConvr (std::string any_id)
     
    ade::TensptrT build (const opt::ContexT &ctx, ade::Shape outshape) const override
     
    std::string to_string (void) const override
     
    - Public Member Functions inherited from opt::iConverter
    virtual ~iConverter (void)=default
     
    - - - -

    -Public Attributes

    std::string any_id_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ AnyConvr()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ead::AnyConvr< T >::AnyConvr (std::string any_id)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::AnyConvr< T >::build (const opt::ContexTctx,
    ade::Shape outshape 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::AnyConvr< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ any_id_

    - -
    -
    -
    -template<typename T >
    - - - - -
    std::string ead::AnyConvr< T >::any_id_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_any_convr__coll__graph.map b/docs/structead_1_1_any_convr__coll__graph.map deleted file mode 100644 index 1dca04af0..000000000 --- a/docs/structead_1_1_any_convr__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_any_convr__coll__graph.md5 b/docs/structead_1_1_any_convr__coll__graph.md5 deleted file mode 100644 index cff041e3e..000000000 --- a/docs/structead_1_1_any_convr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8bf7d00f9ae50785dbe4d09e940fbbb2 \ No newline at end of file diff --git a/docs/structead_1_1_any_convr__coll__graph.png b/docs/structead_1_1_any_convr__coll__graph.png deleted file mode 100644 index ce104046d..000000000 Binary files a/docs/structead_1_1_any_convr__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_any_convr__inherit__graph.map b/docs/structead_1_1_any_convr__inherit__graph.map deleted file mode 100644 index 1dca04af0..000000000 --- a/docs/structead_1_1_any_convr__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_any_convr__inherit__graph.md5 b/docs/structead_1_1_any_convr__inherit__graph.md5 deleted file mode 100644 index 72e7c6cbd..000000000 --- a/docs/structead_1_1_any_convr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3280b1c0bf5ec2f604dcf9db3f20df0f \ No newline at end of file diff --git a/docs/structead_1_1_any_convr__inherit__graph.png b/docs/structead_1_1_any_convr__inherit__graph.png deleted file mode 100644 index ce104046d..000000000 Binary files a/docs/structead_1_1_any_convr__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_builder_arg-members.html b/docs/structead_1_1_builder_arg-members.html deleted file mode 100644 index 741e8277f..000000000 --- a/docs/structead_1_1_builder_arg-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::BuilderArg Member List
    -
    -
    - -

    This is the complete list of members for ead::BuilderArg, including all inherited members.

    - - - - - -
    arg_ead::BuilderArg
    BuilderArg(opt::ConvptrT arg, ade::CoordptrT shaper, CoordptrT coorder)ead::BuilderArginline
    coorder_ead::BuilderArg
    shaper_ead::BuilderArg
    - - - - diff --git a/docs/structead_1_1_builder_arg.html b/docs/structead_1_1_builder_arg.html deleted file mode 100644 index 908ca75a8..000000000 --- a/docs/structead_1_1_builder_arg.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -Tenncor: ead::BuilderArg Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::BuilderArg Struct Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    - - - - -

    -Public Member Functions

     BuilderArg (opt::ConvptrT arg, ade::CoordptrT shaper, CoordptrT coorder)
     
    - - - - - - - -

    -Public Attributes

    opt::ConvptrT arg_
     
    ade::CoordptrT shaper_
     
    CoordptrT coorder_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ BuilderArg()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::BuilderArg::BuilderArg (opt::ConvptrT arg,
    ade::CoordptrT shaper,
    CoordptrT coorder 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ arg_

    - -
    -
    - - - - -
    opt::ConvptrT ead::BuilderArg::arg_
    -
    - -
    -
    - -

    ◆ coorder_

    - -
    -
    - - - - -
    CoordptrT ead::BuilderArg::coorder_
    -
    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - -
    ade::CoordptrT ead::BuilderArg::shaper_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_constant-members.html b/docs/structead_1_1_constant-members.html deleted file mode 100644 index c3d75dee1..000000000 --- a/docs/structead_1_1_constant-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::Constant< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::Constant< T >, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iLeafinlinevirtual
    Constant(const Constant< T > &other)=deleteead::Constant< T >
    Constant(Constant< T > &&other)=deleteead::Constant< T >
    Constant(T *data, ade::Shape shape)ead::Constant< T >inlineprivate
    data(void) overrideead::iLeaf< T >inlinevirtual
    data(void) const overrideead::iLeaf< T >inlinevirtual
    data_ead::iLeaf< T >protected
    get(T *data, ade::Shape shape)ead::Constant< T >static
    get_scalar(T scalar, ade::Shape shape)ead::Constant< T >inlinestatic
    iLeaf(T *data, ade::Shape shape)ead::iLeaf< T >inlineprotected
    is_const(void) const overrideead::Constant< T >inlinevirtual
    is_scalar(void) constead::Constant< T >inline
    nbytes(void) const overrideead::iLeaf< T >inlinevirtual
    operator=(const Constant< T > &other)=deleteead::Constant< T >
    operator=(Constant< T > &&other)=deleteead::Constant< T >
    shape(void) const overrideead::iLeaf< T >inlinevirtual
    shape_ead::iLeaf< T >protected
    to_string(void) const overrideead::Constant< T >inlinevirtual
    type_code(void) const overrideead::iLeaf< T >inlinevirtual
    type_label(void) const overrideead::iLeaf< T >inlinevirtual
    ~iData(void)=defaultade::iDatavirtual
    ~iLeaf(void)=defaultead::iLeaf< T >virtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structead_1_1_constant.html b/docs/structead_1_1_constant.html deleted file mode 100644 index 47fa8e50d..000000000 --- a/docs/structead_1_1_constant.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - -Tenncor: ead::Constant< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::Constant< T > Struct Template Referencefinal
    -
    -
    - -

    #include <constant.hpp>

    -
    -Inheritance diagram for ead::Constant< T >:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    -
    -Collaboration diagram for ead::Constant< T >:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     Constant (const Constant< T > &other)=delete
     
     Constant (Constant< T > &&other)=delete
     
    Constant< T > & operator= (const Constant< T > &other)=delete
     
    Constant< T > & operator= (Constant< T > &&other)=delete
     
    std::string to_string (void) const override
     Implementation of iTensor. More...
     
    bool is_const (void) const override
     
    bool is_scalar (void) const
     
    - Public Member Functions inherited from ead::iLeaf< T >
    virtual ~iLeaf (void)=default
     
    const ade::Shapeshape (void) const override
     Implementation of iTensor. More...
     
    void * data (void) override
     Implementation of iData. More...
     
    const void * data (void) const override
     Implementation of iData. More...
     
    size_t type_code (void) const override
     Implementation of iData. More...
     
    std::string type_label (void) const override
     Implementation of iData. More...
     
    size_t nbytes (void) const override
     Implementation of iData. More...
     
    - Public Member Functions inherited from ade::iLeaf
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    - - - - - -

    -Static Public Member Functions

    static Constant< T > * get (T *data, ade::Shape shape)
     
    static Constant< T > * get_scalar (T scalar, ade::Shape shape)
     
    - - - -

    -Private Member Functions

     Constant (T *data, ade::Shape shape)
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Protected Member Functions inherited from ead::iLeaf< T >
     iLeaf (T *data, ade::Shape shape)
     
    - Protected Attributes inherited from ead::iLeaf< T >
    TensorT< T > data_
     Data Source. More...
     
    ade::Shape shape_
     Shape utility to avoid excessive conversion between data_.dimensions() More...
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ Constant() [1/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Constant< T >::Constant (const Constant< T > & other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ Constant() [2/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Constant< T >::Constant (Constant< T > && other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ Constant() [3/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ead::Constant< T >::Constant (T * data,
    ade::Shape shape 
    )
    -
    -inlineprivate
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Constant< T > * ead::Constant< T >::get (T * data,
    ade::Shape shape 
    )
    -
    -static
    -
    - -
    -
    - -

    ◆ get_scalar()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    static Constant<T>* ead::Constant< T >::get_scalar (scalar,
    ade::Shape shape 
    )
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ is_const()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    bool ead::Constant< T >::is_const (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iLeaf< T >.

    - -
    -
    - -

    ◆ is_scalar()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    bool ead::Constant< T >::is_scalar (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator=() [1/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Constant<T>& ead::Constant< T >::operator= (const Constant< T > & other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ operator=() [2/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Constant<T>& ead::Constant< T >::operator= (Constant< T > && other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    std::string ead::Constant< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_constant__coll__graph.map b/docs/structead_1_1_constant__coll__graph.map deleted file mode 100644 index 22ba75363..000000000 --- a/docs/structead_1_1_constant__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/structead_1_1_constant__coll__graph.md5 b/docs/structead_1_1_constant__coll__graph.md5 deleted file mode 100644 index 411af2a47..000000000 --- a/docs/structead_1_1_constant__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e12e52474894b425c71e584de20fa434 \ No newline at end of file diff --git a/docs/structead_1_1_constant__coll__graph.png b/docs/structead_1_1_constant__coll__graph.png deleted file mode 100644 index da4dcc71e..000000000 Binary files a/docs/structead_1_1_constant__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_constant__inherit__graph.map b/docs/structead_1_1_constant__inherit__graph.map deleted file mode 100644 index 8a8ad546d..000000000 --- a/docs/structead_1_1_constant__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structead_1_1_constant__inherit__graph.md5 b/docs/structead_1_1_constant__inherit__graph.md5 deleted file mode 100644 index d2a6c7d55..000000000 --- a/docs/structead_1_1_constant__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1f05903799b97e854e36ffa9301d98e0 \ No newline at end of file diff --git a/docs/structead_1_1_constant__inherit__graph.png b/docs/structead_1_1_constant__inherit__graph.png deleted file mode 100644 index 75d9de7b5..000000000 Binary files a/docs/structead_1_1_constant__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_constant_node-members.html b/docs/structead_1_1_constant_node-members.html deleted file mode 100644 index 2ddaa5470..000000000 --- a/docs/structead_1_1_constant_node-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::ConstantNode< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::ConstantNode< T >, including all inherited members.

    - - - - - - - - -
    ConstantNode(std::shared_ptr< Constant< T >> cst)ead::ConstantNode< T >inline
    cst_ead::ConstantNode< T >private
    data(void) overrideead::ConstantNode< T >inlinevirtual
    get_tensor(void) overrideead::ConstantNode< T >inlinevirtual
    shape(void)ead::iNode< T >inline
    update(void) overrideead::ConstantNode< T >inlinevirtual
    ~iNode(void)=defaultead::iNode< T >virtual
    - - - - diff --git a/docs/structead_1_1_constant_node.html b/docs/structead_1_1_constant_node.html deleted file mode 100644 index 5b62ef1f9..000000000 --- a/docs/structead_1_1_constant_node.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - -Tenncor: ead::ConstantNode< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::ConstantNode< T > Struct Template Referencefinal
    -
    -
    - -

    #include <constant.hpp>

    -
    -Inheritance diagram for ead::ConstantNode< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::ConstantNode< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Public Member Functions

     ConstantNode (std::shared_ptr< Constant< T >> cst)
     
    T * data (void) override
     
    void update (void) override
     
    ade::TensptrT get_tensor (void) override
     
    - Public Member Functions inherited from ead::iNode< T >
    virtual ~iNode (void)=default
     
    ade::Shape shape (void)
     
    - - - -

    -Private Attributes

    std::shared_ptr< Constant< T > > cst_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ConstantNode()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ead::ConstantNode< T >::ConstantNode (std::shared_ptr< Constant< T >> cst)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    T* ead::ConstantNode< T >::data (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ get_tensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::ConstantNode< T >::get_tensor (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ update()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    void ead::ConstantNode< T >::update (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ cst_

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - -
    std::shared_ptr<Constant<T> > ead::ConstantNode< T >::cst_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_constant_node__coll__graph.map b/docs/structead_1_1_constant_node__coll__graph.map deleted file mode 100644 index 13ca9135c..000000000 --- a/docs/structead_1_1_constant_node__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_constant_node__coll__graph.md5 b/docs/structead_1_1_constant_node__coll__graph.md5 deleted file mode 100644 index 8f3591816..000000000 --- a/docs/structead_1_1_constant_node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8e4ee9bbe7cabbd1fdc3dd83e408345f \ No newline at end of file diff --git a/docs/structead_1_1_constant_node__coll__graph.png b/docs/structead_1_1_constant_node__coll__graph.png deleted file mode 100644 index 2625f272d..000000000 Binary files a/docs/structead_1_1_constant_node__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_constant_node__inherit__graph.map b/docs/structead_1_1_constant_node__inherit__graph.map deleted file mode 100644 index 13ca9135c..000000000 --- a/docs/structead_1_1_constant_node__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_constant_node__inherit__graph.md5 b/docs/structead_1_1_constant_node__inherit__graph.md5 deleted file mode 100644 index bd0d4cf31..000000000 --- a/docs/structead_1_1_constant_node__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2c81c8e8d88feba253055dc4f03a992c \ No newline at end of file diff --git a/docs/structead_1_1_constant_node__inherit__graph.png b/docs/structead_1_1_constant_node__inherit__graph.png deleted file mode 100644 index 2625f272d..000000000 Binary files a/docs/structead_1_1_constant_node__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_converter_builder-members.html b/docs/structead_1_1_converter_builder-members.html deleted file mode 100644 index 03f7a304e..000000000 --- a/docs/structead_1_1_converter_builder-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::ConverterBuilder< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::ConverterBuilder< T >, including all inherited members.

    - - - - - - -
    build(const ::Subgraph *sg, const opt::RulesContext &ctx) const overrideead::ConverterBuilder< T >inlinevirtual
    build_cconv(void) const overrideead::ConverterBuilder< T >inlinevirtual
    coorderize(::NumList *list) const overrideead::ConverterBuilder< T >inlinevirtual
    shaperize(::NumList *list) const overrideead::ConverterBuilder< T >inlinevirtual
    ~iConverterBuilder(void)=defaultopt::iConverterBuildervirtual
    - - - - diff --git a/docs/structead_1_1_converter_builder.html b/docs/structead_1_1_converter_builder.html deleted file mode 100644 index 6f061cb32..000000000 --- a/docs/structead_1_1_converter_builder.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - -Tenncor: ead::ConverterBuilder< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::ConverterBuilder< T > Struct Template Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for ead::ConverterBuilder< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::ConverterBuilder< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - -

    -Public Member Functions

    opt::CstConvertF build_cconv (void) const override
     
    opt::ConvptrT build (const ::Subgraph *sg, const opt::RulesContext &ctx) const override
     
    ade::CoordptrT shaperize (::NumList *list) const override
     
    ade::CoordptrT coorderize (::NumList *list) const override
     
    - Public Member Functions inherited from opt::iConverterBuilder
    virtual ~iConverterBuilder (void)=default
     
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    opt::ConvptrT ead::ConverterBuilder< T >::build (const ::Subgraphsg,
    const opt::RulesContextctx 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverterBuilder.

    - -
    -
    - -

    ◆ build_cconv()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    opt::CstConvertF ead::ConverterBuilder< T >::build_cconv (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverterBuilder.

    - -
    -
    - -

    ◆ coorderize()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::CoordptrT ead::ConverterBuilder< T >::coorderize (::NumListlist) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverterBuilder.

    - -
    -
    - -

    ◆ shaperize()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::CoordptrT ead::ConverterBuilder< T >::shaperize (::NumListlist) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverterBuilder.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_converter_builder__coll__graph.map b/docs/structead_1_1_converter_builder__coll__graph.map deleted file mode 100644 index 9c87621ee..000000000 --- a/docs/structead_1_1_converter_builder__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_converter_builder__coll__graph.md5 b/docs/structead_1_1_converter_builder__coll__graph.md5 deleted file mode 100644 index 277ecc499..000000000 --- a/docs/structead_1_1_converter_builder__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -535dedb898ea3d41e8f3979ad58a8828 \ No newline at end of file diff --git a/docs/structead_1_1_converter_builder__coll__graph.png b/docs/structead_1_1_converter_builder__coll__graph.png deleted file mode 100644 index b4b73c2f3..000000000 Binary files a/docs/structead_1_1_converter_builder__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_converter_builder__inherit__graph.map b/docs/structead_1_1_converter_builder__inherit__graph.map deleted file mode 100644 index 9c87621ee..000000000 --- a/docs/structead_1_1_converter_builder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_converter_builder__inherit__graph.md5 b/docs/structead_1_1_converter_builder__inherit__graph.md5 deleted file mode 100644 index f2c984551..000000000 --- a/docs/structead_1_1_converter_builder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -94bceb66a19a84e3960e3e334e767ef5 \ No newline at end of file diff --git a/docs/structead_1_1_converter_builder__inherit__graph.png b/docs/structead_1_1_converter_builder__inherit__graph.png deleted file mode 100644 index b4b73c2f3..000000000 Binary files a/docs/structead_1_1_converter_builder__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_coord_map-members.html b/docs/structead_1_1_coord_map-members.html deleted file mode 100644 index 334cc4051..000000000 --- a/docs/structead_1_1_coord_map-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::CoordMap Member List
    -
    -
    - -

    This is the complete list of members for ead::CoordMap, including all inherited members.

    - - - - - - - - - - - - - -
    access(std::function< void(const ade::MatrixT &)> cb) const overrideead::CoordMapinline
    ade::iCoordMap::access(std::function< void(const MatrixT &)> cb) const =0ade::iCoordMappure virtual
    bijective_ead::CoordMapprivate
    connect(const ade::iCoordMap &rhs) const overrideead::CoordMapinlinevirtual
    CoordMap(ade::CoordT indices, bool bijective)ead::CoordMapinline
    forward(ade::CoordT::iterator out, ade::CoordT::const_iterator in) const overrideead::CoordMapinline
    ade::iCoordMap::forward(CoordT::iterator out, CoordT::const_iterator in) const =0ade::iCoordMappure virtual
    indices_ead::CoordMapprivate
    is_bijective(void) const overrideead::CoordMapinlinevirtual
    reverse(void) const overrideead::CoordMapinlinevirtual
    to_string(void) const overrideead::CoordMapinlinevirtual
    ~iCoordMap(void)=defaultade::iCoordMapvirtual
    - - - - diff --git a/docs/structead_1_1_coord_map.html b/docs/structead_1_1_coord_map.html deleted file mode 100644 index b82b34b70..000000000 --- a/docs/structead_1_1_coord_map.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - -Tenncor: ead::CoordMap Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::CoordMap Struct Referencefinal
    -
    -
    - -

    #include <coord.hpp>

    -
    -Inheritance diagram for ead::CoordMap:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::CoordMap:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     CoordMap (ade::CoordT indices, bool bijective)
     
    ade::iCoordMapconnect (const ade::iCoordMap &rhs) const override
     Return matmul(this, rhs) More...
     
    void forward (ade::CoordT::iterator out, ade::CoordT::const_iterator in) const override
     
    iCoordMap * reverse (void) const override
     
    std::string to_string (void) const override
     Return string representation of coordinate transformer. More...
     
    void access (std::function< void(const ade::MatrixT &)> cb) const override
     
    bool is_bijective (void) const override
     Return true if this instance maps coordinates/shapes bijectively. More...
     
    - Public Member Functions inherited from ade::iCoordMap
    virtual ~iCoordMap (void)=default
     
    virtual void forward (CoordT::iterator out, CoordT::const_iterator in) const =0
     Forward transform coordinates. More...
     
    virtual void access (std::function< void(const MatrixT &)> cb) const =0
     
    - - - - - -

    -Private Attributes

    ade::CoordT indices_
     
    bool bijective_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ CoordMap()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ead::CoordMap::CoordMap (ade::CoordT indices,
    bool bijective 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ access()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ead::CoordMap::access (std::function< void(const ade::MatrixT &)> cb) const
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ connect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::iCoordMap* ead::CoordMap::connect (const ade::iCoordMaprhs) const
    -
    -inlineoverridevirtual
    -
    - -

    Return matmul(this, rhs)

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ forward()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ead::CoordMap::forward (ade::CoordT::iterator out,
    ade::CoordT::const_iterator in 
    ) const
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ is_bijective()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool ead::CoordMap::is_bijective (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Return true if this instance maps coordinates/shapes bijectively.

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ reverse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    iCoordMap* ead::CoordMap::reverse (void ) const
    -
    -inlineoverridevirtual
    -
    -

    Return coordinate transformation with its forward and backward transformations reversed

    - -

    Implements ade::iCoordMap.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::string ead::CoordMap::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Return string representation of coordinate transformer.

    - -

    Implements ade::iCoordMap.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ bijective_

    - -
    -
    - - - - - -
    - - - - -
    bool ead::CoordMap::bijective_
    -
    -private
    -
    - -
    -
    - -

    ◆ indices_

    - -
    -
    - - - - - -
    - - - - -
    ade::CoordT ead::CoordMap::indices_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_coord_map__coll__graph.map b/docs/structead_1_1_coord_map__coll__graph.map deleted file mode 100644 index 1cf76e124..000000000 --- a/docs/structead_1_1_coord_map__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_coord_map__coll__graph.md5 b/docs/structead_1_1_coord_map__coll__graph.md5 deleted file mode 100644 index 95be0724b..000000000 --- a/docs/structead_1_1_coord_map__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -92a7477c42b7e090d841b4014c0c2ac1 \ No newline at end of file diff --git a/docs/structead_1_1_coord_map__coll__graph.png b/docs/structead_1_1_coord_map__coll__graph.png deleted file mode 100644 index 1c002591b..000000000 Binary files a/docs/structead_1_1_coord_map__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_coord_map__inherit__graph.map b/docs/structead_1_1_coord_map__inherit__graph.map deleted file mode 100644 index 1cf76e124..000000000 --- a/docs/structead_1_1_coord_map__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_coord_map__inherit__graph.md5 b/docs/structead_1_1_coord_map__inherit__graph.md5 deleted file mode 100644 index 5cf21ea75..000000000 --- a/docs/structead_1_1_coord_map__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -df8d9d096eb898cf8fc3f915e6af898f \ No newline at end of file diff --git a/docs/structead_1_1_coord_map__inherit__graph.png b/docs/structead_1_1_coord_map__inherit__graph.png deleted file mode 100644 index 1c002591b..000000000 Binary files a/docs/structead_1_1_coord_map__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_e_a_d_loader-members.html b/docs/structead_1_1_e_a_d_loader-members.html deleted file mode 100644 index 4bcd0ccd7..000000000 --- a/docs/structead_1_1_e_a_d_loader-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::EADLoader Member List
    -
    -
    - -

    This is the complete list of members for ead::EADLoader, including all inherited members.

    - - - - - -
    generate_coorder(std::string opname, std::vector< double > coord) overrideead::EADLoaderinlinevirtual
    generate_func(std::string opname, ade::ArgsT args) overrideead::EADLoaderinlinevirtual
    generate_leaf(const char *pb, ade::Shape shape, std::string typelabel, std::string label, bool is_const) overrideead::EADLoaderinlinevirtual
    generate_shaper(std::vector< double > coord) overrideead::EADLoaderinlinevirtual
    - - - - diff --git a/docs/structead_1_1_e_a_d_loader.html b/docs/structead_1_1_e_a_d_loader.html deleted file mode 100644 index 5b3d6702d..000000000 --- a/docs/structead_1_1_e_a_d_loader.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -Tenncor: ead::EADLoader Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::EADLoader Struct Referencefinal
    -
    -
    - -

    Unmarshal cortenn::Source as Variable containing context of source. - More...

    - -

    #include <serialize.hpp>

    -
    -Inheritance diagram for ead::EADLoader:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::EADLoader:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

    ade::TensptrT generate_leaf (const char *pb, ade::Shape shape, std::string typelabel, std::string label, bool is_const) override
     
    ade::TensptrT generate_func (std::string opname, ade::ArgsT args) override
     
    ade::CoordptrT generate_shaper (std::vector< double > coord) override
     
    ade::CoordptrT generate_coorder (std::string opname, std::vector< double > coord) override
     
    -

    Detailed Description

    -

    Unmarshal cortenn::Source as Variable containing context of source.

    -

    Member Function Documentation

    - -

    ◆ generate_coorder()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::CoordptrT ead::EADLoader::generate_coorder (std::string opname,
    std::vector< double > coord 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iLoader.

    - -
    -
    - -

    ◆ generate_func()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::EADLoader::generate_func (std::string opname,
    ade::ArgsT args 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iLoader.

    - -
    -
    - -

    ◆ generate_leaf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::EADLoader::generate_leaf (const char * pb,
    ade::Shape shape,
    std::string typelabel,
    std::string label,
    bool is_const 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iLoader.

    - -
    -
    - -

    ◆ generate_shaper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::CoordptrT ead::EADLoader::generate_shaper (std::vector< double > coord)
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iLoader.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_e_a_d_loader__coll__graph.map b/docs/structead_1_1_e_a_d_loader__coll__graph.map deleted file mode 100644 index ffd848987..000000000 --- a/docs/structead_1_1_e_a_d_loader__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_e_a_d_loader__coll__graph.md5 b/docs/structead_1_1_e_a_d_loader__coll__graph.md5 deleted file mode 100644 index 0d5e40867..000000000 --- a/docs/structead_1_1_e_a_d_loader__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bafd9c915b2a88e483340f534d0ab0d0 \ No newline at end of file diff --git a/docs/structead_1_1_e_a_d_loader__coll__graph.png b/docs/structead_1_1_e_a_d_loader__coll__graph.png deleted file mode 100644 index a121c2fe7..000000000 Binary files a/docs/structead_1_1_e_a_d_loader__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_e_a_d_loader__inherit__graph.map b/docs/structead_1_1_e_a_d_loader__inherit__graph.map deleted file mode 100644 index ffd848987..000000000 --- a/docs/structead_1_1_e_a_d_loader__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_e_a_d_loader__inherit__graph.md5 b/docs/structead_1_1_e_a_d_loader__inherit__graph.md5 deleted file mode 100644 index 3b2f3a2e1..000000000 --- a/docs/structead_1_1_e_a_d_loader__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e52621c3613d289f55a9ba90b208235b \ No newline at end of file diff --git a/docs/structead_1_1_e_a_d_loader__inherit__graph.png b/docs/structead_1_1_e_a_d_loader__inherit__graph.png deleted file mode 100644 index a121c2fe7..000000000 Binary files a/docs/structead_1_1_e_a_d_loader__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_e_a_d_saver-members.html b/docs/structead_1_1_e_a_d_saver-members.html deleted file mode 100644 index e6e5e5bc4..000000000 --- a/docs/structead_1_1_e_a_d_saver-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::EADSaver Member List
    -
    -
    - -

    This is the complete list of members for ead::EADSaver, including all inherited members.

    - - - - -
    save_coorder(const ade::CoordptrT &mapper) overrideead::EADSaverinlinevirtual
    save_leaf(bool &is_const, ade::iLeaf *leaf) overrideead::EADSaverinlinevirtual
    save_shaper(const ade::CoordptrT &mapper) overrideead::EADSaverinlinevirtual
    - - - - diff --git a/docs/structead_1_1_e_a_d_saver.html b/docs/structead_1_1_e_a_d_saver.html deleted file mode 100644 index 307d430ea..000000000 --- a/docs/structead_1_1_e_a_d_saver.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - -Tenncor: ead::EADSaver Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::EADSaver Struct Referencefinal
    -
    -
    - -

    #include <serialize.hpp>

    -
    -Inheritance diagram for ead::EADSaver:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::EADSaver:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

    std::string save_leaf (bool &is_const, ade::iLeaf *leaf) override
     
    std::vector< double > save_shaper (const ade::CoordptrT &mapper) override
     
    std::vector< double > save_coorder (const ade::CoordptrT &mapper) override
     
    -

    Member Function Documentation

    - -

    ◆ save_coorder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector<double> ead::EADSaver::save_coorder (const ade::CoordptrTmapper)
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iSaver.

    - -
    -
    - -

    ◆ save_leaf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    std::string ead::EADSaver::save_leaf (bool & is_const,
    ade::iLeafleaf 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iSaver.

    - -
    -
    - -

    ◆ save_shaper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector<double> ead::EADSaver::save_shaper (const ade::CoordptrTmapper)
    -
    -inlineoverridevirtual
    -
    - -

    Implements pbm::iSaver.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_e_a_d_saver__coll__graph.map b/docs/structead_1_1_e_a_d_saver__coll__graph.map deleted file mode 100644 index c7dee70ac..000000000 --- a/docs/structead_1_1_e_a_d_saver__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_e_a_d_saver__coll__graph.md5 b/docs/structead_1_1_e_a_d_saver__coll__graph.md5 deleted file mode 100644 index 44a2118ec..000000000 --- a/docs/structead_1_1_e_a_d_saver__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c283ddcb986f997217ef8ab2205ab41c \ No newline at end of file diff --git a/docs/structead_1_1_e_a_d_saver__coll__graph.png b/docs/structead_1_1_e_a_d_saver__coll__graph.png deleted file mode 100644 index 3437a6ebf..000000000 Binary files a/docs/structead_1_1_e_a_d_saver__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_e_a_d_saver__inherit__graph.map b/docs/structead_1_1_e_a_d_saver__inherit__graph.map deleted file mode 100644 index c7dee70ac..000000000 --- a/docs/structead_1_1_e_a_d_saver__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_e_a_d_saver__inherit__graph.md5 b/docs/structead_1_1_e_a_d_saver__inherit__graph.md5 deleted file mode 100644 index ef682bd92..000000000 --- a/docs/structead_1_1_e_a_d_saver__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4c8b8069244a4f3e69a929ee6b10668b \ No newline at end of file diff --git a/docs/structead_1_1_e_a_d_saver__inherit__graph.png b/docs/structead_1_1_e_a_d_saver__inherit__graph.png deleted file mode 100644 index 3437a6ebf..000000000 Binary files a/docs/structead_1_1_e_a_d_saver__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_eigen_mat_op-members.html b/docs/structead_1_1_eigen_mat_op-members.html deleted file mode 100644 index 57593cf54..000000000 --- a/docs/structead_1_1_eigen_mat_op-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::EigenMatOp< T, EigenSource, EigenArgs > Member List
    -
    -
    - -

    This is the complete list of members for ead::EigenMatOp< T, EigenSource, EigenArgs >, including all inherited members.

    - - - - - - - - -
    args_ead::EigenMatOp< T, EigenSource, EigenArgs >
    assign(void) overrideead::EigenMatOp< T, EigenSource, EigenArgs >inlinevirtual
    data_ead::EigenMatOp< T, EigenSource, EigenArgs >
    EigenMatOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)ead::EigenMatOp< T, EigenSource, EigenArgs >inline
    get_ptr(void) overrideead::EigenMatOp< T, EigenSource, EigenArgs >inlinevirtual
    matrixbase_ead::EigenMatOp< T, EigenSource, EigenArgs >
    ~iEigen(void)=defaultead::iEigen< T >virtual
    - - - - diff --git a/docs/structead_1_1_eigen_mat_op.html b/docs/structead_1_1_eigen_mat_op.html deleted file mode 100644 index 93ba6806c..000000000 --- a/docs/structead_1_1_eigen_mat_op.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -Tenncor: ead::EigenMatOp< T, EigenSource, EigenArgs > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::EigenMatOp< T, EigenSource, EigenArgs > Struct Template Referencefinal
    -
    -
    - -

    #include <eigen.hpp>

    -
    -Inheritance diagram for ead::EigenMatOp< T, EigenSource, EigenArgs >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::EigenMatOp< T, EigenSource, EigenArgs >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     EigenMatOp (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
     
    void assign (void) override
     
    T * get_ptr (void) override
     
    - Public Member Functions inherited from ead::iEigen< T >
    virtual ~iEigen (void)=default
     
    - - - - - - - -

    -Public Attributes

    EigenArgs args_
     
    EigenSource matrixbase_
     
    MatrixT< T > data_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ EigenMatOp()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::EigenMatOp< T, EigenSource, EigenArgs >::EigenMatOp (DimensionsT dims,
    std::function< EigenSource(EigenArgs &)> make_base,
    EigenArgs args 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ assign()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - -
    void ead::EigenMatOp< T, EigenSource, EigenArgs >::assign (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iEigen< T >.

    - -
    -
    - -

    ◆ get_ptr()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - -
    T* ead::EigenMatOp< T, EigenSource, EigenArgs >::get_ptr (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iEigen< T >.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    EigenArgs ead::EigenMatOp< T, EigenSource, EigenArgs >::args_
    -
    - -
    -
    - -

    ◆ data_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    MatrixT<T> ead::EigenMatOp< T, EigenSource, EigenArgs >::data_
    -
    - -
    -
    - -

    ◆ matrixbase_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    EigenSource ead::EigenMatOp< T, EigenSource, EigenArgs >::matrixbase_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_eigen_mat_op__coll__graph.map b/docs/structead_1_1_eigen_mat_op__coll__graph.map deleted file mode 100644 index 91621d0af..000000000 --- a/docs/structead_1_1_eigen_mat_op__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_eigen_mat_op__coll__graph.md5 b/docs/structead_1_1_eigen_mat_op__coll__graph.md5 deleted file mode 100644 index 0418cd78f..000000000 --- a/docs/structead_1_1_eigen_mat_op__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -96432d01c78cd0150d2f584819603707 \ No newline at end of file diff --git a/docs/structead_1_1_eigen_mat_op__coll__graph.png b/docs/structead_1_1_eigen_mat_op__coll__graph.png deleted file mode 100644 index 8cbaa61b0..000000000 Binary files a/docs/structead_1_1_eigen_mat_op__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_eigen_mat_op__inherit__graph.map b/docs/structead_1_1_eigen_mat_op__inherit__graph.map deleted file mode 100644 index 91621d0af..000000000 --- a/docs/structead_1_1_eigen_mat_op__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_eigen_mat_op__inherit__graph.md5 b/docs/structead_1_1_eigen_mat_op__inherit__graph.md5 deleted file mode 100644 index 770422901..000000000 --- a/docs/structead_1_1_eigen_mat_op__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -18bf9d7c2ef358446293a70a8ee0ea3d \ No newline at end of file diff --git a/docs/structead_1_1_eigen_mat_op__inherit__graph.png b/docs/structead_1_1_eigen_mat_op__inherit__graph.png deleted file mode 100644 index 8cbaa61b0..000000000 Binary files a/docs/structead_1_1_eigen_mat_op__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_eigen_tens_op-members.html b/docs/structead_1_1_eigen_tens_op-members.html deleted file mode 100644 index 451c5e6b2..000000000 --- a/docs/structead_1_1_eigen_tens_op-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::EigenTensOp< T, EigenSource, EigenArgs > Member List
    -
    -
    - -

    This is the complete list of members for ead::EigenTensOp< T, EigenSource, EigenArgs >, including all inherited members.

    - - - - - - - - -
    args_ead::EigenTensOp< T, EigenSource, EigenArgs >
    assign(void) overrideead::EigenTensOp< T, EigenSource, EigenArgs >inlinevirtual
    data_ead::EigenTensOp< T, EigenSource, EigenArgs >
    EigenTensOp(DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)ead::EigenTensOp< T, EigenSource, EigenArgs >inline
    get_ptr(void) overrideead::EigenTensOp< T, EigenSource, EigenArgs >inlinevirtual
    tensorbase_ead::EigenTensOp< T, EigenSource, EigenArgs >
    ~iEigen(void)=defaultead::iEigen< T >virtual
    - - - - diff --git a/docs/structead_1_1_eigen_tens_op.html b/docs/structead_1_1_eigen_tens_op.html deleted file mode 100644 index d22482d9e..000000000 --- a/docs/structead_1_1_eigen_tens_op.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -Tenncor: ead::EigenTensOp< T, EigenSource, EigenArgs > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::EigenTensOp< T, EigenSource, EigenArgs > Struct Template Referencefinal
    -
    -
    - -

    #include <eigen.hpp>

    -
    -Inheritance diagram for ead::EigenTensOp< T, EigenSource, EigenArgs >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::EigenTensOp< T, EigenSource, EigenArgs >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     EigenTensOp (DimensionsT dims, std::function< EigenSource(EigenArgs &)> make_base, EigenArgs args)
     
    void assign (void) override
     
    T * get_ptr (void) override
     
    - Public Member Functions inherited from ead::iEigen< T >
    virtual ~iEigen (void)=default
     
    - - - - - - - -

    -Public Attributes

    EigenArgs args_
     
    EigenSource tensorbase_
     
    TensorT< T > data_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ EigenTensOp()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::EigenTensOp< T, EigenSource, EigenArgs >::EigenTensOp (DimensionsT dims,
    std::function< EigenSource(EigenArgs &)> make_base,
    EigenArgs args 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ assign()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - -
    void ead::EigenTensOp< T, EigenSource, EigenArgs >::assign (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iEigen< T >.

    - -
    -
    - -

    ◆ get_ptr()

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - - -
    - - - - - - - - -
    T* ead::EigenTensOp< T, EigenSource, EigenArgs >::get_ptr (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iEigen< T >.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    EigenArgs ead::EigenTensOp< T, EigenSource, EigenArgs >::args_
    -
    - -
    -
    - -

    ◆ data_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    TensorT<T> ead::EigenTensOp< T, EigenSource, EigenArgs >::data_
    -
    - -
    -
    - -

    ◆ tensorbase_

    - -
    -
    -
    -template<typename T , typename EigenSource , typename EigenArgs >
    - - - - -
    EigenSource ead::EigenTensOp< T, EigenSource, EigenArgs >::tensorbase_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_eigen_tens_op__coll__graph.map b/docs/structead_1_1_eigen_tens_op__coll__graph.map deleted file mode 100644 index 1608b5dfe..000000000 --- a/docs/structead_1_1_eigen_tens_op__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_eigen_tens_op__coll__graph.md5 b/docs/structead_1_1_eigen_tens_op__coll__graph.md5 deleted file mode 100644 index e5b17b3b4..000000000 --- a/docs/structead_1_1_eigen_tens_op__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b8d3a2d8185d8edf5a23d75671da187f \ No newline at end of file diff --git a/docs/structead_1_1_eigen_tens_op__coll__graph.png b/docs/structead_1_1_eigen_tens_op__coll__graph.png deleted file mode 100644 index 94f2208d2..000000000 Binary files a/docs/structead_1_1_eigen_tens_op__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_eigen_tens_op__inherit__graph.map b/docs/structead_1_1_eigen_tens_op__inherit__graph.map deleted file mode 100644 index 1608b5dfe..000000000 --- a/docs/structead_1_1_eigen_tens_op__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_eigen_tens_op__inherit__graph.md5 b/docs/structead_1_1_eigen_tens_op__inherit__graph.md5 deleted file mode 100644 index d3def0b84..000000000 --- a/docs/structead_1_1_eigen_tens_op__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -200de0f5a887250ee50f455f74b55189 \ No newline at end of file diff --git a/docs/structead_1_1_eigen_tens_op__inherit__graph.png b/docs/structead_1_1_eigen_tens_op__inherit__graph.png deleted file mode 100644 index 94f2208d2..000000000 Binary files a/docs/structead_1_1_eigen_tens_op__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_func_arg-members.html b/docs/structead_1_1_func_arg-members.html deleted file mode 100644 index f408ee90d..000000000 --- a/docs/structead_1_1_func_arg-members.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::FuncArg< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::FuncArg< T >, including all inherited members.

    - - - - - - - - - - - -
    coorder_ead::FuncArg< T >private
    FuncArg(NodeptrT< T > node, ade::CoordptrT shaper, CoordptrT coorder)ead::FuncArg< T >inline
    get_coorder(void) constead::FuncArg< T >inline
    get_node(void) constead::FuncArg< T >inline
    get_shaper(void) constead::FuncArg< T >inline
    get_tensor(void) constead::FuncArg< T >inline
    map_io(void) constead::FuncArg< T >inline
    node_ead::FuncArg< T >private
    shape(void) constead::FuncArg< T >inline
    shaper_ead::FuncArg< T >private
    - - - - diff --git a/docs/structead_1_1_func_arg.html b/docs/structead_1_1_func_arg.html deleted file mode 100644 index aa3ab6375..000000000 --- a/docs/structead_1_1_func_arg.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - -Tenncor: ead::FuncArg< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::FuncArg< T > Struct Template Referencefinal
    -
    -
    - -

    #include <funcarg.hpp>

    - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     FuncArg (NodeptrT< T > node, ade::CoordptrT shaper, CoordptrT coorder)
     Construct FuncArg with specific coorder_ and map_io_ flag. More...
     
    ade::Shape shape (void) const
     Return shape of tensor filtered through coordinate mapper. More...
     
    ade::TensptrT get_tensor (void) const
     Return tensor being mapped. More...
     
    NodeptrT< T > get_node (void) const
     
    ade::CoordptrT get_shaper (void) const
     Return shaper coord map. More...
     
    bool map_io (void) const
     
    CoordptrT get_coorder (void) const
     Return coord map for coordinates. More...
     
    - - - - - - - - - - -

    -Private Attributes

    NodeptrT< T > node_
     Tensor reference. More...
     
    ade::CoordptrT shaper_
     Shape mapper. More...
     
    CoordptrT coorder_
     Coordinate mapper. More...
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ FuncArg()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::FuncArg< T >::FuncArg (NodeptrT< T > node,
    ade::CoordptrT shaper,
    CoordptrT coorder 
    )
    -
    -inline
    -
    - -

    Construct FuncArg with specific coorder_ and map_io_ flag.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_coorder()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    CoordptrT ead::FuncArg< T >::get_coorder (void ) const
    -
    -inline
    -
    - -

    Return coord map for coordinates.

    - -
    -
    - -

    ◆ get_node()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    NodeptrT<T> ead::FuncArg< T >::get_node (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ get_shaper()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::CoordptrT ead::FuncArg< T >::get_shaper (void ) const
    -
    -inline
    -
    - -

    Return shaper coord map.

    - -
    -
    - -

    ◆ get_tensor()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::FuncArg< T >::get_tensor (void ) const
    -
    -inline
    -
    - -

    Return tensor being mapped.

    - -
    -
    - -

    ◆ map_io()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    bool ead::FuncArg< T >::map_io (void ) const
    -
    -inline
    -
    -

    Return map_io_ flag, True if coorder accepts input coord and generated output, False otherwise

    - -
    -
    - -

    ◆ shape()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::Shape ead::FuncArg< T >::shape (void ) const
    -
    -inline
    -
    - -

    Return shape of tensor filtered through coordinate mapper.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ coorder_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    CoordptrT ead::FuncArg< T >::coorder_
    -
    -private
    -
    - -

    Coordinate mapper.

    - -
    -
    - -

    ◆ node_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    NodeptrT<T> ead::FuncArg< T >::node_
    -
    -private
    -
    - -

    Tensor reference.

    - -
    -
    - -

    ◆ shaper_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    ade::CoordptrT ead::FuncArg< T >::shaper_
    -
    -private
    -
    - -

    Shape mapper.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_func_convr-members.html b/docs/structead_1_1_func_convr-members.html deleted file mode 100644 index 455017eac..000000000 --- a/docs/structead_1_1_func_convr-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::FuncConvr< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::FuncConvr< T >, including all inherited members.

    - - - - - - - -
    args_ead::FuncConvr< T >
    build(const opt::ContexT &ctx, ade::Shape outshape) const overrideead::FuncConvr< T >inlinevirtual
    FuncConvr(std::string op, BuilderArgsT args)ead::FuncConvr< T >inline
    opcode_ead::FuncConvr< T >
    to_string(void) const overrideead::FuncConvr< T >inlinevirtual
    ~iConverter(void)=defaultopt::iConvertervirtual
    - - - - diff --git a/docs/structead_1_1_func_convr.html b/docs/structead_1_1_func_convr.html deleted file mode 100644 index d31272f3c..000000000 --- a/docs/structead_1_1_func_convr.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - -Tenncor: ead::FuncConvr< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::FuncConvr< T > Struct Template Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for ead::FuncConvr< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::FuncConvr< T >:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     FuncConvr (std::string op, BuilderArgsT args)
     
    ade::TensptrT build (const opt::ContexT &ctx, ade::Shape outshape) const override
     
    std::string to_string (void) const override
     
    - Public Member Functions inherited from opt::iConverter
    virtual ~iConverter (void)=default
     
    - - - - - -

    -Public Attributes

    ade::Opcode opcode_
     
    BuilderArgsT args_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ FuncConvr()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ead::FuncConvr< T >::FuncConvr (std::string op,
    BuilderArgsT args 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::FuncConvr< T >::build (const opt::ContexTctx,
    ade::Shape outshape 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::FuncConvr< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    -
    -template<typename T >
    - - - - -
    BuilderArgsT ead::FuncConvr< T >::args_
    -
    - -
    -
    - -

    ◆ opcode_

    - -
    -
    -
    -template<typename T >
    - - - - -
    ade::Opcode ead::FuncConvr< T >::opcode_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_func_convr__coll__graph.map b/docs/structead_1_1_func_convr__coll__graph.map deleted file mode 100644 index 049c8142a..000000000 --- a/docs/structead_1_1_func_convr__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structead_1_1_func_convr__coll__graph.md5 b/docs/structead_1_1_func_convr__coll__graph.md5 deleted file mode 100644 index cf85a2006..000000000 --- a/docs/structead_1_1_func_convr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d0b3654d8485d5bffb66208ff7f61bb7 \ No newline at end of file diff --git a/docs/structead_1_1_func_convr__coll__graph.png b/docs/structead_1_1_func_convr__coll__graph.png deleted file mode 100644 index a09d2b80c..000000000 Binary files a/docs/structead_1_1_func_convr__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_func_convr__inherit__graph.map b/docs/structead_1_1_func_convr__inherit__graph.map deleted file mode 100644 index f8931eb54..000000000 --- a/docs/structead_1_1_func_convr__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_func_convr__inherit__graph.md5 b/docs/structead_1_1_func_convr__inherit__graph.md5 deleted file mode 100644 index 3afb19b4d..000000000 --- a/docs/structead_1_1_func_convr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d2cee741702fed10c0811ba16aea1329 \ No newline at end of file diff --git a/docs/structead_1_1_func_convr__inherit__graph.png b/docs/structead_1_1_func_convr__inherit__graph.png deleted file mode 100644 index b0defcf3e..000000000 Binary files a/docs/structead_1_1_func_convr__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_functor-members.html b/docs/structead_1_1_functor-members.html deleted file mode 100644 index a13000132..000000000 --- a/docs/structead_1_1_functor-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::Functor< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::Functor< T >, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iFunctorinlinevirtual
    args_ead::Functor< T >private
    data(void) overrideead::Functor< T >inlinevirtual
    data(void) const overrideead::Functor< T >inlinevirtual
    Functor(const Functor< T > &other)=deleteead::Functor< T >
    Functor(ade::Opcode opcode, ade::Shape shape, ade::ArgsT args)ead::Functor< T >inlineprivate
    Functor(Functor< T > &&other)=defaultead::Functor< T >private
    get(ade::Opcode opcode, ArgsT< T > args)ead::Functor< T >static
    get(Functor< T > &&other)ead::Functor< T >inlinestatic
    get_children(void) const overrideead::Functor< T >inlinevirtual
    get_opcode(void) const overrideead::Functor< T >inlinevirtual
    initialize(void)ead::Functor< T >inline
    is_uninit(void) constead::Functor< T >inline
    nbytes(void) const overrideead::Functor< T >inlinevirtual
    opcode_ead::Functor< T >private
    operator=(const Functor< T > &other)=deleteead::Functor< T >
    operator=(Functor< T > &&other)=deleteead::Functor< T >
    out_ead::Functor< T >private
    shape(void) const overrideead::Functor< T >inlinevirtual
    shape_ead::Functor< T >private
    to_string(void) const overrideead::Functor< T >inlinevirtual
    type_code(void) const overrideead::Functor< T >inlinevirtual
    type_label(void) const overrideead::Functor< T >inlinevirtual
    uninitialize(void)ead::Functor< T >inline
    update(void) overrideead::Functor< T >inlinevirtual
    update_child(ade::FuncArg arg, size_t index) overrideead::Functor< T >inlinevirtual
    ~iData(void)=defaultade::iDatavirtual
    ~iFunctor(void)=defaultade::iFunctorvirtual
    ~iOperableFunc(void)=defaultade::iOperableFuncvirtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structead_1_1_functor.html b/docs/structead_1_1_functor.html deleted file mode 100644 index aaa3edc2d..000000000 --- a/docs/structead_1_1_functor.html +++ /dev/null @@ -1,980 +0,0 @@ - - - - - - - -Tenncor: ead::Functor< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    - -
    - -

    #include <functor.hpp>

    -
    -Inheritance diagram for ead::Functor< T >:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    -
    -Collaboration diagram for ead::Functor< T >:
    -
    -
    Collaboration graph
    - - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     Functor (const Functor< T > &other)=delete
     
    Functor< T > & operator= (const Functor< T > &other)=delete
     
    Functor< T > & operator= (Functor< T > &&other)=delete
     
    const ade::Shapeshape (void) const override
     Implementation of iTensor. More...
     
    std::string to_string (void) const override
     Implementation of iTensor. More...
     
    ade::Opcode get_opcode (void) const override
     Implementation of iFunctor. More...
     
    const ade::ArgsTget_children (void) const override
     Implementation of iFunctor. More...
     
    void update_child (ade::FuncArg arg, size_t index) override
     Implementation of iFunctor. More...
     
    void update (void) override
     Implementation of iOperableFunc. More...
     
    void * data (void) override
     Implementation of iData. More...
     
    const void * data (void) const override
     Implementation of iData. More...
     
    size_t type_code (void) const override
     Implementation of iData. More...
     
    std::string type_label (void) const override
     Implementation of iData. More...
     
    size_t nbytes (void) const override
     Implementation of iData. More...
     
    bool is_uninit (void) const
     
    void uninitialize (void)
     
    void initialize (void)
     
    - Public Member Functions inherited from ade::iOperableFunc
    virtual ~iOperableFunc (void)=default
     
    - Public Member Functions inherited from ade::iFunctor
    virtual ~iFunctor (void)=default
     
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    - - - - - -

    -Static Public Member Functions

    static Functor< T > * get (ade::Opcode opcode, ArgsT< T > args)
     
    static Functor< T > * get (Functor< T > &&other)
     
    - - - - - -

    -Private Member Functions

     Functor (ade::Opcode opcode, ade::Shape shape, ade::ArgsT args)
     
     Functor (Functor< T > &&other)=default
     
    - - - - - - - - - - - - -

    -Private Attributes

    EigenptrT< T > out_ = nullptr
     
    ade::Opcode opcode_
     Operation encoding. More...
     
    ade::Shape shape_
     Shape info built at construction time according to arguments. More...
     
    ade::ArgsT args_
     Tensor arguments (and children) More...
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ Functor() [1/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Functor< T >::Functor (const Functor< T > & other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ Functor() [2/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::Functor< T >::Functor (ade::Opcode opcode,
    ade::Shape shape,
    ade::ArgsT args 
    )
    -
    -inlineprivate
    -
    - -
    -
    - -

    ◆ Functor() [3/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Functor< T >::Functor (Functor< T > && other)
    -
    -privatedefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data() [1/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    void* ead::Functor< T >::data (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ data() [2/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    const void* ead::Functor< T >::data (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ get() [1/2]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Functor< T > * ead::Functor< T >::get (ade::Opcode opcode,
    ArgsT< T > args 
    )
    -
    -static
    -
    - -
    -
    - -

    ◆ get() [2/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    static Functor<T>* ead::Functor< T >::get (Functor< T > && other)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get_children()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    const ade::ArgsT& ead::Functor< T >::get_children (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    - -

    ◆ get_opcode()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::Opcode ead::Functor< T >::get_opcode (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    void ead::Functor< T >::initialize (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ is_uninit()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    bool ead::Functor< T >::is_uninit (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ nbytes()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    size_t ead::Functor< T >::nbytes (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ operator=() [1/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Functor<T>& ead::Functor< T >::operator= (const Functor< T > & other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ operator=() [2/2]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Functor<T>& ead::Functor< T >::operator= (Functor< T > && other)
    -
    -delete
    -
    - -
    -
    - -

    ◆ shape()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    const ade::Shape& ead::Functor< T >::shape (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    std::string ead::Functor< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ type_code()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    size_t ead::Functor< T >::type_code (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ type_label()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    std::string ead::Functor< T >::type_label (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ uninitialize()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    void ead::Functor< T >::uninitialize (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ update()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    void ead::Functor< T >::update (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iOperableFunc.

    - -

    Implements ade::iOperableFunc.

    - -
    -
    - -

    ◆ update_child()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ead::Functor< T >::update_child (ade::FuncArg arg,
    size_t index 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iFunctor.

    - -

    Implements ade::iFunctor.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    ade::ArgsT ead::Functor< T >::args_
    -
    -private
    -
    - -

    Tensor arguments (and children)

    - -
    -
    - -

    ◆ opcode_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    ade::Opcode ead::Functor< T >::opcode_
    -
    -private
    -
    - -

    Operation encoding.

    - -
    -
    - -

    ◆ out_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    EigenptrT<T> ead::Functor< T >::out_ = nullptr
    -
    -private
    -
    - -
    -
    - -

    ◆ shape_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    ade::Shape ead::Functor< T >::shape_
    -
    -private
    -
    - -

    Shape info built at construction time according to arguments.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_functor__coll__graph.map b/docs/structead_1_1_functor__coll__graph.map deleted file mode 100644 index 2bcb6e3cd..000000000 --- a/docs/structead_1_1_functor__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/structead_1_1_functor__coll__graph.md5 b/docs/structead_1_1_functor__coll__graph.md5 deleted file mode 100644 index fd805264f..000000000 --- a/docs/structead_1_1_functor__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -74779b71f5286b70182d1dcdfb97eb16 \ No newline at end of file diff --git a/docs/structead_1_1_functor__coll__graph.png b/docs/structead_1_1_functor__coll__graph.png deleted file mode 100644 index 6e6c67f4c..000000000 Binary files a/docs/structead_1_1_functor__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_functor__inherit__graph.map b/docs/structead_1_1_functor__inherit__graph.map deleted file mode 100644 index d659b599d..000000000 --- a/docs/structead_1_1_functor__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structead_1_1_functor__inherit__graph.md5 b/docs/structead_1_1_functor__inherit__graph.md5 deleted file mode 100644 index 73eddf085..000000000 --- a/docs/structead_1_1_functor__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -58a21406845a14dc0c33f0724a3fb56c \ No newline at end of file diff --git a/docs/structead_1_1_functor__inherit__graph.png b/docs/structead_1_1_functor__inherit__graph.png deleted file mode 100644 index ee0f721d3..000000000 Binary files a/docs/structead_1_1_functor__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_functor_node-members.html b/docs/structead_1_1_functor_node-members.html deleted file mode 100644 index f5550a438..000000000 --- a/docs/structead_1_1_functor_node-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::FunctorNode< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::FunctorNode< T >, including all inherited members.

    - - - - - - - - -
    data(void) overrideead::FunctorNode< T >inlinevirtual
    func_ead::FunctorNode< T >private
    FunctorNode(std::shared_ptr< Functor< T >> f)ead::FunctorNode< T >inline
    get_tensor(void) overrideead::FunctorNode< T >inlinevirtual
    shape(void)ead::iNode< T >inline
    update(void) overrideead::FunctorNode< T >inlinevirtual
    ~iNode(void)=defaultead::iNode< T >virtual
    - - - - diff --git a/docs/structead_1_1_functor_node.html b/docs/structead_1_1_functor_node.html deleted file mode 100644 index 78869d4e5..000000000 --- a/docs/structead_1_1_functor_node.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - -Tenncor: ead::FunctorNode< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::FunctorNode< T > Struct Template Referencefinal
    -
    -
    - -

    #include <functor.hpp>

    -
    -Inheritance diagram for ead::FunctorNode< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::FunctorNode< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Public Member Functions

     FunctorNode (std::shared_ptr< Functor< T >> f)
     
    T * data (void) override
     
    void update (void) override
     
    ade::TensptrT get_tensor (void) override
     
    - Public Member Functions inherited from ead::iNode< T >
    virtual ~iNode (void)=default
     
    ade::Shape shape (void)
     
    - - - -

    -Private Attributes

    std::shared_ptr< Functor< T > > func_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ FunctorNode()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ead::FunctorNode< T >::FunctorNode (std::shared_ptr< Functor< T >> f)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    T* ead::FunctorNode< T >::data (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ get_tensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::FunctorNode< T >::get_tensor (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ update()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    void ead::FunctorNode< T >::update (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ func_

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - -
    std::shared_ptr<Functor<T> > ead::FunctorNode< T >::func_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_functor_node__coll__graph.map b/docs/structead_1_1_functor_node__coll__graph.map deleted file mode 100644 index 61219dbc4..000000000 --- a/docs/structead_1_1_functor_node__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_functor_node__coll__graph.md5 b/docs/structead_1_1_functor_node__coll__graph.md5 deleted file mode 100644 index 215c53547..000000000 --- a/docs/structead_1_1_functor_node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7a16c6962d18ed350db44da0cc5629aa \ No newline at end of file diff --git a/docs/structead_1_1_functor_node__coll__graph.png b/docs/structead_1_1_functor_node__coll__graph.png deleted file mode 100644 index 377b1d1e5..000000000 Binary files a/docs/structead_1_1_functor_node__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_functor_node__inherit__graph.map b/docs/structead_1_1_functor_node__inherit__graph.map deleted file mode 100644 index 61219dbc4..000000000 --- a/docs/structead_1_1_functor_node__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_functor_node__inherit__graph.md5 b/docs/structead_1_1_functor_node__inherit__graph.md5 deleted file mode 100644 index 2bde9915a..000000000 --- a/docs/structead_1_1_functor_node__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -dec241ef81628e50d6b8fc2f883c27a5 \ No newline at end of file diff --git a/docs/structead_1_1_functor_node__inherit__graph.png b/docs/structead_1_1_functor_node__inherit__graph.png deleted file mode 100644 index 377b1d1e5..000000000 Binary files a/docs/structead_1_1_functor_node__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_gradient_builder-members.html b/docs/structead_1_1_gradient_builder-members.html deleted file mode 100644 index 1bd730237..000000000 --- a/docs/structead_1_1_gradient_builder-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::GradientBuilder< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::GradientBuilder< T >, including all inherited members.

    - - - - - - - - -
    add(ade::TensptrT &lhs, ade::TensptrT &rhs) const overrideead::GradientBuilder< T >inlinevirtual
    chain_rule(ade::FuncptrT op, const ade::TensptrT &local_der, ade::TensptrT supcomp_grad, size_t arg_idx) const overrideead::GradientBuilder< T >inlinevirtual
    derive(TensptrT root, TensptrT target) constade::iGradientBuilderinline
    get_const_one(ade::Shape shape) const overrideead::GradientBuilder< T >inlinevirtual
    get_const_zero(ade::Shape shape) const overrideead::GradientBuilder< T >inlinevirtual
    local_derivative(ade::FuncptrT op, size_t arg_idx) const overrideead::GradientBuilder< T >inlinevirtual
    ~iGradientBuilder(void)=defaultade::iGradientBuildervirtual
    - - - - diff --git a/docs/structead_1_1_gradient_builder.html b/docs/structead_1_1_gradient_builder.html deleted file mode 100644 index ea0bc270f..000000000 --- a/docs/structead_1_1_gradient_builder.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Tenncor: ead::GradientBuilder< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::GradientBuilder< T > Struct Template Referencefinal
    -
    -
    - -

    #include <grader.hpp>

    -
    -Inheritance diagram for ead::GradientBuilder< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::GradientBuilder< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    ade::TensptrT local_derivative (ade::FuncptrT op, size_t arg_idx) const override
     Implementation of iGradientBuilder. More...
     
    ade::TensptrT chain_rule (ade::FuncptrT op, const ade::TensptrT &local_der, ade::TensptrT supcomp_grad, size_t arg_idx) const override
     Implementation of iGradientBuilder. More...
     
    ade::TensptrT get_const_one (ade::Shape shape) const override
     Implementation of iGradientBuilder. More...
     
    ade::TensptrT get_const_zero (ade::Shape shape) const override
     Implementation of iGradientBuilder. More...
     
    ade::TensptrT add (ade::TensptrT &lhs, ade::TensptrT &rhs) const override
     Implementation of iGradientBuilder. More...
     
    - Public Member Functions inherited from ade::iGradientBuilder
    virtual ~iGradientBuilder (void)=default
     
    TensptrT derive (TensptrT root, TensptrT target) const
     Return derivative of root with respect to target. More...
     
    -

    Member Function Documentation

    - -

    ◆ add()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::GradientBuilder< T >::add (ade::TensptrTlhs,
    ade::TensptrTrhs 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iGradientBuilder.

    - -

    Implements ade::iGradientBuilder.

    - -
    -
    - -

    ◆ chain_rule()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::GradientBuilder< T >::chain_rule (ade::FuncptrT op,
    const ade::TensptrTlocal_der,
    ade::TensptrT supcomp_grad,
    size_t arg_idx 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iGradientBuilder.

    - -

    Implements ade::iGradientBuilder.

    - -
    -
    - -

    ◆ get_const_one()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::GradientBuilder< T >::get_const_one (ade::Shape shape) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iGradientBuilder.

    - -

    Implements ade::iGradientBuilder.

    - -
    -
    - -

    ◆ get_const_zero()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::GradientBuilder< T >::get_const_zero (ade::Shape shape) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iGradientBuilder.

    - -

    Implements ade::iGradientBuilder.

    - -
    -
    - -

    ◆ local_derivative()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::GradientBuilder< T >::local_derivative (ade::FuncptrT op,
    size_t arg_idx 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iGradientBuilder.

    - -

    Implements ade::iGradientBuilder.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_gradient_builder__coll__graph.map b/docs/structead_1_1_gradient_builder__coll__graph.map deleted file mode 100644 index 062ece3ab..000000000 --- a/docs/structead_1_1_gradient_builder__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_gradient_builder__coll__graph.md5 b/docs/structead_1_1_gradient_builder__coll__graph.md5 deleted file mode 100644 index c1889fb75..000000000 --- a/docs/structead_1_1_gradient_builder__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cc11e11338ed9216dcc5556bfdaf22d3 \ No newline at end of file diff --git a/docs/structead_1_1_gradient_builder__coll__graph.png b/docs/structead_1_1_gradient_builder__coll__graph.png deleted file mode 100644 index ef8cf0f92..000000000 Binary files a/docs/structead_1_1_gradient_builder__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_gradient_builder__inherit__graph.map b/docs/structead_1_1_gradient_builder__inherit__graph.map deleted file mode 100644 index 062ece3ab..000000000 --- a/docs/structead_1_1_gradient_builder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_gradient_builder__inherit__graph.md5 b/docs/structead_1_1_gradient_builder__inherit__graph.md5 deleted file mode 100644 index 952f7e2db..000000000 --- a/docs/structead_1_1_gradient_builder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c7a996bf7319dc2f1af807bff34c9472 \ No newline at end of file diff --git a/docs/structead_1_1_gradient_builder__inherit__graph.png b/docs/structead_1_1_gradient_builder__inherit__graph.png deleted file mode 100644 index ef8cf0f92..000000000 Binary files a/docs/structead_1_1_gradient_builder__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_group_convr-members.html b/docs/structead_1_1_group_convr-members.html deleted file mode 100644 index 1d39363fc..000000000 --- a/docs/structead_1_1_group_convr-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::GroupConvr< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::GroupConvr< T >, including all inherited members.

    - - - - - - - - -
    args_ead::GroupConvr< T >
    build(const opt::ContexT &ctx, ade::Shape outshape) const overrideead::GroupConvr< T >inlinevirtual
    group_ead::GroupConvr< T >
    GroupConvr(std::string group, BuilderArgsT args, std::string variadic)ead::GroupConvr< T >inline
    to_string(void) const overrideead::GroupConvr< T >inlinevirtual
    variadic_ead::GroupConvr< T >
    ~iConverter(void)=defaultopt::iConvertervirtual
    - - - - diff --git a/docs/structead_1_1_group_convr.html b/docs/structead_1_1_group_convr.html deleted file mode 100644 index 26eb7eece..000000000 --- a/docs/structead_1_1_group_convr.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - -Tenncor: ead::GroupConvr< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::GroupConvr< T > Struct Template Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for ead::GroupConvr< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::GroupConvr< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     GroupConvr (std::string group, BuilderArgsT args, std::string variadic)
     
    ade::TensptrT build (const opt::ContexT &ctx, ade::Shape outshape) const override
     
    std::string to_string (void) const override
     
    - Public Member Functions inherited from opt::iConverter
    virtual ~iConverter (void)=default
     
    - - - - - - - -

    -Public Attributes

    std::string group_
     
    BuilderArgsT args_
     
    std::string variadic_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ GroupConvr()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::GroupConvr< T >::GroupConvr (std::string group,
    BuilderArgsT args,
    std::string variadic 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::GroupConvr< T >::build (const opt::ContexTctx,
    ade::Shape outshape 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::GroupConvr< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    -
    -template<typename T >
    - - - - -
    BuilderArgsT ead::GroupConvr< T >::args_
    -
    - -
    -
    - -

    ◆ group_

    - -
    -
    -
    -template<typename T >
    - - - - -
    std::string ead::GroupConvr< T >::group_
    -
    - -
    -
    - -

    ◆ variadic_

    - -
    -
    -
    -template<typename T >
    - - - - -
    std::string ead::GroupConvr< T >::variadic_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_group_convr__coll__graph.map b/docs/structead_1_1_group_convr__coll__graph.map deleted file mode 100644 index 537a713d8..000000000 --- a/docs/structead_1_1_group_convr__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_group_convr__coll__graph.md5 b/docs/structead_1_1_group_convr__coll__graph.md5 deleted file mode 100644 index ada3a1209..000000000 --- a/docs/structead_1_1_group_convr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e9ce67f5a8944cd87516d78819ccc017 \ No newline at end of file diff --git a/docs/structead_1_1_group_convr__coll__graph.png b/docs/structead_1_1_group_convr__coll__graph.png deleted file mode 100644 index d81dbb8ee..000000000 Binary files a/docs/structead_1_1_group_convr__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_group_convr__inherit__graph.map b/docs/structead_1_1_group_convr__inherit__graph.map deleted file mode 100644 index 537a713d8..000000000 --- a/docs/structead_1_1_group_convr__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_group_convr__inherit__graph.md5 b/docs/structead_1_1_group_convr__inherit__graph.md5 deleted file mode 100644 index 43e6608b5..000000000 --- a/docs/structead_1_1_group_convr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7401e6f441dff105f8bf692660357e4d \ No newline at end of file diff --git a/docs/structead_1_1_group_convr__inherit__graph.png b/docs/structead_1_1_group_convr__inherit__graph.png deleted file mode 100644 index d81dbb8ee..000000000 Binary files a/docs/structead_1_1_group_convr__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_node_converters-members.html b/docs/structead_1_1_node_converters-members.html deleted file mode 100644 index b594299b1..000000000 --- a/docs/structead_1_1_node_converters-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::NodeConverters< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::NodeConverters< T >, including all inherited members.

    - - - - -
    builders_ead::NodeConverters< T >static
    NodeConverters(void)=deleteead::NodeConverters< T >
    to_node(ade::TensptrT tens)ead::NodeConverters< T >inlinestatic
    - - - - diff --git a/docs/structead_1_1_node_converters.html b/docs/structead_1_1_node_converters.html deleted file mode 100644 index 1fca23dbc..000000000 --- a/docs/structead_1_1_node_converters.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - -Tenncor: ead::NodeConverters< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::NodeConverters< T > Struct Template Referencefinal
    -
    -
    - -

    #include <inode.hpp>

    - - - - -

    -Public Member Functions

     NodeConverters (void)=delete
     
    - - - -

    -Static Public Member Functions

    static NodeptrT< T > to_node (ade::TensptrT tens)
     
    - - - -

    -Static Public Attributes

    static std::unordered_map< size_t, NodeBuilderF< T > > builders_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ NodeConverters()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::NodeConverters< T >::NodeConverters (void )
    -
    -delete
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ to_node()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    static NodeptrT<T> ead::NodeConverters< T >::to_node (ade::TensptrT tens)
    -
    -inlinestatic
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ builders_

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - -
    std::unordered_map< size_t, NodeBuilderF< T > > ead::NodeConverters< T >::builders_
    -
    -static
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_op_arg-members.html b/docs/structead_1_1_op_arg-members.html deleted file mode 100644 index 182f9f5d1..000000000 --- a/docs/structead_1_1_op_arg-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::OpArg< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::OpArg< T >, including all inherited members.

    - - - - - -
    coorder_ead::OpArg< T >
    data_ead::OpArg< T >
    OpArg(T *data, ade::Shape shape, CoordMap *coorder)ead::OpArg< T >inline
    shape_ead::OpArg< T >
    - - - - diff --git a/docs/structead_1_1_op_arg.html b/docs/structead_1_1_op_arg.html deleted file mode 100644 index 403a726ef..000000000 --- a/docs/structead_1_1_op_arg.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -Tenncor: ead::OpArg< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::OpArg< T > Struct Template Referencefinal
    -
    -
    - -

    #include <operator.hpp>

    -
    -Collaboration diagram for ead::OpArg< T >:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - -

    -Public Member Functions

     OpArg (T *data, ade::Shape shape, CoordMap *coorder)
     
    - - - - - - - -

    -Public Attributes

    T * data_
     
    ade::Shape shape_
     
    CoordMapcoorder_ = nullptr
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ OpArg()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::OpArg< T >::OpArg (T * data,
    ade::Shape shape,
    CoordMapcoorder 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ coorder_

    - -
    -
    -
    -template<typename T>
    - - - - -
    CoordMap* ead::OpArg< T >::coorder_ = nullptr
    -
    - -
    -
    - -

    ◆ data_

    - -
    -
    -
    -template<typename T>
    - - - - -
    T* ead::OpArg< T >::data_
    -
    - -
    -
    - -

    ◆ shape_

    - -
    -
    -
    -template<typename T>
    - - - - -
    ade::Shape ead::OpArg< T >::shape_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_op_arg__coll__graph.map b/docs/structead_1_1_op_arg__coll__graph.map deleted file mode 100644 index a0e34695c..000000000 --- a/docs/structead_1_1_op_arg__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/structead_1_1_op_arg__coll__graph.md5 b/docs/structead_1_1_op_arg__coll__graph.md5 deleted file mode 100644 index a1f42fe82..000000000 --- a/docs/structead_1_1_op_arg__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0c7ebf12371956b70227a34abccc87bb \ No newline at end of file diff --git a/docs/structead_1_1_op_arg__coll__graph.png b/docs/structead_1_1_op_arg__coll__graph.png deleted file mode 100644 index 6ba5681b7..000000000 Binary files a/docs/structead_1_1_op_arg__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_scalar_convr-members.html b/docs/structead_1_1_scalar_convr-members.html deleted file mode 100644 index ca57c8818..000000000 --- a/docs/structead_1_1_scalar_convr-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::ScalarConvr< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::ScalarConvr< T >, including all inherited members.

    - - - - - - -
    build(const opt::ContexT &ctx, ade::Shape outshape) const overrideead::ScalarConvr< T >inlinevirtual
    scalar_ead::ScalarConvr< T >
    ScalarConvr(double scalar)ead::ScalarConvr< T >inline
    to_string(void) const overrideead::ScalarConvr< T >inlinevirtual
    ~iConverter(void)=defaultopt::iConvertervirtual
    - - - - diff --git a/docs/structead_1_1_scalar_convr.html b/docs/structead_1_1_scalar_convr.html deleted file mode 100644 index a58c1584a..000000000 --- a/docs/structead_1_1_scalar_convr.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - -Tenncor: ead::ScalarConvr< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::ScalarConvr< T > Struct Template Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for ead::ScalarConvr< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::ScalarConvr< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     ScalarConvr (double scalar)
     
    ade::TensptrT build (const opt::ContexT &ctx, ade::Shape outshape) const override
     
    std::string to_string (void) const override
     
    - Public Member Functions inherited from opt::iConverter
    virtual ~iConverter (void)=default
     
    - - - -

    -Public Attributes

    double scalar_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ScalarConvr()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ead::ScalarConvr< T >::ScalarConvr (double scalar)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT ead::ScalarConvr< T >::build (const opt::ContexTctx,
    ade::Shape outshape 
    ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::ScalarConvr< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iConverter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ scalar_

    - -
    -
    -
    -template<typename T >
    - - - - -
    double ead::ScalarConvr< T >::scalar_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_scalar_convr__coll__graph.map b/docs/structead_1_1_scalar_convr__coll__graph.map deleted file mode 100644 index 00e34020e..000000000 --- a/docs/structead_1_1_scalar_convr__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_scalar_convr__coll__graph.md5 b/docs/structead_1_1_scalar_convr__coll__graph.md5 deleted file mode 100644 index c9bf5448e..000000000 --- a/docs/structead_1_1_scalar_convr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b8cbd6ea6f5ddcc4e78d0c9429c3d38d \ No newline at end of file diff --git a/docs/structead_1_1_scalar_convr__coll__graph.png b/docs/structead_1_1_scalar_convr__coll__graph.png deleted file mode 100644 index 342fa7823..000000000 Binary files a/docs/structead_1_1_scalar_convr__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_scalar_convr__inherit__graph.map b/docs/structead_1_1_scalar_convr__inherit__graph.map deleted file mode 100644 index 00e34020e..000000000 --- a/docs/structead_1_1_scalar_convr__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_scalar_convr__inherit__graph.md5 b/docs/structead_1_1_scalar_convr__inherit__graph.md5 deleted file mode 100644 index 72e950b30..000000000 --- a/docs/structead_1_1_scalar_convr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a23f56a696e636d017aa910b0318fa0e \ No newline at end of file diff --git a/docs/structead_1_1_scalar_convr__inherit__graph.png b/docs/structead_1_1_scalar_convr__inherit__graph.png deleted file mode 100644 index 342fa7823..000000000 Binary files a/docs/structead_1_1_scalar_convr__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_session-members.html b/docs/structead_1_1_session-members.html deleted file mode 100644 index d64a27d78..000000000 --- a/docs/structead_1_1_session-members.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::Session Member List
    -
    -
    - -

    This is the complete list of members for ead::Session, including all inherited members.

    - - - - - - - - - - -
    optimize(const opt::OptCtx &rules)ead::Sessioninline
    parents_ead::Session
    requirements_ead::Session
    stat_ead::Session
    track(ade::TensT roots) overrideead::Sessioninlinevirtual
    tracked_ead::Session
    update(TensSetT updated={}, TensSetT ignores={}) overrideead::Sessioninlinevirtual
    update_target(TensSetT target, TensSetT updated={}) overrideead::Sessioninlinevirtual
    ~iSession(void)=defaultead::iSessionvirtual
    - - - - diff --git a/docs/structead_1_1_session.html b/docs/structead_1_1_session.html deleted file mode 100644 index cd0c023e1..000000000 --- a/docs/structead_1_1_session.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - -Tenncor: ead::Session Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::Session Struct Referencefinal
    -
    -
    - -

    #include <session.hpp>

    -
    -Inheritance diagram for ead::Session:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::Session:
    -
    -
    Collaboration graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - - -

    -Public Member Functions

    void track (ade::TensT roots) override
     
    void update (TensSetT updated={}, TensSetT ignores={}) override
     
    void update_target (TensSetT target, TensSetT updated={}) override
     
    void optimize (const opt::OptCtx &rules)
     
    - Public Member Functions inherited from ead::iSession
    virtual ~iSession (void)=default
     
    - - - - - - - - - -

    -Public Attributes

    std::unordered_set< ade::TensptrTtracked_
     
    ade::GraphStat stat_
     
    std::unordered_map< ade::iTensor *, std::unordered_set< ade::iOperableFunc * > > parents_
     
    std::vector< std::pair< ade::iOperableFunc *, size_t > > requirements_
     
    -

    Member Function Documentation

    - -

    ◆ optimize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ead::Session::optimize (const opt::OptCtxrules)
    -
    -inline
    -
    - -
    -
    - -

    ◆ track()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ead::Session::track (ade::TensT roots)
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iSession.

    - -
    -
    - -

    ◆ update()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ead::Session::update (TensSetT updated = {},
    TensSetT ignores = {} 
    )
    -
    -inlineoverridevirtual
    -
    -

    update all nodes related to updated, if updated set is empty update all nodes related to the leaves (so everyone) ignore all nodes dependent on ignores including the ignored nodes

    - -

    Implements ead::iSession.

    - -
    -
    - -

    ◆ update_target()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ead::Session::update_target (TensSetT target,
    TensSetT updated = {} 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iSession.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ parents_

    - -
    -
    - - - - -
    std::unordered_map<ade::iTensor*, std::unordered_set<ade::iOperableFunc*> > ead::Session::parents_
    -
    - -
    -
    - -

    ◆ requirements_

    - -
    -
    - - - - -
    std::vector<std::pair<ade::iOperableFunc*,size_t> > ead::Session::requirements_
    -
    - -
    -
    - -

    ◆ stat_

    - -
    -
    - - - - -
    ade::GraphStat ead::Session::stat_
    -
    - -
    -
    - -

    ◆ tracked_

    - -
    -
    - - - - -
    std::unordered_set<ade::TensptrT> ead::Session::tracked_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_session__coll__graph.map b/docs/structead_1_1_session__coll__graph.map deleted file mode 100644 index 28c6946a2..000000000 --- a/docs/structead_1_1_session__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/structead_1_1_session__coll__graph.md5 b/docs/structead_1_1_session__coll__graph.md5 deleted file mode 100644 index 94f68557c..000000000 --- a/docs/structead_1_1_session__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4786a6ad97b7e4867ebc5cfdd5ced279 \ No newline at end of file diff --git a/docs/structead_1_1_session__coll__graph.png b/docs/structead_1_1_session__coll__graph.png deleted file mode 100644 index bbeb24443..000000000 Binary files a/docs/structead_1_1_session__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_session__inherit__graph.map b/docs/structead_1_1_session__inherit__graph.map deleted file mode 100644 index 6408861fd..000000000 --- a/docs/structead_1_1_session__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_session__inherit__graph.md5 b/docs/structead_1_1_session__inherit__graph.md5 deleted file mode 100644 index 1c30e8da2..000000000 --- a/docs/structead_1_1_session__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7edc224d43803a888296d228b87bc848 \ No newline at end of file diff --git a/docs/structead_1_1_session__inherit__graph.png b/docs/structead_1_1_session__inherit__graph.png deleted file mode 100644 index 926345eec..000000000 Binary files a/docs/structead_1_1_session__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_size_t-members.html b/docs/structead_1_1_size_t-members.html deleted file mode 100644 index 686f2c882..000000000 --- a/docs/structead_1_1_size_t-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::SizeT Member List
    -
    -
    - -

    This is the complete list of members for ead::SizeT, including all inherited members.

    - - - -
    dead::SizeT
    operator size_t() constead::SizeTinline
    - - - - diff --git a/docs/structead_1_1_size_t.html b/docs/structead_1_1_size_t.html deleted file mode 100644 index 04d0b806f..000000000 --- a/docs/structead_1_1_size_t.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Tenncor: ead::SizeT Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::SizeT Struct Reference
    -
    -
    - -

    #include <session.hpp>

    - - - - -

    -Public Member Functions

     operator size_t () const
     
    - - - -

    -Public Attributes

    size_t d = 0
     
    -

    Member Function Documentation

    - -

    ◆ operator size_t()

    - -
    -
    - - - - - -
    - - - - - - - -
    ead::SizeT::operator size_t () const
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ d

    - -
    -
    - - - - -
    size_t ead::SizeT::d = 0
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_traveler-members.html b/docs/structead_1_1_traveler-members.html deleted file mode 100644 index 45d17d03e..000000000 --- a/docs/structead_1_1_traveler-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::Traveler Member List
    -
    -
    - -

    This is the complete list of members for ead::Traveler, including all inherited members.

    - - - - - -
    visit(ade::iLeaf *leaf) overrideead::Travelerinlinevirtual
    visit(ade::iFunctor *func) overrideead::Travelerinlinevirtual
    visited_ead::Traveler
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structead_1_1_traveler.html b/docs/structead_1_1_traveler.html deleted file mode 100644 index f7a50a25b..000000000 --- a/docs/structead_1_1_traveler.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - -Tenncor: ead::Traveler Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::Traveler Struct Referencefinal
    -
    -
    - -

    #include <session.hpp>

    -
    -Inheritance diagram for ead::Traveler:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::Traveler:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

    void visit (ade::iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (ade::iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - -

    -Public Attributes

    TensSetT visited_
     
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ead::Traveler::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void ead::Traveler::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ visited_

    - -
    -
    - - - - -
    TensSetT ead::Traveler::visited_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_traveler__coll__graph.map b/docs/structead_1_1_traveler__coll__graph.map deleted file mode 100644 index 6ffcd74dc..000000000 --- a/docs/structead_1_1_traveler__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_traveler__coll__graph.md5 b/docs/structead_1_1_traveler__coll__graph.md5 deleted file mode 100644 index c6c94fe49..000000000 --- a/docs/structead_1_1_traveler__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2c1294e93ae89cd948fc29673d552987 \ No newline at end of file diff --git a/docs/structead_1_1_traveler__coll__graph.png b/docs/structead_1_1_traveler__coll__graph.png deleted file mode 100644 index 94a46ca94..000000000 Binary files a/docs/structead_1_1_traveler__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_traveler__inherit__graph.map b/docs/structead_1_1_traveler__inherit__graph.map deleted file mode 100644 index 6ffcd74dc..000000000 --- a/docs/structead_1_1_traveler__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_traveler__inherit__graph.md5 b/docs/structead_1_1_traveler__inherit__graph.md5 deleted file mode 100644 index 6f27f697f..000000000 --- a/docs/structead_1_1_traveler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4d04f9e09d19a4e630776f44eee8df68 \ No newline at end of file diff --git a/docs/structead_1_1_traveler__inherit__graph.png b/docs/structead_1_1_traveler__inherit__graph.png deleted file mode 100644 index 94a46ca94..000000000 Binary files a/docs/structead_1_1_traveler__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_variable-members.html b/docs/structead_1_1_variable-members.html deleted file mode 100644 index c203dc595..000000000 --- a/docs/structead_1_1_variable-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::Variable< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::Variable< T >, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iLeafinlinevirtual
    assign(void *input, age::_GENERATED_DTYPE dtype, ade::Shape shape)ead::Variable< T >inline
    data(void) overrideead::iLeaf< T >inlinevirtual
    data(void) const overrideead::iLeaf< T >inlinevirtual
    data_ead::iLeaf< T >protected
    get(T *ptr, ade::Shape shape, std::string label="")ead::Variable< T >static
    get(ade::Shape shape, std::string label="")ead::Variable< T >inlinestatic
    get(T scalar, ade::Shape shape, std::string label="")ead::Variable< T >inlinestatic
    get(std::vector< T > data, ade::Shape shape, std::string label="")ead::Variable< T >inlinestatic
    get(const Variable< T > &other)ead::Variable< T >inlinestatic
    get(Variable< T > &&other)ead::Variable< T >inlinestatic
    iLeaf(T *data, ade::Shape shape)ead::iLeaf< T >inlineprotected
    is_const(void) const overrideead::Variable< T >inlinevirtual
    label_ead::Variable< T >
    nbytes(void) const overrideead::iLeaf< T >inlinevirtual
    operator=(const Variable< T > &other)=defaultead::Variable< T >
    operator=(Variable< T > &&other)=defaultead::Variable< T >
    operator=(std::vector< T > input)ead::Variable< T >inline
    operator=(const TensorT< T > &input)ead::Variable< T >inline
    shape(void) const overrideead::iLeaf< T >inlinevirtual
    shape_ead::iLeaf< T >protected
    to_string(void) const overrideead::Variable< T >inlinevirtual
    type_code(void) const overrideead::iLeaf< T >inlinevirtual
    type_label(void) const overrideead::iLeaf< T >inlinevirtual
    Variable(T *data, ade::Shape shape, std::string label)ead::Variable< T >inlineprivate
    Variable(const Variable< T > &other)=defaultead::Variable< T >private
    Variable(Variable< T > &&other)=defaultead::Variable< T >private
    ~iData(void)=defaultade::iDatavirtual
    ~iLeaf(void)=defaultead::iLeaf< T >virtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structead_1_1_variable.html b/docs/structead_1_1_variable.html deleted file mode 100644 index 5e60570e1..000000000 --- a/docs/structead_1_1_variable.html +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - -Tenncor: ead::Variable< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    - -
    - -

    Leaf node containing data. - More...

    - -

    #include <variable.hpp>

    -
    -Inheritance diagram for ead::Variable< T >:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    -
    -Collaboration diagram for ead::Variable< T >:
    -
    -
    Collaboration graph
    - - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    Variable< T > & operator= (const Variable< T > &other)=default
     
    Variable< T > & operator= (Variable< T > &&other)=default
     
    Variable< T > & operator= (std::vector< T > input)
     Assign vectorized data to data source. More...
     
    Variable< T > & operator= (const TensorT< T > &input)
     
    void assign (void *input, age::_GENERATED_DTYPE dtype, ade::Shape shape)
     
    std::string to_string (void) const override
     Implementation of iTensor. More...
     
    bool is_const (void) const override
     
    - Public Member Functions inherited from ead::iLeaf< T >
    virtual ~iLeaf (void)=default
     
    const ade::Shapeshape (void) const override
     Implementation of iTensor. More...
     
    void * data (void) override
     Implementation of iData. More...
     
    const void * data (void) const override
     Implementation of iData. More...
     
    size_t type_code (void) const override
     Implementation of iData. More...
     
    std::string type_label (void) const override
     Implementation of iData. More...
     
    size_t nbytes (void) const override
     Implementation of iData. More...
     
    - Public Member Functions inherited from ade::iLeaf
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    - - - - - - - - - - - - - -

    -Static Public Member Functions

    static Variable< T > * get (T *ptr, ade::Shape shape, std::string label="")
     
    static Variable< T > * get (ade::Shape shape, std::string label="")
     
    static Variable< T > * get (T scalar, ade::Shape shape, std::string label="")
     
    static Variable< T > * get (std::vector< T > data, ade::Shape shape, std::string label="")
     
    static Variable< T > * get (const Variable< T > &other)
     
    static Variable< T > * get (Variable< T > &&other)
     
    - - - - -

    -Public Attributes

    std::string label_
     Label for distinguishing variable nodes. More...
     
    - - - - - - - -

    -Private Member Functions

     Variable (T *data, ade::Shape shape, std::string label)
     
     Variable (const Variable< T > &other)=default
     
     Variable (Variable< T > &&other)=default
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Protected Member Functions inherited from ead::iLeaf< T >
     iLeaf (T *data, ade::Shape shape)
     
    - Protected Attributes inherited from ead::iLeaf< T >
    TensorT< T > data_
     Data Source. More...
     
    ade::Shape shape_
     Shape utility to avoid excessive conversion between data_.dimensions() More...
     
    -

    Detailed Description

    -

    template<typename T>
    -struct ead::Variable< T >

    - -

    Leaf node containing data.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Variable() [1/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ead::Variable< T >::Variable (T * data,
    ade::Shape shape,
    std::string label 
    )
    -
    -inlineprivate
    -
    - -
    -
    - -

    ◆ Variable() [2/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Variable< T >::Variable (const Variable< T > & other)
    -
    -privatedefault
    -
    - -
    -
    - -

    ◆ Variable() [3/3]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    ead::Variable< T >::Variable (Variable< T > && other)
    -
    -privatedefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ assign()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void ead::Variable< T >::assign (void * input,
    age::_GENERATED_DTYPE dtype,
    ade::Shape shape 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ get() [1/6]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Variable< T > * ead::Variable< T >::get (T * ptr,
    ade::Shape shape,
    std::string label = "" 
    )
    -
    -static
    -
    - -
    -
    - -

    ◆ get() [2/6]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    static Variable<T>* ead::Variable< T >::get (ade::Shape shape,
    std::string label = "" 
    )
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get() [3/6]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static Variable<T>* ead::Variable< T >::get (scalar,
    ade::Shape shape,
    std::string label = "" 
    )
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get() [4/6]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    static Variable<T>* ead::Variable< T >::get (std::vector< T > data,
    ade::Shape shape,
    std::string label = "" 
    )
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get() [5/6]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    static Variable<T>* ead::Variable< T >::get (const Variable< T > & other)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ get() [6/6]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    static Variable<T>* ead::Variable< T >::get (Variable< T > && other)
    -
    -inlinestatic
    -
    - -
    -
    - -

    ◆ is_const()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    bool ead::Variable< T >::is_const (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iLeaf< T >.

    - -
    -
    - -

    ◆ operator=() [1/4]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Variable<T>& ead::Variable< T >::operator= (const Variable< T > & other)
    -
    -default
    -
    - -
    -
    - -

    ◆ operator=() [2/4]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Variable<T>& ead::Variable< T >::operator= (Variable< T > && other)
    -
    -default
    -
    - -
    -
    - -

    ◆ operator=() [3/4]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Variable<T>& ead::Variable< T >::operator= (std::vector< T > input)
    -
    -inline
    -
    - -

    Assign vectorized data to data source.

    - -
    -
    - -

    ◆ operator=() [4/4]

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    Variable<T>& ead::Variable< T >::operator= (const TensorT< T > & input)
    -
    -inline
    -
    - -
    -
    - -

    ◆ to_string()

    - -
    -
    -
    -template<typename T>
    - - - - - -
    - - - - - - - - -
    std::string ead::Variable< T >::to_string (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ label_

    - -
    -
    -
    -template<typename T>
    - - - - -
    std::string ead::Variable< T >::label_
    -
    - -

    Label for distinguishing variable nodes.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_variable__coll__graph.map b/docs/structead_1_1_variable__coll__graph.map deleted file mode 100644 index deb3eab20..000000000 --- a/docs/structead_1_1_variable__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/structead_1_1_variable__coll__graph.md5 b/docs/structead_1_1_variable__coll__graph.md5 deleted file mode 100644 index 9a519ffd0..000000000 --- a/docs/structead_1_1_variable__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0a47d529095111ee3998f9230c23ea40 \ No newline at end of file diff --git a/docs/structead_1_1_variable__coll__graph.png b/docs/structead_1_1_variable__coll__graph.png deleted file mode 100644 index b06cb61f0..000000000 Binary files a/docs/structead_1_1_variable__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_variable__inherit__graph.map b/docs/structead_1_1_variable__inherit__graph.map deleted file mode 100644 index cd6335884..000000000 --- a/docs/structead_1_1_variable__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structead_1_1_variable__inherit__graph.md5 b/docs/structead_1_1_variable__inherit__graph.md5 deleted file mode 100644 index a47e055b6..000000000 --- a/docs/structead_1_1_variable__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7d9a93e90b8558c19ae28b525e7c12dd \ No newline at end of file diff --git a/docs/structead_1_1_variable__inherit__graph.png b/docs/structead_1_1_variable__inherit__graph.png deleted file mode 100644 index 2a7459eb1..000000000 Binary files a/docs/structead_1_1_variable__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1_variable_node-members.html b/docs/structead_1_1_variable_node-members.html deleted file mode 100644 index ad04bbf07..000000000 --- a/docs/structead_1_1_variable_node-members.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::VariableNode< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::VariableNode< T >, including all inherited members.

    - - - - - - - - - - - -
    assign(T *input, ade::Shape shape)ead::VariableNode< T >inline
    assign(TensMapT< T > *tensmap)ead::VariableNode< T >inline
    data(void) overrideead::VariableNode< T >inlinevirtual
    get_label(void) constead::VariableNode< T >inline
    get_tensor(void) overrideead::VariableNode< T >inlinevirtual
    shape(void)ead::iNode< T >inline
    update(void) overrideead::VariableNode< T >inlinevirtual
    var_ead::VariableNode< T >private
    VariableNode(std::shared_ptr< Variable< T >> var)ead::VariableNode< T >inline
    ~iNode(void)=defaultead::iNode< T >virtual
    - - - - diff --git a/docs/structead_1_1_variable_node.html b/docs/structead_1_1_variable_node.html deleted file mode 100644 index dd16cee7b..000000000 --- a/docs/structead_1_1_variable_node.html +++ /dev/null @@ -1,372 +0,0 @@ - - - - - - - -Tenncor: ead::VariableNode< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::VariableNode< T > Struct Template Referencefinal
    -
    -
    - -

    #include <variable.hpp>

    -
    -Inheritance diagram for ead::VariableNode< T >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for ead::VariableNode< T >:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     VariableNode (std::shared_ptr< Variable< T >> var)
     
    T * data (void) override
     
    void update (void) override
     
    ade::TensptrT get_tensor (void) override
     
    void assign (T *input, ade::Shape shape)
     
    void assign (TensMapT< T > *tensmap)
     
    std::string get_label (void) const
     
    - Public Member Functions inherited from ead::iNode< T >
    virtual ~iNode (void)=default
     
    ade::Shape shape (void)
     
    - - - -

    -Private Attributes

    std::shared_ptr< Variable< T > > var_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ VariableNode()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ead::VariableNode< T >::VariableNode (std::shared_ptr< Variable< T >> var)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ assign() [1/2]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void ead::VariableNode< T >::assign (T * input,
    ade::Shape shape 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ assign() [2/2]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    void ead::VariableNode< T >::assign (TensMapT< T > * tensmap)
    -
    -inline
    -
    - -
    -
    - -

    ◆ data()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    T* ead::VariableNode< T >::data (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ get_label()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::VariableNode< T >::get_label (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ get_tensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ade::TensptrT ead::VariableNode< T >::get_tensor (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    - -

    ◆ update()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    void ead::VariableNode< T >::update (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implements ead::iNode< T >.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ var_

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - -
    std::shared_ptr<Variable<T> > ead::VariableNode< T >::var_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1_variable_node__coll__graph.map b/docs/structead_1_1_variable_node__coll__graph.map deleted file mode 100644 index 017a21c93..000000000 --- a/docs/structead_1_1_variable_node__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_variable_node__coll__graph.md5 b/docs/structead_1_1_variable_node__coll__graph.md5 deleted file mode 100644 index acb1a45cc..000000000 --- a/docs/structead_1_1_variable_node__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3cbc0de7f603a6311dfa8ff56519683e \ No newline at end of file diff --git a/docs/structead_1_1_variable_node__coll__graph.png b/docs/structead_1_1_variable_node__coll__graph.png deleted file mode 100644 index 747292716..000000000 Binary files a/docs/structead_1_1_variable_node__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1_variable_node__inherit__graph.map b/docs/structead_1_1_variable_node__inherit__graph.map deleted file mode 100644 index 017a21c93..000000000 --- a/docs/structead_1_1_variable_node__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structead_1_1_variable_node__inherit__graph.md5 b/docs/structead_1_1_variable_node__inherit__graph.md5 deleted file mode 100644 index f3b366f9e..000000000 --- a/docs/structead_1_1_variable_node__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a2495ffbf32cb74a796d00b1de2307ae \ No newline at end of file diff --git a/docs/structead_1_1_variable_node__inherit__graph.png b/docs/structead_1_1_variable_node__inherit__graph.png deleted file mode 100644 index 747292716..000000000 Binary files a/docs/structead_1_1_variable_node__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1i_eigen-members.html b/docs/structead_1_1i_eigen-members.html deleted file mode 100644 index c27074796..000000000 --- a/docs/structead_1_1i_eigen-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::iEigen< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::iEigen< T >, including all inherited members.

    - - - - -
    assign(void)=0ead::iEigen< T >pure virtual
    get_ptr(void)=0ead::iEigen< T >pure virtual
    ~iEigen(void)=defaultead::iEigen< T >virtual
    - - - - diff --git a/docs/structead_1_1i_eigen.html b/docs/structead_1_1i_eigen.html deleted file mode 100644 index 429eb787d..000000000 --- a/docs/structead_1_1i_eigen.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - -Tenncor: ead::iEigen< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::iEigen< T > Struct Template Referenceabstract
    -
    -
    - -

    #include <eigen.hpp>

    -
    -Inheritance diagram for ead::iEigen< T >:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

    virtual ~iEigen (void)=default
     
    virtual void assign (void)=0
     
    virtual T * get_ptr (void)=0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iEigen()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual ead::iEigen< T >::~iEigen (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ assign()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual void ead::iEigen< T >::assign (void )
    -
    -pure virtual
    -
    -
    - -

    ◆ get_ptr()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual T* ead::iEigen< T >::get_ptr (void )
    -
    -pure virtual
    -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1i_eigen__inherit__graph.map b/docs/structead_1_1i_eigen__inherit__graph.map deleted file mode 100644 index a374291d6..000000000 --- a/docs/structead_1_1i_eigen__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structead_1_1i_eigen__inherit__graph.md5 b/docs/structead_1_1i_eigen__inherit__graph.md5 deleted file mode 100644 index 8ad756311..000000000 --- a/docs/structead_1_1i_eigen__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -042809da10e0c83b8fe6f1d1da3e08b3 \ No newline at end of file diff --git a/docs/structead_1_1i_eigen__inherit__graph.png b/docs/structead_1_1i_eigen__inherit__graph.png deleted file mode 100644 index f91b62744..000000000 Binary files a/docs/structead_1_1i_eigen__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1i_leaf-members.html b/docs/structead_1_1i_leaf-members.html deleted file mode 100644 index a48ca5741..000000000 --- a/docs/structead_1_1i_leaf-members.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::iLeaf< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::iLeaf< T >, including all inherited members.

    - - - - - - - - - - - - - - - - -
    accept(iTraveler &visiter) overrideade::iLeafinlinevirtual
    data(void) overrideead::iLeaf< T >inlinevirtual
    data(void) const overrideead::iLeaf< T >inlinevirtual
    data_ead::iLeaf< T >protected
    iLeaf(T *data, ade::Shape shape)ead::iLeaf< T >inlineprotected
    is_const(void) const =0ead::iLeaf< T >pure virtual
    nbytes(void) const overrideead::iLeaf< T >inlinevirtual
    shape(void) const overrideead::iLeaf< T >inlinevirtual
    shape_ead::iLeaf< T >protected
    to_string(void) const =0ade::iTensorpure virtual
    type_code(void) const overrideead::iLeaf< T >inlinevirtual
    type_label(void) const overrideead::iLeaf< T >inlinevirtual
    ~iData(void)=defaultade::iDatavirtual
    ~iLeaf(void)=defaultead::iLeaf< T >virtual
    ~iTensor(void)=defaultade::iTensorvirtual
    - - - - diff --git a/docs/structead_1_1i_leaf.html b/docs/structead_1_1i_leaf.html deleted file mode 100644 index 26044d2bb..000000000 --- a/docs/structead_1_1i_leaf.html +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - -Tenncor: ead::iLeaf< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::iLeaf< T > Struct Template Referenceabstract
    -
    -
    - -

    #include <ileaf.hpp>

    -
    -Inheritance diagram for ead::iLeaf< T >:
    -
    -
    Inheritance graph
    - - - - - - - -
    [legend]
    -
    -Collaboration diagram for ead::iLeaf< T >:
    -
    -
    Collaboration graph
    - - - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iLeaf (void)=default
     
    const ade::Shapeshape (void) const override
     Implementation of iTensor. More...
     
    void * data (void) override
     Implementation of iData. More...
     
    const void * data (void) const override
     Implementation of iData. More...
     
    size_t type_code (void) const override
     Implementation of iData. More...
     
    std::string type_label (void) const override
     Implementation of iData. More...
     
    size_t nbytes (void) const override
     Implementation of iData. More...
     
    virtual bool is_const (void) const =0
     
    - Public Member Functions inherited from ade::iLeaf
    void accept (iTraveler &visiter) override
     Implementation of iTensor. More...
     
    - Public Member Functions inherited from ade::iTensor
    virtual ~iTensor (void)=default
     
    virtual std::string to_string (void) const =0
     Return the string representation of the tensor. More...
     
    - Public Member Functions inherited from ade::iData
    virtual ~iData (void)=default
     
    - - - -

    -Protected Member Functions

     iLeaf (T *data, ade::Shape shape)
     
    - - - - - - - -

    -Protected Attributes

    TensorT< T > data_
     Data Source. More...
     
    ade::Shape shape_
     Shape utility to avoid excessive conversion between data_.dimensions() More...
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iLeaf()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual ead::iLeaf< T >::~iLeaf (void )
    -
    -virtualdefault
    -
    - -

    Reimplemented from ade::iLeaf.

    - -
    -
    - -

    ◆ iLeaf()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ead::iLeaf< T >::iLeaf (T * data,
    ade::Shape shape 
    )
    -
    -inlineprotected
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data() [1/2]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    void* ead::iLeaf< T >::data (void )
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ data() [2/2]

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    const void* ead::iLeaf< T >::data (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ is_const()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual bool ead::iLeaf< T >::is_const (void ) const
    -
    -pure virtual
    -
    - -

    Implemented in ead::Variable< T >, and ead::Constant< T >.

    - -
    -
    - -

    ◆ nbytes()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    size_t ead::iLeaf< T >::nbytes (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ shape()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    const ade::Shape& ead::iLeaf< T >::shape (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTensor.

    - -

    Implements ade::iTensor.

    - -
    -
    - -

    ◆ type_code()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    size_t ead::iLeaf< T >::type_code (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    - -

    ◆ type_label()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    std::string ead::iLeaf< T >::type_label (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iData.

    - -

    Implements ade::iData.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ data_

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - -
    TensorT<T> ead::iLeaf< T >::data_
    -
    -protected
    -
    - -

    Data Source.

    - -
    -
    - -

    ◆ shape_

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - -
    ade::Shape ead::iLeaf< T >::shape_
    -
    -protected
    -
    - -

    Shape utility to avoid excessive conversion between data_.dimensions()

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1i_leaf__coll__graph.map b/docs/structead_1_1i_leaf__coll__graph.map deleted file mode 100644 index 35ddeb08f..000000000 --- a/docs/structead_1_1i_leaf__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structead_1_1i_leaf__coll__graph.md5 b/docs/structead_1_1i_leaf__coll__graph.md5 deleted file mode 100644 index 546dd23b3..000000000 --- a/docs/structead_1_1i_leaf__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -093c67ec1427e740583c98eec1c5363e \ No newline at end of file diff --git a/docs/structead_1_1i_leaf__coll__graph.png b/docs/structead_1_1i_leaf__coll__graph.png deleted file mode 100644 index 4d64fbebb..000000000 Binary files a/docs/structead_1_1i_leaf__coll__graph.png and /dev/null differ diff --git a/docs/structead_1_1i_leaf__inherit__graph.map b/docs/structead_1_1i_leaf__inherit__graph.map deleted file mode 100644 index a43d4a920..000000000 --- a/docs/structead_1_1i_leaf__inherit__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/structead_1_1i_leaf__inherit__graph.md5 b/docs/structead_1_1i_leaf__inherit__graph.md5 deleted file mode 100644 index c1957ac1b..000000000 --- a/docs/structead_1_1i_leaf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8a6128eff6457f7d92d3e4e11d18eac4 \ No newline at end of file diff --git a/docs/structead_1_1i_leaf__inherit__graph.png b/docs/structead_1_1i_leaf__inherit__graph.png deleted file mode 100644 index 9ec801f08..000000000 Binary files a/docs/structead_1_1i_leaf__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1i_node-members.html b/docs/structead_1_1i_node-members.html deleted file mode 100644 index 068417ed6..000000000 --- a/docs/structead_1_1i_node-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::iNode< T > Member List
    -
    -
    - -

    This is the complete list of members for ead::iNode< T >, including all inherited members.

    - - - - - - -
    data(void)=0ead::iNode< T >pure virtual
    get_tensor(void)=0ead::iNode< T >pure virtual
    shape(void)ead::iNode< T >inline
    update(void)=0ead::iNode< T >pure virtual
    ~iNode(void)=defaultead::iNode< T >virtual
    - - - - diff --git a/docs/structead_1_1i_node.html b/docs/structead_1_1i_node.html deleted file mode 100644 index 05c0d6fc5..000000000 --- a/docs/structead_1_1i_node.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Tenncor: ead::iNode< T > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::iNode< T > Struct Template Referenceabstract
    -
    -
    - -

    #include <inode.hpp>

    -
    -Inheritance diagram for ead::iNode< T >:
    -
    -
    Inheritance graph
    - - - - - -
    [legend]
    - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iNode (void)=default
     
    ade::Shape shape (void)
     
    virtual T * data (void)=0
     
    virtual void update (void)=0
     
    virtual ade::TensptrT get_tensor (void)=0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iNode()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual ead::iNode< T >::~iNode (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ data()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual T* ead::iNode< T >::data (void )
    -
    -pure virtual
    -
    -
    - -

    ◆ get_tensor()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual ade::TensptrT ead::iNode< T >::get_tensor (void )
    -
    -pure virtual
    -
    -
    - -

    ◆ shape()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    ade::Shape ead::iNode< T >::shape (void )
    -
    -inline
    -
    - -
    -
    - -

    ◆ update()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    virtual void ead::iNode< T >::update (void )
    -
    -pure virtual
    -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1i_node__inherit__graph.map b/docs/structead_1_1i_node__inherit__graph.map deleted file mode 100644 index b247a8af4..000000000 --- a/docs/structead_1_1i_node__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/structead_1_1i_node__inherit__graph.md5 b/docs/structead_1_1i_node__inherit__graph.md5 deleted file mode 100644 index c85b2199b..000000000 --- a/docs/structead_1_1i_node__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -460bd0e77bed40509c844a68d0ecc464 \ No newline at end of file diff --git a/docs/structead_1_1i_node__inherit__graph.png b/docs/structead_1_1i_node__inherit__graph.png deleted file mode 100644 index 31b8b0512..000000000 Binary files a/docs/structead_1_1i_node__inherit__graph.png and /dev/null differ diff --git a/docs/structead_1_1i_session-members.html b/docs/structead_1_1i_session-members.html deleted file mode 100644 index 7853f7903..000000000 --- a/docs/structead_1_1i_session-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    ead::iSession Member List
    -
    -
    - -

    This is the complete list of members for ead::iSession, including all inherited members.

    - - - - - -
    track(ade::TensT roots)=0ead::iSessionpure virtual
    update(TensSetT updated={}, TensSetT ignores={})=0ead::iSessionpure virtual
    update_target(TensSetT target, TensSetT updated={})=0ead::iSessionpure virtual
    ~iSession(void)=defaultead::iSessionvirtual
    - - - - diff --git a/docs/structead_1_1i_session.html b/docs/structead_1_1i_session.html deleted file mode 100644 index 50fbccce7..000000000 --- a/docs/structead_1_1i_session.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - -Tenncor: ead::iSession Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    ead::iSession Struct Referenceabstract
    -
    -
    - -

    #include <session.hpp>

    -
    -Inheritance diagram for ead::iSession:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

    virtual ~iSession (void)=default
     
    virtual void track (ade::TensT roots)=0
     
    virtual void update (TensSetT updated={}, TensSetT ignores={})=0
     
    virtual void update_target (TensSetT target, TensSetT updated={})=0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iSession()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ead::iSession::~iSession (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ track()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void ead::iSession::track (ade::TensT roots)
    -
    -pure virtual
    -
    - -

    Implemented in dbg::InteractiveSession, and ead::Session.

    - -
    -
    - -

    ◆ update()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void ead::iSession::update (TensSetT updated = {},
    TensSetT ignores = {} 
    )
    -
    -pure virtual
    -
    -

    update all nodes related to updated, if updated set is empty update all nodes related to the leaves (so everyone) ignore all nodes dependent on ignores including the ignored nodes

    - -

    Implemented in dbg::InteractiveSession, and ead::Session.

    - -
    -
    - -

    ◆ update_target()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void ead::iSession::update_target (TensSetT target,
    TensSetT updated = {} 
    )
    -
    -pure virtual
    -
    - -

    Implemented in dbg::InteractiveSession, and ead::Session.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structead_1_1i_session__inherit__graph.map b/docs/structead_1_1i_session__inherit__graph.map deleted file mode 100644 index dbb166b17..000000000 --- a/docs/structead_1_1i_session__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structead_1_1i_session__inherit__graph.md5 b/docs/structead_1_1i_session__inherit__graph.md5 deleted file mode 100644 index 6dee283fd..000000000 --- a/docs/structead_1_1i_session__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2b40f93edd6dc232d216358508740c4d \ No newline at end of file diff --git a/docs/structead_1_1i_session__inherit__graph.png b/docs/structead_1_1i_session__inherit__graph.png deleted file mode 100644 index e54c4c2ac..000000000 Binary files a/docs/structead_1_1i_session__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_cand_arg-members.html b/docs/structopt_1_1_cand_arg-members.html deleted file mode 100644 index a842713cd..000000000 --- a/docs/structopt_1_1_cand_arg-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::CandArg Member List
    -
    -
    - -

    This is the complete list of members for opt::CandArg, including all inherited members.

    - - - - - -
    candidates_opt::CandArg
    coorder_opt::CandArg
    shaper_opt::CandArg
    tensor_opt::CandArg
    - - - - diff --git a/docs/structopt_1_1_cand_arg.html b/docs/structopt_1_1_cand_arg.html deleted file mode 100644 index 394e80f05..000000000 --- a/docs/structopt_1_1_cand_arg.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - -Tenncor: opt::CandArg Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::CandArg Struct Reference
    -
    -
    - -

    #include <candidate.hpp>

    - - - - - - - - - - -

    -Public Attributes

    ade::TensptrT tensor_
     
    CandsT candidates_
     
    ade::CoordptrT shaper_
     
    ade::CoordptrT coorder_
     
    -

    Member Data Documentation

    - -

    ◆ candidates_

    - -
    -
    - - - - -
    CandsT opt::CandArg::candidates_
    -
    - -
    -
    - -

    ◆ coorder_

    - -
    -
    - - - - -
    ade::CoordptrT opt::CandArg::coorder_
    -
    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - -
    ade::CoordptrT opt::CandArg::shaper_
    -
    - -
    -
    - -

    ◆ tensor_

    - -
    -
    - - - - -
    ade::TensptrT opt::CandArg::tensor_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_comm_hasher-members.html b/docs/structopt_1_1_comm_hasher-members.html deleted file mode 100644 index f8a3f85a0..000000000 --- a/docs/structopt_1_1_comm_hasher-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::CommHasher Member List
    -
    -
    - -

    This is the complete list of members for opt::CommHasher, including all inherited members.

    - - - -
    hasher_opt::CommHasher
    operator()(const SegVArgs &args) constopt::CommHasherinline
    - - - - diff --git a/docs/structopt_1_1_comm_hasher.html b/docs/structopt_1_1_comm_hasher.html deleted file mode 100644 index 61e93361b..000000000 --- a/docs/structopt_1_1_comm_hasher.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Tenncor: opt::CommHasher Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::CommHasher Struct Referencefinal
    -
    -
    - -

    #include <ivoter.hpp>

    -
    -Collaboration diagram for opt::CommHasher:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - -

    -Public Member Functions

    size_t operator() (const SegVArgs &args) const
     
    - - - -

    -Public Attributes

    OrdrHasher hasher_
     
    -

    Member Function Documentation

    - -

    ◆ operator()()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t opt::CommHasher::operator() (const SegVArgsargs) const
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ hasher_

    - -
    -
    - - - - -
    OrdrHasher opt::CommHasher::hasher_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_comm_hasher__coll__graph.map b/docs/structopt_1_1_comm_hasher__coll__graph.map deleted file mode 100644 index cfc2d6793..000000000 --- a/docs/structopt_1_1_comm_hasher__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_comm_hasher__coll__graph.md5 b/docs/structopt_1_1_comm_hasher__coll__graph.md5 deleted file mode 100644 index 89c119fde..000000000 --- a/docs/structopt_1_1_comm_hasher__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ba45a99d840f859992eedffc815bf17a \ No newline at end of file diff --git a/docs/structopt_1_1_comm_hasher__coll__graph.png b/docs/structopt_1_1_comm_hasher__coll__graph.png deleted file mode 100644 index dcc635ec9..000000000 Binary files a/docs/structopt_1_1_comm_hasher__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_comm_voter-members.html b/docs/structopt_1_1_comm_voter-members.html deleted file mode 100644 index 98c6a0110..000000000 --- a/docs/structopt_1_1_comm_voter-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::CommVoter Member List
    -
    -
    - -

    This is the complete list of members for opt::CommVoter, including all inherited members.

    - - - - - - - -
    args_opt::CommVoter
    CommVoter(std::string label)opt::CommVoterinline
    emplace(VoterArgsT args, Symbol sym) overrideopt::CommVoterinlinevirtual
    inspect(const CandArgsT &args) const overrideopt::CommVoterinlinevirtual
    label_opt::CommVoter
    ~iVoter(void)=defaultopt::iVotervirtual
    - - - - diff --git a/docs/structopt_1_1_comm_voter.html b/docs/structopt_1_1_comm_voter.html deleted file mode 100644 index 228e2a761..000000000 --- a/docs/structopt_1_1_comm_voter.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - -Tenncor: opt::CommVoter Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::CommVoter Struct Referencefinal
    -
    -
    - -

    #include <voter.hpp>

    -
    -Inheritance diagram for opt::CommVoter:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for opt::CommVoter:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     CommVoter (std::string label)
     
    void emplace (VoterArgsT args, Symbol sym) override
     
    CandsT inspect (const CandArgsT &args) const override
     
    - Public Member Functions inherited from opt::iVoter
    virtual ~iVoter (void)=default
     
    - - - - - -

    -Public Attributes

    std::string label_
     
    std::unordered_map< SegVArgs, Symbol, CommHasherargs_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ CommVoter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    opt::CommVoter::CommVoter (std::string label)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ emplace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void opt::CommVoter::emplace (VoterArgsT args,
    Symbol sym 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    - -

    ◆ inspect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CandsT opt::CommVoter::inspect (const CandArgsTargs) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    - - - - -
    std::unordered_map<SegVArgs,Symbol,CommHasher> opt::CommVoter::args_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string opt::CommVoter::label_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_comm_voter__coll__graph.map b/docs/structopt_1_1_comm_voter__coll__graph.map deleted file mode 100644 index d6a095a29..000000000 --- a/docs/structopt_1_1_comm_voter__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_comm_voter__coll__graph.md5 b/docs/structopt_1_1_comm_voter__coll__graph.md5 deleted file mode 100644 index b5bb52100..000000000 --- a/docs/structopt_1_1_comm_voter__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -127db2fd0f2ad1214c65199990560cd2 \ No newline at end of file diff --git a/docs/structopt_1_1_comm_voter__coll__graph.png b/docs/structopt_1_1_comm_voter__coll__graph.png deleted file mode 100644 index 9c76f6511..000000000 Binary files a/docs/structopt_1_1_comm_voter__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_comm_voter__inherit__graph.map b/docs/structopt_1_1_comm_voter__inherit__graph.map deleted file mode 100644 index d6a095a29..000000000 --- a/docs/structopt_1_1_comm_voter__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_comm_voter__inherit__graph.md5 b/docs/structopt_1_1_comm_voter__inherit__graph.md5 deleted file mode 100644 index 97e30e363..000000000 --- a/docs/structopt_1_1_comm_voter__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7afa095d340d07e9fa1e25e740cdb8e7 \ No newline at end of file diff --git a/docs/structopt_1_1_comm_voter__inherit__graph.png b/docs/structopt_1_1_comm_voter__inherit__graph.png deleted file mode 100644 index 9c76f6511..000000000 Binary files a/docs/structopt_1_1_comm_voter__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_matcher-members.html b/docs/structopt_1_1_matcher-members.html deleted file mode 100644 index 0f0756911..000000000 --- a/docs/structopt_1_1_matcher-members.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::Matcher Member List
    -
    -
    - -

    This is the complete list of members for opt::Matcher, including all inherited members.

    - - - - - - - - - - -
    candidates_opt::Matcher
    group_head_opt::Matcher
    Matcher(void)=defaultopt::Matcher
    Matcher(const VoterPool &voters)opt::Matcherinline
    scalarize_opt::Matcher
    visit(ade::iLeaf *leaf) overrideopt::Matcherinlinevirtual
    visit(ade::iFunctor *func) overrideopt::Matcherinlinevirtual
    voters_opt::Matcher
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structopt_1_1_matcher.html b/docs/structopt_1_1_matcher.html deleted file mode 100644 index 3e2d4d663..000000000 --- a/docs/structopt_1_1_matcher.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - -Tenncor: opt::Matcher Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::Matcher Struct Referencefinal
    -
    -
    - -

    #include <matcher.hpp>

    -
    -Inheritance diagram for opt::Matcher:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for opt::Matcher:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Public Member Functions

     Matcher (void)=default
     
     Matcher (const VoterPool &voters)
     
    void visit (ade::iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (ade::iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - - - - - -

    -Public Attributes

    VoterPool voters_
     
    std::unordered_map< ade::iTensor *, CandsTcandidates_
     
    tag::SubgraphAssocsT group_head_
     
    std::function< std::string(ade::iTensor *)> scalarize_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ Matcher() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    opt::Matcher::Matcher (void )
    -
    -default
    -
    - -
    -
    - -

    ◆ Matcher() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    opt::Matcher::Matcher (const VoterPoolvoters)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void opt::Matcher::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void opt::Matcher::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ candidates_

    - -
    -
    - - - - -
    std::unordered_map<ade::iTensor*,CandsT> opt::Matcher::candidates_
    -
    - -
    -
    - -

    ◆ group_head_

    - -
    -
    - - - - -
    tag::SubgraphAssocsT opt::Matcher::group_head_
    -
    - -
    -
    - -

    ◆ scalarize_

    - -
    -
    - - - - -
    std::function<std::string(ade::iTensor*)> opt::Matcher::scalarize_
    -
    - -
    -
    - -

    ◆ voters_

    - -
    -
    - - - - -
    VoterPool opt::Matcher::voters_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_matcher__coll__graph.map b/docs/structopt_1_1_matcher__coll__graph.map deleted file mode 100644 index 46b0c9a2b..000000000 --- a/docs/structopt_1_1_matcher__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structopt_1_1_matcher__coll__graph.md5 b/docs/structopt_1_1_matcher__coll__graph.md5 deleted file mode 100644 index 6058a624f..000000000 --- a/docs/structopt_1_1_matcher__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -498140ddf361c051852eaf3dc7c012f0 \ No newline at end of file diff --git a/docs/structopt_1_1_matcher__coll__graph.png b/docs/structopt_1_1_matcher__coll__graph.png deleted file mode 100644 index 7fe7492d4..000000000 Binary files a/docs/structopt_1_1_matcher__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_matcher__inherit__graph.map b/docs/structopt_1_1_matcher__inherit__graph.map deleted file mode 100644 index 89d7a8144..000000000 --- a/docs/structopt_1_1_matcher__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_matcher__inherit__graph.md5 b/docs/structopt_1_1_matcher__inherit__graph.md5 deleted file mode 100644 index 8e46663b7..000000000 --- a/docs/structopt_1_1_matcher__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6879d96e6bbe7dd02c782a0a216df3c6 \ No newline at end of file diff --git a/docs/structopt_1_1_matcher__inherit__graph.png b/docs/structopt_1_1_matcher__inherit__graph.png deleted file mode 100644 index 49a62dec0..000000000 Binary files a/docs/structopt_1_1_matcher__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_opt_ctx-members.html b/docs/structopt_1_1_opt_ctx-members.html deleted file mode 100644 index 093a5ee91..000000000 --- a/docs/structopt_1_1_opt_ctx-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::OptCtx Member List
    -
    -
    - -

    This is the complete list of members for opt::OptCtx, including all inherited members.

    - - - - -
    const_conv_opt::OptCtx
    converts_opt::OptCtx
    voters_opt::OptCtx
    - - - - diff --git a/docs/structopt_1_1_opt_ctx.html b/docs/structopt_1_1_opt_ctx.html deleted file mode 100644 index 884a5a92d..000000000 --- a/docs/structopt_1_1_opt_ctx.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Tenncor: opt::OptCtx Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::OptCtx Struct Reference
    -
    -
    - -

    #include <optimize.hpp>

    -
    -Collaboration diagram for opt::OptCtx:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Attributes

    VoterPool voters_
     
    CstConvertF const_conv_
     
    std::unordered_map< std::string, ConvptrTconverts_
     
    -

    Member Data Documentation

    - -

    ◆ const_conv_

    - -
    -
    - - - - -
    CstConvertF opt::OptCtx::const_conv_
    -
    - -
    -
    - -

    ◆ converts_

    - -
    -
    - - - - -
    std::unordered_map<std::string,ConvptrT> opt::OptCtx::converts_
    -
    - -
    -
    - -

    ◆ voters_

    - -
    -
    - - - - -
    VoterPool opt::OptCtx::voters_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_opt_ctx__coll__graph.map b/docs/structopt_1_1_opt_ctx__coll__graph.map deleted file mode 100644 index 22c8c9d81..000000000 --- a/docs/structopt_1_1_opt_ctx__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_opt_ctx__coll__graph.md5 b/docs/structopt_1_1_opt_ctx__coll__graph.md5 deleted file mode 100644 index c632e9829..000000000 --- a/docs/structopt_1_1_opt_ctx__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b18044542abecfa9dc0c671160494b9b \ No newline at end of file diff --git a/docs/structopt_1_1_opt_ctx__coll__graph.png b/docs/structopt_1_1_opt_ctx__coll__graph.png deleted file mode 100644 index c85f02ea8..000000000 Binary files a/docs/structopt_1_1_opt_ctx__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_ordr_hasher-members.html b/docs/structopt_1_1_ordr_hasher-members.html deleted file mode 100644 index cff1da0e8..000000000 --- a/docs/structopt_1_1_ordr_hasher-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::OrdrHasher Member List
    -
    -
    - -

    This is the complete list of members for opt::OrdrHasher, including all inherited members.

    - - - -
    hash_combine(size_t &seed, const VoterArgsT &args) constopt::OrdrHasherinline
    operator()(const VoterArgsT &args) constopt::OrdrHasherinline
    - - - - diff --git a/docs/structopt_1_1_ordr_hasher.html b/docs/structopt_1_1_ordr_hasher.html deleted file mode 100644 index 250afab23..000000000 --- a/docs/structopt_1_1_ordr_hasher.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -Tenncor: opt::OrdrHasher Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::OrdrHasher Struct Referencefinal
    -
    -
    - -

    #include <ivoter.hpp>

    - - - - - - -

    -Public Member Functions

    size_t operator() (const VoterArgsT &args) const
     
    void hash_combine (size_t &seed, const VoterArgsT &args) const
     
    -

    Member Function Documentation

    - -

    ◆ hash_combine()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void opt::OrdrHasher::hash_combine (size_t & seed,
    const VoterArgsTargs 
    ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator()()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t opt::OrdrHasher::operator() (const VoterArgsTargs) const
    -
    -inline
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_ordr_voter-members.html b/docs/structopt_1_1_ordr_voter-members.html deleted file mode 100644 index 9cfb8cf64..000000000 --- a/docs/structopt_1_1_ordr_voter-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::OrdrVoter Member List
    -
    -
    - -

    This is the complete list of members for opt::OrdrVoter, including all inherited members.

    - - - - - - - -
    args_opt::OrdrVoter
    emplace(VoterArgsT args, Symbol sym) overrideopt::OrdrVoterinlinevirtual
    inspect(const CandArgsT &args) const overrideopt::OrdrVoterinlinevirtual
    label_opt::OrdrVoter
    OrdrVoter(std::string label)opt::OrdrVoterinline
    ~iVoter(void)=defaultopt::iVotervirtual
    - - - - diff --git a/docs/structopt_1_1_ordr_voter.html b/docs/structopt_1_1_ordr_voter.html deleted file mode 100644 index 8bd80e39e..000000000 --- a/docs/structopt_1_1_ordr_voter.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - -Tenncor: opt::OrdrVoter Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::OrdrVoter Struct Referencefinal
    -
    -
    - -

    #include <voter.hpp>

    -
    -Inheritance diagram for opt::OrdrVoter:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for opt::OrdrVoter:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     OrdrVoter (std::string label)
     
    void emplace (VoterArgsT args, Symbol sym) override
     
    CandsT inspect (const CandArgsT &args) const override
     
    - Public Member Functions inherited from opt::iVoter
    virtual ~iVoter (void)=default
     
    - - - - - -

    -Public Attributes

    std::string label_
     
    std::unordered_map< VoterArgsT, Symbol, OrdrHasherargs_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ OrdrVoter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    opt::OrdrVoter::OrdrVoter (std::string label)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ emplace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void opt::OrdrVoter::emplace (VoterArgsT args,
    Symbol sym 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    - -

    ◆ inspect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CandsT opt::OrdrVoter::inspect (const CandArgsTargs) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    - - - - -
    std::unordered_map<VoterArgsT,Symbol,OrdrHasher> opt::OrdrVoter::args_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string opt::OrdrVoter::label_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_ordr_voter__coll__graph.map b/docs/structopt_1_1_ordr_voter__coll__graph.map deleted file mode 100644 index 2f4ecc143..000000000 --- a/docs/structopt_1_1_ordr_voter__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_ordr_voter__coll__graph.md5 b/docs/structopt_1_1_ordr_voter__coll__graph.md5 deleted file mode 100644 index a150709dd..000000000 --- a/docs/structopt_1_1_ordr_voter__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -431424c4e4c72d1d5b0938b458fe7e27 \ No newline at end of file diff --git a/docs/structopt_1_1_ordr_voter__coll__graph.png b/docs/structopt_1_1_ordr_voter__coll__graph.png deleted file mode 100644 index 74d458007..000000000 Binary files a/docs/structopt_1_1_ordr_voter__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_ordr_voter__inherit__graph.map b/docs/structopt_1_1_ordr_voter__inherit__graph.map deleted file mode 100644 index 2f4ecc143..000000000 --- a/docs/structopt_1_1_ordr_voter__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_ordr_voter__inherit__graph.md5 b/docs/structopt_1_1_ordr_voter__inherit__graph.md5 deleted file mode 100644 index 4644ec4e8..000000000 --- a/docs/structopt_1_1_ordr_voter__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e92a60836e778ef111e034660b2b50e0 \ No newline at end of file diff --git a/docs/structopt_1_1_ordr_voter__inherit__graph.png b/docs/structopt_1_1_ordr_voter__inherit__graph.png deleted file mode 100644 index 74d458007..000000000 Binary files a/docs/structopt_1_1_ordr_voter__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_rules_context-members.html b/docs/structopt_1_1_rules_context-members.html deleted file mode 100644 index 45b67efd0..000000000 --- a/docs/structopt_1_1_rules_context-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::RulesContext Member List
    -
    -
    - -

    This is the complete list of members for opt::RulesContext, including all inherited members.

    - - - -
    properties_opt::RulesContext
    symbols_opt::RulesContext
    - - - - diff --git a/docs/structopt_1_1_rules_context.html b/docs/structopt_1_1_rules_context.html deleted file mode 100644 index 5b4b74394..000000000 --- a/docs/structopt_1_1_rules_context.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Tenncor: opt::RulesContext Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::RulesContext Struct Referencefinal
    -
    -
    - -

    #include <parse.hpp>

    - - - - - - -

    -Public Attributes

    std::unordered_set< std::string > symbols_
     
    std::unordered_map< std::string, std::unordered_set< std::string > > properties_
     
    -

    Member Data Documentation

    - -

    ◆ properties_

    - -
    -
    - - - - -
    std::unordered_map<std::string, std::unordered_set<std::string> > opt::RulesContext::properties_
    -
    - -
    -
    - -

    ◆ symbols_

    - -
    -
    - - - - -
    std::unordered_set<std::string> opt::RulesContext::symbols_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_seg_v_args-members.html b/docs/structopt_1_1_seg_v_args-members.html deleted file mode 100644 index 24149942e..000000000 --- a/docs/structopt_1_1_seg_v_args-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::SegVArgs Member List
    -
    -
    - -

    This is the complete list of members for opt::SegVArgs, including all inherited members.

    - - - - - -
    anys_opt::SegVArgs
    branches_opt::SegVArgs
    scalars_opt::SegVArgs
    size(void) constopt::SegVArgsinline
    - - - - diff --git a/docs/structopt_1_1_seg_v_args.html b/docs/structopt_1_1_seg_v_args.html deleted file mode 100644 index bf289aaf2..000000000 --- a/docs/structopt_1_1_seg_v_args.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Tenncor: opt::SegVArgs Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::SegVArgs Struct Reference
    -
    -
    - -

    #include <ivoter.hpp>

    - - - - -

    -Public Member Functions

    size_t size (void) const
     
    - - - - - - - -

    -Public Attributes

    VoterArgsT scalars_
     
    VoterArgsT branches_
     
    VoterArgsT anys_
     
    -

    Member Function Documentation

    - -

    ◆ size()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t opt::SegVArgs::size (void ) const
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ anys_

    - -
    -
    - - - - -
    VoterArgsT opt::SegVArgs::anys_
    -
    - -
    -
    - -

    ◆ branches_

    - -
    -
    - - - - -
    VoterArgsT opt::SegVArgs::branches_
    -
    - -
    -
    - -

    ◆ scalars_

    - -
    -
    - - - - -
    VoterArgsT opt::SegVArgs::scalars_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_symbol-members.html b/docs/structopt_1_1_symbol-members.html deleted file mode 100644 index 434ca6c73..000000000 --- a/docs/structopt_1_1_symbol-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::Symbol Member List
    -
    -
    - -

    This is the complete list of members for opt::Symbol, including all inherited members.

    - - - -
    reference_opt::Symbol
    type_opt::Symbol
    - - - - diff --git a/docs/structopt_1_1_symbol.html b/docs/structopt_1_1_symbol.html deleted file mode 100644 index 7f5519598..000000000 --- a/docs/structopt_1_1_symbol.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Tenncor: opt::Symbol Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::Symbol Struct Referencefinal
    -
    -
    - -

    #include <candidate.hpp>

    - - - - - - -

    -Public Attributes

    CAND_TYPE type_
     
    std::string reference_
     
    -

    Member Data Documentation

    - -

    ◆ reference_

    - -
    -
    - - - - -
    std::string opt::Symbol::reference_
    -
    - -
    -
    - -

    ◆ type_

    - -
    -
    - - - - -
    CAND_TYPE opt::Symbol::type_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_symbol_hash-members.html b/docs/structopt_1_1_symbol_hash-members.html deleted file mode 100644 index 27324ce69..000000000 --- a/docs/structopt_1_1_symbol_hash-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::SymbolHash Member List
    -
    -
    - -

    This is the complete list of members for opt::SymbolHash, including all inherited members.

    - - -
    operator()(const Symbol &sym) constopt::SymbolHashinline
    - - - - diff --git a/docs/structopt_1_1_symbol_hash.html b/docs/structopt_1_1_symbol_hash.html deleted file mode 100644 index eb15131dd..000000000 --- a/docs/structopt_1_1_symbol_hash.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: opt::SymbolHash Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::SymbolHash Struct Referencefinal
    -
    -
    - -

    #include <candidate.hpp>

    - - - - -

    -Public Member Functions

    size_t operator() (const Symbol &sym) const
     
    -

    Member Function Documentation

    - -

    ◆ operator()()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t opt::SymbolHash::operator() (const Symbolsym) const
    -
    -inline
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_variadic_voter-members.html b/docs/structopt_1_1_variadic_voter-members.html deleted file mode 100644 index 96db882d6..000000000 --- a/docs/structopt_1_1_variadic_voter-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::VariadicVoter Member List
    -
    -
    - -

    This is the complete list of members for opt::VariadicVoter, including all inherited members.

    - - - - - - - - -
    args_opt::VariadicVoter
    emplace(VoterArgsT args, Symbol sym) overrideopt::VariadicVoterinlinevirtual
    inspect(const CandArgsT &args) const overrideopt::VariadicVoterinlinevirtual
    label_opt::VariadicVoter
    variadic_opt::VariadicVoter
    VariadicVoter(std::string label, std::string variadic)opt::VariadicVoterinline
    ~iVoter(void)=defaultopt::iVotervirtual
    - - - - diff --git a/docs/structopt_1_1_variadic_voter.html b/docs/structopt_1_1_variadic_voter.html deleted file mode 100644 index 57397cbd3..000000000 --- a/docs/structopt_1_1_variadic_voter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - -Tenncor: opt::VariadicVoter Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::VariadicVoter Struct Referencefinal
    -
    -
    - -

    #include <voter.hpp>

    -
    -Inheritance diagram for opt::VariadicVoter:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for opt::VariadicVoter:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

     VariadicVoter (std::string label, std::string variadic)
     
    void emplace (VoterArgsT args, Symbol sym) override
     
    CandsT inspect (const CandArgsT &args) const override
     
    - Public Member Functions inherited from opt::iVoter
    virtual ~iVoter (void)=default
     
    - - - - - - - -

    -Public Attributes

    std::string label_
     
    std::string variadic_
     
    std::unordered_map< SegVArgs, Symbol, CommHasherargs_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ VariadicVoter()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    opt::VariadicVoter::VariadicVoter (std::string label,
    std::string variadic 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ emplace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void opt::VariadicVoter::emplace (VoterArgsT args,
    Symbol sym 
    )
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    - -

    ◆ inspect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    CandsT opt::VariadicVoter::inspect (const CandArgsTargs) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements opt::iVoter.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ args_

    - -
    -
    - - - - -
    std::unordered_map<SegVArgs,Symbol,CommHasher> opt::VariadicVoter::args_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string opt::VariadicVoter::label_
    -
    - -
    -
    - -

    ◆ variadic_

    - -
    -
    - - - - -
    std::string opt::VariadicVoter::variadic_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_variadic_voter__coll__graph.map b/docs/structopt_1_1_variadic_voter__coll__graph.map deleted file mode 100644 index dcbdb71f4..000000000 --- a/docs/structopt_1_1_variadic_voter__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_variadic_voter__coll__graph.md5 b/docs/structopt_1_1_variadic_voter__coll__graph.md5 deleted file mode 100644 index 397679d93..000000000 --- a/docs/structopt_1_1_variadic_voter__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -84f5cc6e372bab0ca552afa3390cedd6 \ No newline at end of file diff --git a/docs/structopt_1_1_variadic_voter__coll__graph.png b/docs/structopt_1_1_variadic_voter__coll__graph.png deleted file mode 100644 index 4e4b8ff73..000000000 Binary files a/docs/structopt_1_1_variadic_voter__coll__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_variadic_voter__inherit__graph.map b/docs/structopt_1_1_variadic_voter__inherit__graph.map deleted file mode 100644 index dcbdb71f4..000000000 --- a/docs/structopt_1_1_variadic_voter__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1_variadic_voter__inherit__graph.md5 b/docs/structopt_1_1_variadic_voter__inherit__graph.md5 deleted file mode 100644 index 337d15fca..000000000 --- a/docs/structopt_1_1_variadic_voter__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -76939a271bfc1e0581f0a8fbc3da5bbd \ No newline at end of file diff --git a/docs/structopt_1_1_variadic_voter__inherit__graph.png b/docs/structopt_1_1_variadic_voter__inherit__graph.png deleted file mode 100644 index 4e4b8ff73..000000000 Binary files a/docs/structopt_1_1_variadic_voter__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1_voter_arg-members.html b/docs/structopt_1_1_voter_arg-members.html deleted file mode 100644 index b66655060..000000000 --- a/docs/structopt_1_1_voter_arg-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::VoterArg Member List
    -
    -
    - -

    This is the complete list of members for opt::VoterArg, including all inherited members.

    - - - - - - - -
    coorder_opt::VoterArg
    label_opt::VoterArg
    match(CtxsT &ctxs, const CandArg &arg) constopt::VoterArginline
    shaper_opt::VoterArg
    type_opt::VoterArg
    VoterArg(std::string label, ade::CoordptrT shaper, ade::CoordptrT coorder, SUBGRAPH_TYPE type)opt::VoterArginline
    - - - - diff --git a/docs/structopt_1_1_voter_arg.html b/docs/structopt_1_1_voter_arg.html deleted file mode 100644 index fdb8e241b..000000000 --- a/docs/structopt_1_1_voter_arg.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - -Tenncor: opt::VoterArg Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::VoterArg Struct Referencefinal
    -
    -
    - -

    #include <ivoter.hpp>

    - - - - - - -

    -Public Member Functions

     VoterArg (std::string label, ade::CoordptrT shaper, ade::CoordptrT coorder, SUBGRAPH_TYPE type)
     
    bool match (CtxsT &ctxs, const CandArg &arg) const
     
    - - - - - - - - - -

    -Public Attributes

    std::string label_
     
    ade::CoordptrT shaper_
     
    ade::CoordptrT coorder_
     
    SUBGRAPH_TYPE type_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ VoterArg()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    opt::VoterArg::VoterArg (std::string label,
    ade::CoordptrT shaper,
    ade::CoordptrT coorder,
    SUBGRAPH_TYPE type 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ match()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool opt::VoterArg::match (CtxsTctxs,
    const CandArgarg 
    ) const
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ coorder_

    - -
    -
    - - - - -
    ade::CoordptrT opt::VoterArg::coorder_
    -
    - -
    -
    - -

    ◆ label_

    - -
    -
    - - - - -
    std::string opt::VoterArg::label_
    -
    - -
    -
    - -

    ◆ shaper_

    - -
    -
    - - - - -
    ade::CoordptrT opt::VoterArg::shaper_
    -
    - -
    -
    - -

    ◆ type_

    - -
    -
    - - - - -
    SUBGRAPH_TYPE opt::VoterArg::type_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1_voter_pool-members.html b/docs/structopt_1_1_voter_pool-members.html deleted file mode 100644 index 630ff6716..000000000 --- a/docs/structopt_1_1_voter_pool-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::VoterPool Member List
    -
    -
    - -

    This is the complete list of members for opt::VoterPool, including all inherited members.

    - - - -
    branches_opt::VoterPool
    immutables_opt::VoterPool
    - - - - diff --git a/docs/structopt_1_1_voter_pool.html b/docs/structopt_1_1_voter_pool.html deleted file mode 100644 index 86d3fd962..000000000 --- a/docs/structopt_1_1_voter_pool.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Tenncor: opt::VoterPool Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::VoterPool Struct Reference
    -
    -
    - -

    #include <ivoter.hpp>

    - - - - - - -

    -Public Attributes

    std::unordered_set< std::string > immutables_
     
    std::unordered_map< std::string, VotptrTbranches_
     
    -

    Member Data Documentation

    - -

    ◆ branches_

    - -
    -
    - - - - -
    std::unordered_map<std::string,VotptrT> opt::VoterPool::branches_
    -
    - -
    -
    - -

    ◆ immutables_

    - -
    -
    - - - - -
    std::unordered_set<std::string> opt::VoterPool::immutables_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1i_converter-members.html b/docs/structopt_1_1i_converter-members.html deleted file mode 100644 index 2f687314f..000000000 --- a/docs/structopt_1_1i_converter-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::iConverter Member List
    -
    -
    - -

    This is the complete list of members for opt::iConverter, including all inherited members.

    - - - - -
    build(const ContexT &ctx, ade::Shape outshape) const =0opt::iConverterpure virtual
    to_string(void) const =0opt::iConverterpure virtual
    ~iConverter(void)=defaultopt::iConvertervirtual
    - - - - diff --git a/docs/structopt_1_1i_converter.html b/docs/structopt_1_1i_converter.html deleted file mode 100644 index a0743ecf9..000000000 --- a/docs/structopt_1_1i_converter.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -Tenncor: opt::iConverter Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::iConverter Struct Referenceabstract
    -
    -
    - -

    #include <iconverter.hpp>

    -
    -Inheritance diagram for opt::iConverter:
    -
    -
    Inheritance graph
    - - - - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

    virtual ~iConverter (void)=default
     
    virtual ade::TensptrT build (const ContexT &ctx, ade::Shape outshape) const =0
     
    virtual std::string to_string (void) const =0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iConverter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual opt::iConverter::~iConverter (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual ade::TensptrT opt::iConverter::build (const ContexTctx,
    ade::Shape outshape 
    ) const
    -
    -pure virtual
    -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::string opt::iConverter::to_string (void ) const
    -
    -pure virtual
    -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1i_converter__inherit__graph.map b/docs/structopt_1_1i_converter__inherit__graph.map deleted file mode 100644 index 70bcfc548..000000000 --- a/docs/structopt_1_1i_converter__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/structopt_1_1i_converter__inherit__graph.md5 b/docs/structopt_1_1i_converter__inherit__graph.md5 deleted file mode 100644 index c185e9ab0..000000000 --- a/docs/structopt_1_1i_converter__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -332e01c90cee414df37805273598aac4 \ No newline at end of file diff --git a/docs/structopt_1_1i_converter__inherit__graph.png b/docs/structopt_1_1i_converter__inherit__graph.png deleted file mode 100644 index 77cb4c041..000000000 Binary files a/docs/structopt_1_1i_converter__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1i_converter_builder-members.html b/docs/structopt_1_1i_converter_builder-members.html deleted file mode 100644 index dbca59fe5..000000000 --- a/docs/structopt_1_1i_converter_builder-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::iConverterBuilder Member List
    -
    -
    - -

    This is the complete list of members for opt::iConverterBuilder, including all inherited members.

    - - - - - - -
    build(const ::Subgraph *sg, const RulesContext &ctx) const =0opt::iConverterBuilderpure virtual
    build_cconv(void) const =0opt::iConverterBuilderpure virtual
    coorderize(::NumList *list) const =0opt::iConverterBuilderpure virtual
    shaperize(::NumList *list) const =0opt::iConverterBuilderpure virtual
    ~iConverterBuilder(void)=defaultopt::iConverterBuildervirtual
    - - - - diff --git a/docs/structopt_1_1i_converter_builder.html b/docs/structopt_1_1i_converter_builder.html deleted file mode 100644 index 02a80b1c3..000000000 --- a/docs/structopt_1_1i_converter_builder.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Tenncor: opt::iConverterBuilder Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::iConverterBuilder Struct Referenceabstract
    -
    -
    - -

    #include <parse.hpp>

    -
    -Inheritance diagram for opt::iConverterBuilder:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - - - -

    -Public Member Functions

    virtual ~iConverterBuilder (void)=default
     
    virtual CstConvertF build_cconv (void) const =0
     
    virtual ConvptrT build (const ::Subgraph *sg, const RulesContext &ctx) const =0
     
    virtual ade::CoordptrT shaperize (::NumList *list) const =0
     
    virtual ade::CoordptrT coorderize (::NumList *list) const =0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iConverterBuilder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual opt::iConverterBuilder::~iConverterBuilder (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual ConvptrT opt::iConverterBuilder::build (const ::Subgraphsg,
    const RulesContextctx 
    ) const
    -
    -pure virtual
    -
    - -

    Implemented in ead::ConverterBuilder< T >.

    - -
    -
    - -

    ◆ build_cconv()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual CstConvertF opt::iConverterBuilder::build_cconv (void ) const
    -
    -pure virtual
    -
    - -

    Implemented in ead::ConverterBuilder< T >.

    - -
    -
    - -

    ◆ coorderize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::CoordptrT opt::iConverterBuilder::coorderize (::NumListlist) const
    -
    -pure virtual
    -
    - -

    Implemented in ead::ConverterBuilder< T >.

    - -
    -
    - -

    ◆ shaperize()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::CoordptrT opt::iConverterBuilder::shaperize (::NumListlist) const
    -
    -pure virtual
    -
    - -

    Implemented in ead::ConverterBuilder< T >.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1i_converter_builder__inherit__graph.map b/docs/structopt_1_1i_converter_builder__inherit__graph.map deleted file mode 100644 index fd799989d..000000000 --- a/docs/structopt_1_1i_converter_builder__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structopt_1_1i_converter_builder__inherit__graph.md5 b/docs/structopt_1_1i_converter_builder__inherit__graph.md5 deleted file mode 100644 index 570d8fbd2..000000000 --- a/docs/structopt_1_1i_converter_builder__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4c2ddf59c6c11cd952aad2bf12e8e9eb \ No newline at end of file diff --git a/docs/structopt_1_1i_converter_builder__inherit__graph.png b/docs/structopt_1_1i_converter_builder__inherit__graph.png deleted file mode 100644 index 30260a962..000000000 Binary files a/docs/structopt_1_1i_converter_builder__inherit__graph.png and /dev/null differ diff --git a/docs/structopt_1_1i_voter-members.html b/docs/structopt_1_1i_voter-members.html deleted file mode 100644 index 7b968ca40..000000000 --- a/docs/structopt_1_1i_voter-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    opt::iVoter Member List
    -
    -
    - -

    This is the complete list of members for opt::iVoter, including all inherited members.

    - - - - -
    emplace(VoterArgsT args, Symbol cand)=0opt::iVoterpure virtual
    inspect(const CandArgsT &args) const =0opt::iVoterpure virtual
    ~iVoter(void)=defaultopt::iVotervirtual
    - - - - diff --git a/docs/structopt_1_1i_voter.html b/docs/structopt_1_1i_voter.html deleted file mode 100644 index eff37b6f3..000000000 --- a/docs/structopt_1_1i_voter.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - -Tenncor: opt::iVoter Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    opt::iVoter Struct Referenceabstract
    -
    -
    - -

    #include <ivoter.hpp>

    -
    -Inheritance diagram for opt::iVoter:
    -
    -
    Inheritance graph
    - - - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

    virtual ~iVoter (void)=default
     
    virtual void emplace (VoterArgsT args, Symbol cand)=0
     
    virtual CandsT inspect (const CandArgsT &args) const =0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iVoter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual opt::iVoter::~iVoter (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ emplace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void opt::iVoter::emplace (VoterArgsT args,
    Symbol cand 
    )
    -
    -pure virtual
    -
    - -

    Implemented in opt::VariadicVoter, opt::CommVoter, and opt::OrdrVoter.

    - -
    -
    - -

    ◆ inspect()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual CandsT opt::iVoter::inspect (const CandArgsTargs) const
    -
    -pure virtual
    -
    - -

    Implemented in opt::VariadicVoter, opt::CommVoter, and opt::OrdrVoter.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structopt_1_1i_voter__inherit__graph.map b/docs/structopt_1_1i_voter__inherit__graph.map deleted file mode 100644 index ea50fc48e..000000000 --- a/docs/structopt_1_1i_voter__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/structopt_1_1i_voter__inherit__graph.md5 b/docs/structopt_1_1i_voter__inherit__graph.md5 deleted file mode 100644 index 5c804cb8d..000000000 --- a/docs/structopt_1_1i_voter__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ba82e08d3aec9c1f137c9a052b80e995 \ No newline at end of file diff --git a/docs/structopt_1_1i_voter__inherit__graph.png b/docs/structopt_1_1i_voter__inherit__graph.png deleted file mode 100644 index f767117df..000000000 Binary files a/docs/structopt_1_1i_voter__inherit__graph.png and /dev/null differ diff --git a/docs/structpbm_1_1_graph_info-members.html b/docs/structpbm_1_1_graph_info-members.html deleted file mode 100644 index 7896c450a..000000000 --- a/docs/structpbm_1_1_graph_info-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pbm::GraphInfo Member List
    -
    -
    - -

    This is the complete list of members for pbm::GraphInfo, including all inherited members.

    - - - -
    roots_pbm::GraphInfo
    tens_pbm::GraphInfo
    - - - - diff --git a/docs/structpbm_1_1_graph_info.html b/docs/structpbm_1_1_graph_info.html deleted file mode 100644 index 3ca7775d4..000000000 --- a/docs/structpbm_1_1_graph_info.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Tenncor: pbm::GraphInfo Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pbm::GraphInfo Struct Referencefinal
    -
    -
    - -

    Contains all information necessary to recreate labelled ADE graph. - More...

    - -

    #include <load.hpp>

    -
    -Collaboration diagram for pbm::GraphInfo:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Attributes

    std::unordered_set< ade::TensptrTroots_
     Set of all roots (Tensptrs without any parent) More...
     
    PathedTens tens_
     Labelled tensors. More...
     
    -

    Detailed Description

    -

    Contains all information necessary to recreate labelled ADE graph.

    -

    Member Data Documentation

    - -

    ◆ roots_

    - -
    -
    - - - - -
    std::unordered_set<ade::TensptrT> pbm::GraphInfo::roots_
    -
    - -

    Set of all roots (Tensptrs without any parent)

    - -
    -
    - -

    ◆ tens_

    - -
    -
    - - - - -
    PathedTens pbm::GraphInfo::tens_
    -
    - -

    Labelled tensors.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structpbm_1_1_graph_info__coll__graph.map b/docs/structpbm_1_1_graph_info__coll__graph.map deleted file mode 100644 index addf93741..000000000 --- a/docs/structpbm_1_1_graph_info__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structpbm_1_1_graph_info__coll__graph.md5 b/docs/structpbm_1_1_graph_info__coll__graph.md5 deleted file mode 100644 index 2920b3701..000000000 --- a/docs/structpbm_1_1_graph_info__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9b7c9d9eb985f7f377fd868144fab2e9 \ No newline at end of file diff --git a/docs/structpbm_1_1_graph_info__coll__graph.png b/docs/structpbm_1_1_graph_info__coll__graph.png deleted file mode 100644 index 900719960..000000000 Binary files a/docs/structpbm_1_1_graph_info__coll__graph.png and /dev/null differ diff --git a/docs/structpbm_1_1_graph_saver-members.html b/docs/structpbm_1_1_graph_saver-members.html deleted file mode 100644 index f45cf28dc..000000000 --- a/docs/structpbm_1_1_graph_saver-members.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pbm::GraphSaver< SAVER, > Member List
    -
    -
    - -

    This is the complete list of members for pbm::GraphSaver< SAVER, >, including all inherited members.

    - - - - - - - - - - - -
    funcs_pbm::GraphSaver< SAVER, >
    leaves_pbm::GraphSaver< SAVER, >
    save(cortenn::Graph &out, PathedMapT labels=PathedMapT())pbm::GraphSaver< SAVER, >inline
    save_data(cortenn::Source &out, ade::iLeaf *in)pbm::GraphSaver< SAVER, >inlineprivate
    saver_pbm::GraphSaver< SAVER, >private
    statpbm::GraphSaver< SAVER, >
    visit(ade::iLeaf *leaf) overridepbm::GraphSaver< SAVER, >inlinevirtual
    visit(ade::iFunctor *func) overridepbm::GraphSaver< SAVER, >inlinevirtual
    visited_pbm::GraphSaver< SAVER, >
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structpbm_1_1_graph_saver.html b/docs/structpbm_1_1_graph_saver.html deleted file mode 100644 index 11fc011af..000000000 --- a/docs/structpbm_1_1_graph_saver.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - - -Tenncor: pbm::GraphSaver< SAVER, > Struct Template Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pbm::GraphSaver< SAVER, > Struct Template Referencefinal
    -
    -
    - -

    Graph serialization traveler. - More...

    - -

    #include <save.hpp>

    -
    -Inheritance diagram for pbm::GraphSaver< SAVER, >:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for pbm::GraphSaver< SAVER, >:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - -

    -Public Member Functions

    void visit (ade::iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (ade::iFunctor *func) override
     Implementation of iTraveler. More...
     
    void save (cortenn::Graph &out, PathedMapT labels=PathedMapT())
     Marshal all equation graphs in roots vector to protobuf object. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - - - - - - - - - -

    -Public Attributes

    std::list< ade::iLeaf * > leaves_
     List of leaves visited (left to right) More...
     
    std::list< ade::iFunctor * > funcs_
     List of functions visited (by depth-first) More...
     
    std::unordered_set< ade::iTensor * > visited_
     Visited nodes. More...
     
    ade::GraphStat stat
     Internal traveler. More...
     
    - - - -

    -Private Member Functions

    void save_data (cortenn::Source &out, ade::iLeaf *in)
     
    - - - -

    -Private Attributes

    SAVER saver_
     
    -

    Detailed Description

    -

    template<typename SAVER, typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    -struct pbm::GraphSaver< SAVER, >

    - -

    Graph serialization traveler.

    -

    Member Function Documentation

    - -

    ◆ save()

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void pbm::GraphSaver< SAVER, >::save (cortenn::Graph & out,
    PathedMapT labels = PathedMapT() 
    )
    -
    -inline
    -
    - -

    Marshal all equation graphs in roots vector to protobuf object.

    - -
    -
    - -

    ◆ save_data()

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void pbm::GraphSaver< SAVER, >::save_data (cortenn::Source & out,
    ade::iLeafin 
    )
    -
    -inlineprivate
    -
    - -
    -
    - -

    ◆ visit() [1/2]

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - - -
    - - - - - - - - -
    void pbm::GraphSaver< SAVER, >::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - - -
    - - - - - - - - -
    void pbm::GraphSaver< SAVER, >::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ funcs_

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - -
    std::list<ade::iFunctor*> pbm::GraphSaver< SAVER, >::funcs_
    -
    - -

    List of functions visited (by depth-first)

    - -
    -
    - -

    ◆ leaves_

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - -
    std::list<ade::iLeaf*> pbm::GraphSaver< SAVER, >::leaves_
    -
    - -

    List of leaves visited (left to right)

    - -
    -
    - -

    ◆ saver_

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - - -
    - - - - -
    SAVER pbm::GraphSaver< SAVER, >::saver_
    -
    -private
    -
    - -
    -
    - -

    ◆ stat

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - -
    ade::GraphStat pbm::GraphSaver< SAVER, >::stat
    -
    - -

    Internal traveler.

    - -
    -
    - -

    ◆ visited_

    - -
    -
    -
    -template<typename SAVER , typename std::enable_if< std::is_base_of< iSaver, SAVER >::value >::type * = nullptr>
    - - - - -
    std::unordered_set<ade::iTensor*> pbm::GraphSaver< SAVER, >::visited_
    -
    - -

    Visited nodes.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structpbm_1_1_graph_saver__coll__graph.map b/docs/structpbm_1_1_graph_saver__coll__graph.map deleted file mode 100644 index bb88a74ac..000000000 --- a/docs/structpbm_1_1_graph_saver__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structpbm_1_1_graph_saver__coll__graph.md5 b/docs/structpbm_1_1_graph_saver__coll__graph.md5 deleted file mode 100644 index 94a45675b..000000000 --- a/docs/structpbm_1_1_graph_saver__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f45968ef6b88d3b8e38fa199fb5b6191 \ No newline at end of file diff --git a/docs/structpbm_1_1_graph_saver__coll__graph.png b/docs/structpbm_1_1_graph_saver__coll__graph.png deleted file mode 100644 index 9e5b5c1d6..000000000 Binary files a/docs/structpbm_1_1_graph_saver__coll__graph.png and /dev/null differ diff --git a/docs/structpbm_1_1_graph_saver__inherit__graph.map b/docs/structpbm_1_1_graph_saver__inherit__graph.map deleted file mode 100644 index edba3e394..000000000 --- a/docs/structpbm_1_1_graph_saver__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structpbm_1_1_graph_saver__inherit__graph.md5 b/docs/structpbm_1_1_graph_saver__inherit__graph.md5 deleted file mode 100644 index 04b90674e..000000000 --- a/docs/structpbm_1_1_graph_saver__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9d095ee49e68d2a7c7f1d252cb116b44 \ No newline at end of file diff --git a/docs/structpbm_1_1_graph_saver__inherit__graph.png b/docs/structpbm_1_1_graph_saver__inherit__graph.png deleted file mode 100644 index 6e831ba7f..000000000 Binary files a/docs/structpbm_1_1_graph_saver__inherit__graph.png and /dev/null differ diff --git a/docs/structpbm_1_1_pathed_tens-members.html b/docs/structpbm_1_1_pathed_tens-members.html deleted file mode 100644 index 1c42e9698..000000000 --- a/docs/structpbm_1_1_pathed_tens-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pbm::PathedTens Member List
    -
    -
    - -

    This is the complete list of members for pbm::PathedTens, including all inherited members.

    - - - - - - - - - -
    children_pbm::PathedTens
    get_labelled(StringsT path) constpbm::PathedTensinline
    get_labelled(StringsT::iterator path_begin, StringsT::iterator path_end) constpbm::PathedTensinline
    join(PathedTens *other)pbm::PathedTensinline
    set_labelled(StringsT path, ade::TensptrT tens)pbm::PathedTensinline
    set_labelled(StringsT::iterator path_begin, StringsT::iterator path_end, ade::TensptrT tens)pbm::PathedTensinline
    tens_pbm::PathedTens
    ~PathedTens(void)pbm::PathedTensinline
    - - - - diff --git a/docs/structpbm_1_1_pathed_tens.html b/docs/structpbm_1_1_pathed_tens.html deleted file mode 100644 index 45d63bcca..000000000 --- a/docs/structpbm_1_1_pathed_tens.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - - -Tenncor: pbm::PathedTens Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pbm::PathedTens Struct Referencefinal
    -
    -
    - -

    Tree node for labeling Tensptrs. - More...

    - -

    #include <load.hpp>

    - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     ~PathedTens (void)
     
    void join (PathedTens *other)
     
    ade::TensptrT get_labelled (StringsT path) const
     Return tensor associated with input path if found otherwise nullptr. More...
     
    void set_labelled (StringsT path, ade::TensptrT tens)
     Set input path to reference tensor. More...
     
    ade::TensptrT get_labelled (StringsT::iterator path_begin, StringsT::iterator path_end) const
     
    void set_labelled (StringsT::iterator path_begin, StringsT::iterator path_end, ade::TensptrT tens)
     Set path between iterators begin and end to reference tensor. More...
     
    - - - - - - - -

    -Public Attributes

    std::unordered_map< std::string, PathedTens * > children_
     Map of labels to branching nodes. More...
     
    std::unordered_map< std::string, ade::TensptrTtens_
     Map of labels to tensor leaves. More...
     
    -

    Detailed Description

    -

    Tree node for labeling Tensptrs.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~PathedTens()

    - -
    -
    - - - - - -
    - - - - - - - - -
    pbm::PathedTens::~PathedTens (void )
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_labelled() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    ade::TensptrT pbm::PathedTens::get_labelled (StringsT path) const
    -
    -inline
    -
    - -

    Return tensor associated with input path if found otherwise nullptr.

    - -
    -
    - -

    ◆ get_labelled() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ade::TensptrT pbm::PathedTens::get_labelled (StringsT::iterator path_begin,
    StringsT::iterator path_end 
    ) const
    -
    -inline
    -
    -

    Return tensor associated with path between iterators begin and end if found otherwise nullptr

    - -
    -
    - -

    ◆ join()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void pbm::PathedTens::join (PathedTensother)
    -
    -inline
    -
    -

    Grab all leaf and branch nodes from subtree root other Accounting for duplicate labels but not Tensptrs

    - -
    -
    - -

    ◆ set_labelled() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void pbm::PathedTens::set_labelled (StringsT path,
    ade::TensptrT tens 
    )
    -
    -inline
    -
    - -

    Set input path to reference tensor.

    - -
    -
    - -

    ◆ set_labelled() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void pbm::PathedTens::set_labelled (StringsT::iterator path_begin,
    StringsT::iterator path_end,
    ade::TensptrT tens 
    )
    -
    -inline
    -
    - -

    Set path between iterators begin and end to reference tensor.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ children_

    - -
    -
    - - - - -
    std::unordered_map<std::string,PathedTens*> pbm::PathedTens::children_
    -
    - -

    Map of labels to branching nodes.

    - -
    -
    - -

    ◆ tens_

    - -
    -
    - - - - -
    std::unordered_map<std::string,ade::TensptrT> pbm::PathedTens::tens_
    -
    - -

    Map of labels to tensor leaves.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structpbm_1_1i_loader-members.html b/docs/structpbm_1_1i_loader-members.html deleted file mode 100644 index ea9a7bc48..000000000 --- a/docs/structpbm_1_1i_loader-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pbm::iLoader Member List
    -
    -
    - -

    This is the complete list of members for pbm::iLoader, including all inherited members.

    - - - - - -
    generate_coorder(std::string opname, std::vector< double > coord)=0pbm::iLoaderpure virtual
    generate_func(std::string opname, ade::ArgsT args)=0pbm::iLoaderpure virtual
    generate_leaf(const char *data, ade::Shape shape, std::string typelabel, std::string label, bool is_const)=0pbm::iLoaderpure virtual
    generate_shaper(std::vector< double > coord)=0pbm::iLoaderpure virtual
    - - - - diff --git a/docs/structpbm_1_1i_loader.html b/docs/structpbm_1_1i_loader.html deleted file mode 100644 index b7a0be0db..000000000 --- a/docs/structpbm_1_1i_loader.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - -Tenncor: pbm::iLoader Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pbm::iLoader Struct Referenceabstract
    -
    -
    - -

    #include <data.hpp>

    -
    -Inheritance diagram for pbm::iLoader:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

    virtual ade::TensptrT generate_leaf (const char *data, ade::Shape shape, std::string typelabel, std::string label, bool is_const)=0
     
    virtual ade::TensptrT generate_func (std::string opname, ade::ArgsT args)=0
     
    virtual ade::CoordptrT generate_shaper (std::vector< double > coord)=0
     
    virtual ade::CoordptrT generate_coorder (std::string opname, std::vector< double > coord)=0
     
    -

    Member Function Documentation

    - -

    ◆ generate_coorder()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual ade::CoordptrT pbm::iLoader::generate_coorder (std::string opname,
    std::vector< double > coord 
    )
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADLoader.

    - -
    -
    - -

    ◆ generate_func()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual ade::TensptrT pbm::iLoader::generate_func (std::string opname,
    ade::ArgsT args 
    )
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADLoader.

    - -
    -
    - -

    ◆ generate_leaf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual ade::TensptrT pbm::iLoader::generate_leaf (const char * data,
    ade::Shape shape,
    std::string typelabel,
    std::string label,
    bool is_const 
    )
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADLoader.

    - -
    -
    - -

    ◆ generate_shaper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual ade::CoordptrT pbm::iLoader::generate_shaper (std::vector< double > coord)
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADLoader.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structpbm_1_1i_loader__inherit__graph.map b/docs/structpbm_1_1i_loader__inherit__graph.map deleted file mode 100644 index 8a5e4c0e8..000000000 --- a/docs/structpbm_1_1i_loader__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structpbm_1_1i_loader__inherit__graph.md5 b/docs/structpbm_1_1i_loader__inherit__graph.md5 deleted file mode 100644 index 8886d1ada..000000000 --- a/docs/structpbm_1_1i_loader__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bcd324fd73a139f336341df43a6810a1 \ No newline at end of file diff --git a/docs/structpbm_1_1i_loader__inherit__graph.png b/docs/structpbm_1_1i_loader__inherit__graph.png deleted file mode 100644 index 74b9bd4fc..000000000 Binary files a/docs/structpbm_1_1i_loader__inherit__graph.png and /dev/null differ diff --git a/docs/structpbm_1_1i_saver-members.html b/docs/structpbm_1_1i_saver-members.html deleted file mode 100644 index e2bb428d9..000000000 --- a/docs/structpbm_1_1i_saver-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pbm::iSaver Member List
    -
    -
    - -

    This is the complete list of members for pbm::iSaver, including all inherited members.

    - - - - -
    save_coorder(const ade::CoordptrT &mapper)=0pbm::iSaverpure virtual
    save_leaf(bool &is_const, ade::iLeaf *leaf)=0pbm::iSaverpure virtual
    save_shaper(const ade::CoordptrT &mapper)=0pbm::iSaverpure virtual
    - - - - diff --git a/docs/structpbm_1_1i_saver.html b/docs/structpbm_1_1i_saver.html deleted file mode 100644 index 81e72e3b9..000000000 --- a/docs/structpbm_1_1i_saver.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - -Tenncor: pbm::iSaver Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    pbm::iSaver Struct Referenceabstract
    -
    -
    - -

    #include <data.hpp>

    -
    -Inheritance diagram for pbm::iSaver:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

    virtual std::string save_leaf (bool &is_const, ade::iLeaf *leaf)=0
     
    virtual std::vector< double > save_shaper (const ade::CoordptrT &mapper)=0
     
    virtual std::vector< double > save_coorder (const ade::CoordptrT &mapper)=0
     
    -

    Member Function Documentation

    - -

    ◆ save_coorder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::vector<double> pbm::iSaver::save_coorder (const ade::CoordptrTmapper)
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADSaver.

    - -
    -
    - -

    ◆ save_leaf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual std::string pbm::iSaver::save_leaf (bool & is_const,
    ade::iLeafleaf 
    )
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADSaver.

    - -
    -
    - -

    ◆ save_shaper()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual std::vector<double> pbm::iSaver::save_shaper (const ade::CoordptrTmapper)
    -
    -pure virtual
    -
    - -

    Implemented in ead::EADSaver.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structpbm_1_1i_saver__inherit__graph.map b/docs/structpbm_1_1i_saver__inherit__graph.map deleted file mode 100644 index c4abb0467..000000000 --- a/docs/structpbm_1_1i_saver__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structpbm_1_1i_saver__inherit__graph.md5 b/docs/structpbm_1_1i_saver__inherit__graph.md5 deleted file mode 100644 index 10993752f..000000000 --- a/docs/structpbm_1_1i_saver__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cea4cebffa1d14f6943abb1bb2d747a2 \ No newline at end of file diff --git a/docs/structpbm_1_1i_saver__inherit__graph.png b/docs/structpbm_1_1i_saver__inherit__graph.png deleted file mode 100644 index 5e7aa8042..000000000 Binary files a/docs/structpbm_1_1i_saver__inherit__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_adjacent_groups-members.html b/docs/structtag_1_1_adjacent_groups-members.html deleted file mode 100644 index 6055ebb60..000000000 --- a/docs/structtag_1_1_adjacent_groups-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::AdjacentGroups Member List
    -
    -
    - -

    This is the complete list of members for tag::AdjacentGroups, including all inherited members.

    - - - - - - - -
    adjs_tag::AdjacentGroups
    uuid_gen_tag::AdjacentGroupsstatic
    visit(ade::iLeaf *leaf) overridetag::AdjacentGroupsinlinevirtual
    visit(ade::iFunctor *func) overridetag::AdjacentGroupsinlinevirtual
    visited_tag::AdjacentGroups
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structtag_1_1_adjacent_groups.html b/docs/structtag_1_1_adjacent_groups.html deleted file mode 100644 index 60406776d..000000000 --- a/docs/structtag_1_1_adjacent_groups.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - -Tenncor: tag::AdjacentGroups Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::AdjacentGroups Struct Referencefinal
    -
    -
    - -

    #include <group.hpp>

    -
    -Inheritance diagram for tag::AdjacentGroups:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for tag::AdjacentGroups:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - -

    -Public Member Functions

    void visit (ade::iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (ade::iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - -

    -Public Attributes

    std::unordered_set< ade::iTensor * > visited_
     
    std::unordered_map< ade::iTensor *, AGroupsTadjs_
     
    - - - -

    -Static Public Attributes

    static boost::uuids::random_generator uuid_gen_
     
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::AdjacentGroups::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::AdjacentGroups::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ adjs_

    - -
    -
    - - - - -
    std::unordered_map<ade::iTensor*,AGroupsT> tag::AdjacentGroups::adjs_
    -
    - -
    -
    - -

    ◆ uuid_gen_

    - -
    -
    - - - - - -
    - - - - -
    boost::uuids::random_generator tag::AdjacentGroups::uuid_gen_
    -
    -static
    -
    - -
    -
    - -

    ◆ visited_

    - -
    -
    - - - - -
    std::unordered_set<ade::iTensor*> tag::AdjacentGroups::visited_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_adjacent_groups__coll__graph.map b/docs/structtag_1_1_adjacent_groups__coll__graph.map deleted file mode 100644 index 473b60bf4..000000000 --- a/docs/structtag_1_1_adjacent_groups__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_adjacent_groups__coll__graph.md5 b/docs/structtag_1_1_adjacent_groups__coll__graph.md5 deleted file mode 100644 index 4ac9c2509..000000000 --- a/docs/structtag_1_1_adjacent_groups__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a0344c27f85749f4028e879b4be84d9e \ No newline at end of file diff --git a/docs/structtag_1_1_adjacent_groups__coll__graph.png b/docs/structtag_1_1_adjacent_groups__coll__graph.png deleted file mode 100644 index a0a7da0c6..000000000 Binary files a/docs/structtag_1_1_adjacent_groups__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_adjacent_groups__inherit__graph.map b/docs/structtag_1_1_adjacent_groups__inherit__graph.map deleted file mode 100644 index 473b60bf4..000000000 --- a/docs/structtag_1_1_adjacent_groups__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_adjacent_groups__inherit__graph.md5 b/docs/structtag_1_1_adjacent_groups__inherit__graph.md5 deleted file mode 100644 index 195aa54d9..000000000 --- a/docs/structtag_1_1_adjacent_groups__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -644ae220a4ff0076fd0999decf7a409b \ No newline at end of file diff --git a/docs/structtag_1_1_adjacent_groups__inherit__graph.png b/docs/structtag_1_1_adjacent_groups__inherit__graph.png deleted file mode 100644 index a0a7da0c6..000000000 Binary files a/docs/structtag_1_1_adjacent_groups__inherit__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_group_registry-members.html b/docs/structtag_1_1_group_registry-members.html deleted file mode 100644 index 5ac9cb374..000000000 --- a/docs/structtag_1_1_group_registry-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::GroupRegistry Member List
    -
    -
    - -

    This is the complete list of members for tag::GroupRegistry, including all inherited members.

    - - - - - -
    group_tag(ade::TensrefT tens, std::string tag)tag::GroupRegistryinline
    GroupRegistry(TagRegistry &registry=get_reg())tag::GroupRegistryinline
    groups_tag::GroupRegistry
    tag_reg_tag::GroupRegistry
    - - - - diff --git a/docs/structtag_1_1_group_registry.html b/docs/structtag_1_1_group_registry.html deleted file mode 100644 index ddeaa855a..000000000 --- a/docs/structtag_1_1_group_registry.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - -Tenncor: tag::GroupRegistry Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::GroupRegistry Struct Referencefinal
    -
    -
    - -

    #include <group.hpp>

    -
    -Collaboration diagram for tag::GroupRegistry:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - -

    -Public Member Functions

     GroupRegistry (TagRegistry &registry=get_reg())
     
    void group_tag (ade::TensrefT tens, std::string tag)
     
    - - - - - -

    -Public Attributes

    std::unordered_map< std::string, TensSetTgroups_
     
    TagRegistrytag_reg_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ GroupRegistry()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::GroupRegistry::GroupRegistry (TagRegistryregistry = get_reg())
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ group_tag()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void tag::GroupRegistry::group_tag (ade::TensrefT tens,
    std::string tag 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ groups_

    - -
    -
    - - - - -
    std::unordered_map<std::string,TensSetT> tag::GroupRegistry::groups_
    -
    - -
    -
    - -

    ◆ tag_reg_

    - -
    -
    - - - - -
    TagRegistry& tag::GroupRegistry::tag_reg_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_group_registry__coll__graph.map b/docs/structtag_1_1_group_registry__coll__graph.map deleted file mode 100644 index a7d3267ba..000000000 --- a/docs/structtag_1_1_group_registry__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_group_registry__coll__graph.md5 b/docs/structtag_1_1_group_registry__coll__graph.md5 deleted file mode 100644 index 57233476f..000000000 --- a/docs/structtag_1_1_group_registry__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -242a28909c844f45a84e2ecc3df1a148 \ No newline at end of file diff --git a/docs/structtag_1_1_group_registry__coll__graph.png b/docs/structtag_1_1_group_registry__coll__graph.png deleted file mode 100644 index 945b8bfe3..000000000 Binary files a/docs/structtag_1_1_group_registry__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_group_tag-members.html b/docs/structtag_1_1_group_tag-members.html deleted file mode 100644 index fd8bb1881..000000000 --- a/docs/structtag_1_1_group_tag-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::GroupTag Member List
    -
    -
    - -

    This is the complete list of members for tag::GroupTag, including all inherited members.

    - - - - - - - - - -
    absorb(TagptrT &&other) overridetag::GroupTaginline
    tag::iTag::absorb(std::unique_ptr< iTag > &&other)=0tag::iTagpure virtual
    get_tags(void) const overridetag::GroupTaginlinevirtual
    GroupTag(std::string init_label)tag::GroupTaginline
    labels_tag::GroupTagprivate
    tag_id(void) const overridetag::GroupTaginlinevirtual
    tag_id_tag::GroupTagprivatestatic
    ~iTag(void)=defaulttag::iTagvirtual
    - - - - diff --git a/docs/structtag_1_1_group_tag.html b/docs/structtag_1_1_group_tag.html deleted file mode 100644 index 97667396b..000000000 --- a/docs/structtag_1_1_group_tag.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -Tenncor: tag::GroupTag Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::GroupTag Struct Referencefinal
    -
    -
    - -

    #include <group.hpp>

    -
    -Inheritance diagram for tag::GroupTag:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for tag::GroupTag:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Public Member Functions

     GroupTag (std::string init_label)
     
    size_t tag_id (void) const override
     
    void absorb (TagptrT &&other) override
     
    TagRepsT get_tags (void) const override
     
    - Public Member Functions inherited from tag::iTag
    virtual ~iTag (void)=default
     
    virtual void absorb (std::unique_ptr< iTag > &&other)=0
     
    - - - -

    -Private Attributes

    std::set< std::string > labels_
     
    - - - -

    -Static Private Attributes

    static size_t tag_id_
     
    -

    Detailed Description

    -

    GroupTag define subgraphs/groups of nodes with a structural significance Groups are ordered tags, subsequent group tags (obtained through absorption) often denote supergraphs of prior groups e.g.: given tensor X, tag X with 'sum', then tag X with 'mlp', results in X having a collective [GroupTag:['sum','mlp']] ordered tag retains information that 'sum' is a subgraph of 'mlp'

    -

    Constructor & Destructor Documentation

    - -

    ◆ GroupTag()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::GroupTag::GroupTag (std::string init_label)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ absorb()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::GroupTag::absorb (TagptrT && other)
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ get_tags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TagRepsT tag::GroupTag::get_tags (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements tag::iTag.

    - -
    -
    - -

    ◆ tag_id()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t tag::GroupTag::tag_id (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements tag::iTag.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ labels_

    - -
    -
    - - - - - -
    - - - - -
    std::set<std::string> tag::GroupTag::labels_
    -
    -private
    -
    - -
    -
    - -

    ◆ tag_id_

    - -
    -
    - - - - - -
    - - - - -
    size_t tag::GroupTag::tag_id_
    -
    -staticprivate
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_group_tag__coll__graph.map b/docs/structtag_1_1_group_tag__coll__graph.map deleted file mode 100644 index 8972feb37..000000000 --- a/docs/structtag_1_1_group_tag__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_group_tag__coll__graph.md5 b/docs/structtag_1_1_group_tag__coll__graph.md5 deleted file mode 100644 index 3032b660b..000000000 --- a/docs/structtag_1_1_group_tag__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b3112bcf02a4abefdbe26406857b2ad1 \ No newline at end of file diff --git a/docs/structtag_1_1_group_tag__coll__graph.png b/docs/structtag_1_1_group_tag__coll__graph.png deleted file mode 100644 index 84c3cec01..000000000 Binary files a/docs/structtag_1_1_group_tag__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_group_tag__inherit__graph.map b/docs/structtag_1_1_group_tag__inherit__graph.map deleted file mode 100644 index 8972feb37..000000000 --- a/docs/structtag_1_1_group_tag__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_group_tag__inherit__graph.md5 b/docs/structtag_1_1_group_tag__inherit__graph.md5 deleted file mode 100644 index c3b8279a6..000000000 --- a/docs/structtag_1_1_group_tag__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d0570588e34e42ccaf77bc01cee0b16c \ No newline at end of file diff --git a/docs/structtag_1_1_group_tag__inherit__graph.png b/docs/structtag_1_1_group_tag__inherit__graph.png deleted file mode 100644 index 84c3cec01..000000000 Binary files a/docs/structtag_1_1_group_tag__inherit__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_prop_tag-members.html b/docs/structtag_1_1_prop_tag-members.html deleted file mode 100644 index 760d2f3d5..000000000 --- a/docs/structtag_1_1_prop_tag-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::PropTag Member List
    -
    -
    - -

    This is the complete list of members for tag::PropTag, including all inherited members.

    - - - - - - - - - -
    absorb(TagptrT &&other) overridetag::PropTaginline
    tag::iTag::absorb(std::unique_ptr< iTag > &&other)=0tag::iTagpure virtual
    get_tags(void) const overridetag::PropTaginlinevirtual
    labels_tag::PropTagprivate
    PropTag(std::string init_label)tag::PropTaginline
    tag_id(void) const overridetag::PropTaginlinevirtual
    tag_id_tag::PropTagprivatestatic
    ~iTag(void)=defaulttag::iTagvirtual
    - - - - diff --git a/docs/structtag_1_1_prop_tag.html b/docs/structtag_1_1_prop_tag.html deleted file mode 100644 index 1ba44c1bb..000000000 --- a/docs/structtag_1_1_prop_tag.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - -Tenncor: tag::PropTag Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    - -
    - -

    PropTag (properties tag) define node properties. - More...

    - -

    #include <prop.hpp>

    -
    -Inheritance diagram for tag::PropTag:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for tag::PropTag:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - - - -

    -Public Member Functions

     PropTag (std::string init_label)
     
    size_t tag_id (void) const override
     
    void absorb (TagptrT &&other) override
     
    TagRepsT get_tags (void) const override
     
    - Public Member Functions inherited from tag::iTag
    virtual ~iTag (void)=default
     
    virtual void absorb (std::unique_ptr< iTag > &&other)=0
     
    - - - -

    -Private Attributes

    std::unordered_set< std::string > labels_
     
    - - - -

    -Static Private Attributes

    static size_t tag_id_
     
    -

    Detailed Description

    -

    PropTag (properties tag) define node properties.

    -

    Constructor & Destructor Documentation

    - -

    ◆ PropTag()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::PropTag::PropTag (std::string init_label)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ absorb()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::PropTag::absorb (TagptrT && other)
    -
    -inlineoverride
    -
    - -
    -
    - -

    ◆ get_tags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TagRepsT tag::PropTag::get_tags (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements tag::iTag.

    - -
    -
    - -

    ◆ tag_id()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t tag::PropTag::tag_id (void ) const
    -
    -inlineoverridevirtual
    -
    - -

    Implements tag::iTag.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ labels_

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_set<std::string> tag::PropTag::labels_
    -
    -private
    -
    - -
    -
    - -

    ◆ tag_id_

    - -
    -
    - - - - - -
    - - - - -
    size_t tag::PropTag::tag_id_
    -
    -staticprivate
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_prop_tag__coll__graph.map b/docs/structtag_1_1_prop_tag__coll__graph.map deleted file mode 100644 index a3492b84c..000000000 --- a/docs/structtag_1_1_prop_tag__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_prop_tag__coll__graph.md5 b/docs/structtag_1_1_prop_tag__coll__graph.md5 deleted file mode 100644 index cd0c00689..000000000 --- a/docs/structtag_1_1_prop_tag__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6b7d158f48538ddc4332036d9d6889c4 \ No newline at end of file diff --git a/docs/structtag_1_1_prop_tag__coll__graph.png b/docs/structtag_1_1_prop_tag__coll__graph.png deleted file mode 100644 index 39a965609..000000000 Binary files a/docs/structtag_1_1_prop_tag__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_prop_tag__inherit__graph.map b/docs/structtag_1_1_prop_tag__inherit__graph.map deleted file mode 100644 index a3492b84c..000000000 --- a/docs/structtag_1_1_prop_tag__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_prop_tag__inherit__graph.md5 b/docs/structtag_1_1_prop_tag__inherit__graph.md5 deleted file mode 100644 index b8c34d852..000000000 --- a/docs/structtag_1_1_prop_tag__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -70cce9b299f642aa9d6a9d68a9a5c1a0 \ No newline at end of file diff --git a/docs/structtag_1_1_prop_tag__inherit__graph.png b/docs/structtag_1_1_prop_tag__inherit__graph.png deleted file mode 100644 index 39a965609..000000000 Binary files a/docs/structtag_1_1_prop_tag__inherit__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_property_registry-members.html b/docs/structtag_1_1_property_registry-members.html deleted file mode 100644 index 9e2a248d9..000000000 --- a/docs/structtag_1_1_property_registry-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::PropertyRegistry Member List
    -
    -
    - -

    This is the complete list of members for tag::PropertyRegistry, including all inherited members.

    - - - - - -
    has_property(const ade::iTensor *tens, std::string property)tag::PropertyRegistryinline
    property_tag(ade::TensrefT tens, std::string property)tag::PropertyRegistryinline
    PropertyRegistry(TagRegistry &registry=get_reg())tag::PropertyRegistryinline
    tag_reg_tag::PropertyRegistry
    - - - - diff --git a/docs/structtag_1_1_property_registry.html b/docs/structtag_1_1_property_registry.html deleted file mode 100644 index a736b518a..000000000 --- a/docs/structtag_1_1_property_registry.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - -Tenncor: tag::PropertyRegistry Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::PropertyRegistry Struct Referencefinal
    -
    -
    - -

    #include <prop.hpp>

    -
    -Collaboration diagram for tag::PropertyRegistry:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - -

    -Public Member Functions

     PropertyRegistry (TagRegistry &registry=get_reg())
     
    void property_tag (ade::TensrefT tens, std::string property)
     
    bool has_property (const ade::iTensor *tens, std::string property)
     
    - - - -

    -Public Attributes

    TagRegistrytag_reg_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ PropertyRegistry()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::PropertyRegistry::PropertyRegistry (TagRegistryregistry = get_reg())
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ has_property()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool tag::PropertyRegistry::has_property (const ade::iTensortens,
    std::string property 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ property_tag()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void tag::PropertyRegistry::property_tag (ade::TensrefT tens,
    std::string property 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ tag_reg_

    - -
    -
    - - - - -
    TagRegistry& tag::PropertyRegistry::tag_reg_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_property_registry__coll__graph.map b/docs/structtag_1_1_property_registry__coll__graph.map deleted file mode 100644 index ebbac1e98..000000000 --- a/docs/structtag_1_1_property_registry__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_property_registry__coll__graph.md5 b/docs/structtag_1_1_property_registry__coll__graph.md5 deleted file mode 100644 index e5dd3c76e..000000000 --- a/docs/structtag_1_1_property_registry__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -46bc0259b43410230a564155be8f2f93 \ No newline at end of file diff --git a/docs/structtag_1_1_property_registry__coll__graph.png b/docs/structtag_1_1_property_registry__coll__graph.png deleted file mode 100644 index b7273c70b..000000000 Binary files a/docs/structtag_1_1_property_registry__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_registry-members.html b/docs/structtag_1_1_registry-members.html deleted file mode 100644 index 4a413a89b..000000000 --- a/docs/structtag_1_1_registry-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::Registry Member List
    -
    -
    - -

    This is the complete list of members for tag::Registry, including all inherited members.

    - - - -
    registrytag::Registrystatic
    Registry(void)=deletetag::Registry
    - - - - diff --git a/docs/structtag_1_1_registry.html b/docs/structtag_1_1_registry.html deleted file mode 100644 index da8d1b32f..000000000 --- a/docs/structtag_1_1_registry.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Tenncor: tag::Registry Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::Registry Struct Referencefinal
    -
    -
    - -

    #include <tag.hpp>

    - - - - -

    -Public Member Functions

     Registry (void)=delete
     
    - - - -

    -Static Public Attributes

    static std::unordered_map< TensKey, TagCollective, TensKeyHashregistry
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ Registry()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::Registry::Registry (void )
    -
    -delete
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ registry

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_map<TensKey,TagCollective, TensKeyHash> tag::Registry::registry
    -
    -static
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_subgraph-members.html b/docs/structtag_1_1_subgraph-members.html deleted file mode 100644 index 575ef3054..000000000 --- a/docs/structtag_1_1_subgraph-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::Subgraph Member List
    -
    -
    - -

    This is the complete list of members for tag::Subgraph, including all inherited members.

    - - - - - - - - -
    children_tag::Subgraph
    content_tag::Subgraph
    group_tag::Subgraph
    Subgraph(std::string group)tag::Subgraphinline
    visit(ade::iLeaf *leaf) overridetag::Subgraphinlinevirtual
    visit(ade::iFunctor *func) overridetag::Subgraphinlinevirtual
    ~iTraveler(void)=defaultade::iTravelervirtual
    - - - - diff --git a/docs/structtag_1_1_subgraph.html b/docs/structtag_1_1_subgraph.html deleted file mode 100644 index 5322b0c17..000000000 --- a/docs/structtag_1_1_subgraph.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - -Tenncor: tag::Subgraph Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::Subgraph Struct Referencefinal
    -
    -
    - -

    #include <group.hpp>

    -
    -Inheritance diagram for tag::Subgraph:
    -
    -
    Inheritance graph
    - - - -
    [legend]
    -
    -Collaboration diagram for tag::Subgraph:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - - -

    -Public Member Functions

     Subgraph (std::string group)
     
    void visit (ade::iLeaf *leaf) override
     Implementation of iTraveler. More...
     
    void visit (ade::iFunctor *func) override
     Implementation of iTraveler. More...
     
    - Public Member Functions inherited from ade::iTraveler
    virtual ~iTraveler (void)=default
     
    - - - - - - - -

    -Public Attributes

    std::string group_
     
    std::unordered_set< ade::iTensor * > content_
     
    std::unordered_map< ade::iTensor *, ade::TensptrTchildren_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ Subgraph()

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::Subgraph::Subgraph (std::string group)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ visit() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::Subgraph::visit (ade::iLeafleaf)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    - -

    ◆ visit() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::Subgraph::visit (ade::iFunctorfunc)
    -
    -inlineoverridevirtual
    -
    - -

    Implementation of iTraveler.

    - -

    Implements ade::iTraveler.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ children_

    - -
    -
    - - - - -
    std::unordered_map<ade::iTensor*,ade::TensptrT> tag::Subgraph::children_
    -
    - -
    -
    - -

    ◆ content_

    - -
    -
    - - - - -
    std::unordered_set<ade::iTensor*> tag::Subgraph::content_
    -
    - -
    -
    - -

    ◆ group_

    - -
    -
    - - - - -
    std::string tag::Subgraph::group_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_subgraph__coll__graph.map b/docs/structtag_1_1_subgraph__coll__graph.map deleted file mode 100644 index b77d322ee..000000000 --- a/docs/structtag_1_1_subgraph__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_subgraph__coll__graph.md5 b/docs/structtag_1_1_subgraph__coll__graph.md5 deleted file mode 100644 index 5d881ad66..000000000 --- a/docs/structtag_1_1_subgraph__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bd61820fb17bebb114d82ab0342c4ac7 \ No newline at end of file diff --git a/docs/structtag_1_1_subgraph__coll__graph.png b/docs/structtag_1_1_subgraph__coll__graph.png deleted file mode 100644 index 4c75a1260..000000000 Binary files a/docs/structtag_1_1_subgraph__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_subgraph__inherit__graph.map b/docs/structtag_1_1_subgraph__inherit__graph.map deleted file mode 100644 index b77d322ee..000000000 --- a/docs/structtag_1_1_subgraph__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_subgraph__inherit__graph.md5 b/docs/structtag_1_1_subgraph__inherit__graph.md5 deleted file mode 100644 index 7891124a8..000000000 --- a/docs/structtag_1_1_subgraph__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4f4c0d5975add812b56a92ab3fb5f954 \ No newline at end of file diff --git a/docs/structtag_1_1_subgraph__inherit__graph.png b/docs/structtag_1_1_subgraph__inherit__graph.png deleted file mode 100644 index 4c75a1260..000000000 Binary files a/docs/structtag_1_1_subgraph__inherit__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_tag_collective-members.html b/docs/structtag_1_1_tag_collective-members.html deleted file mode 100644 index d558d403e..000000000 --- a/docs/structtag_1_1_tag_collective-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::TagCollective Member List
    -
    -
    - -

    This is the complete list of members for tag::TagCollective, including all inherited members.

    - - - - - - - - -
    absorb(TagCollective &&other)tag::TagCollectiveinline
    add(TagptrT entry)tag::TagCollectiveinline
    get_tags(void) consttag::TagCollectiveinline
    operator=(TagCollective &&other)tag::TagCollectiveinline
    TagCollective(void)=defaulttag::TagCollective
    TagCollective(TagCollective &&other)tag::TagCollectiveinline
    tags_tag::TagCollectiveprivate
    - - - - diff --git a/docs/structtag_1_1_tag_collective.html b/docs/structtag_1_1_tag_collective.html deleted file mode 100644 index cb0a98343..000000000 --- a/docs/structtag_1_1_tag_collective.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - -Tenncor: tag::TagCollective Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::TagCollective Struct Referencefinal
    -
    -
    - -

    #include <tag.hpp>

    - - - - - - - - - - - - - - -

    -Public Member Functions

     TagCollective (void)=default
     
     TagCollective (TagCollective &&other)
     
    TagCollectiveoperator= (TagCollective &&other)
     
    void absorb (TagCollective &&other)
     
    void add (TagptrT entry)
     
    TagRepsT get_tags (void) const
     
    - - - -

    -Private Attributes

    std::unordered_map< size_t, TagptrTtags_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ TagCollective() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::TagCollective::TagCollective (void )
    -
    -default
    -
    - -
    -
    - -

    ◆ TagCollective() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::TagCollective::TagCollective (TagCollective && other)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ absorb()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::TagCollective::absorb (TagCollective && other)
    -
    -inline
    -
    - -
    -
    - -

    ◆ add()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void tag::TagCollective::add (TagptrT entry)
    -
    -inline
    -
    - -
    -
    - -

    ◆ get_tags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TagRepsT tag::TagCollective::get_tags (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator=()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TagCollective& tag::TagCollective::operator= (TagCollective && other)
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ tags_

    - -
    -
    - - - - - -
    - - - - -
    std::unordered_map<size_t,TagptrT> tag::TagCollective::tags_
    -
    -private
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_tag_registry-members.html b/docs/structtag_1_1_tag_registry-members.html deleted file mode 100644 index 2ee8723bc..000000000 --- a/docs/structtag_1_1_tag_registry-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::TagRegistry Member List
    -
    -
    - -

    This is the complete list of members for tag::TagRegistry, including all inherited members.

    - - - - - -
    add_tag(ade::TensrefT tens, TagptrT tag)tag::TagRegistryinline
    get_tags(const ade::iTensor *tens)tag::TagRegistryinline
    move_tags(ade::TensrefT dest, const ade::iTensor *source)tag::TagRegistryinline
    registry_tag::TagRegistry
    - - - - diff --git a/docs/structtag_1_1_tag_registry.html b/docs/structtag_1_1_tag_registry.html deleted file mode 100644 index 80589db4f..000000000 --- a/docs/structtag_1_1_tag_registry.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - -Tenncor: tag::TagRegistry Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::TagRegistry Struct Referencefinal
    -
    -
    - -

    #include <tag.hpp>

    - - - - - - - - -

    -Public Member Functions

    void add_tag (ade::TensrefT tens, TagptrT tag)
     
    TagRepsT get_tags (const ade::iTensor *tens)
     
    void move_tags (ade::TensrefT dest, const ade::iTensor *source)
     
    - - - -

    -Public Attributes

    std::unordered_map< TensKey, TagCollective, TensKeyHashregistry_
     
    -

    Member Function Documentation

    - -

    ◆ add_tag()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void tag::TagRegistry::add_tag (ade::TensrefT tens,
    TagptrT tag 
    )
    -
    -inline
    -
    - -
    -
    - -

    ◆ get_tags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    TagRepsT tag::TagRegistry::get_tags (const ade::iTensortens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ move_tags()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void tag::TagRegistry::move_tags (ade::TensrefT dest,
    const ade::iTensorsource 
    )
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ registry_

    - -
    -
    - - - - -
    std::unordered_map<TensKey,TagCollective,TensKeyHash> tag::TagRegistry::registry_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_tens_key-members.html b/docs/structtag_1_1_tens_key-members.html deleted file mode 100644 index be7a36d60..000000000 --- a/docs/structtag_1_1_tens_key-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::TensKey Member List
    -
    -
    - -

    This is the complete list of members for tag::TensKey, including all inherited members.

    - - - - - - - - -
    expired(void) consttag::TensKeyinline
    operator const ade::iTensor *() consttag::TensKeyinline
    ref_tag::TensKey
    TensKey(ade::TensrefT tens)tag::TensKeyinline
    TensKey(ade::iTensor *tens)tag::TensKeyinline
    TensKey(const ade::iTensor *tens)tag::TensKeyinline
    val_tag::TensKey
    - - - - diff --git a/docs/structtag_1_1_tens_key.html b/docs/structtag_1_1_tens_key.html deleted file mode 100644 index 1446f53d3..000000000 --- a/docs/structtag_1_1_tens_key.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - -Tenncor: tag::TensKey Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::TensKey Struct Referencefinal
    -
    -
    - -

    #include <tag.hpp>

    -
    -Collaboration diagram for tag::TensKey:
    -
    -
    Collaboration graph
    - - - -
    [legend]
    - - - - - - - - - - - - -

    -Public Member Functions

     TensKey (ade::TensrefT tens)
     
     TensKey (ade::iTensor *tens)
     
     TensKey (const ade::iTensor *tens)
     
     operator const ade::iTensor * () const
     
    bool expired (void) const
     
    - - - - - -

    -Public Attributes

    const ade::iTensorval_
     
    ade::TensrefT ref_
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ TensKey() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::TensKey::TensKey (ade::TensrefT tens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ TensKey() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::TensKey::TensKey (ade::iTensortens)
    -
    -inline
    -
    - -
    -
    - -

    ◆ TensKey() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    tag::TensKey::TensKey (const ade::iTensortens)
    -
    -inline
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ expired()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool tag::TensKey::expired (void ) const
    -
    -inline
    -
    - -
    -
    - -

    ◆ operator const ade::iTensor *()

    - -
    -
    - - - - - -
    - - - - - - - -
    tag::TensKey::operator const ade::iTensor * () const
    -
    -inline
    -
    - -
    -
    -

    Member Data Documentation

    - -

    ◆ ref_

    - -
    -
    - - - - -
    ade::TensrefT tag::TensKey::ref_
    -
    - -
    -
    - -

    ◆ val_

    - -
    -
    - - - - -
    const ade::iTensor* tag::TensKey::val_
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1_tens_key__coll__graph.map b/docs/structtag_1_1_tens_key__coll__graph.map deleted file mode 100644 index 9372adaef..000000000 --- a/docs/structtag_1_1_tens_key__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/structtag_1_1_tens_key__coll__graph.md5 b/docs/structtag_1_1_tens_key__coll__graph.md5 deleted file mode 100644 index 89d967ffe..000000000 --- a/docs/structtag_1_1_tens_key__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1b3c4b25613e010c1ede93d04a0ec9a3 \ No newline at end of file diff --git a/docs/structtag_1_1_tens_key__coll__graph.png b/docs/structtag_1_1_tens_key__coll__graph.png deleted file mode 100644 index 51eecee12..000000000 Binary files a/docs/structtag_1_1_tens_key__coll__graph.png and /dev/null differ diff --git a/docs/structtag_1_1_tens_key_hash-members.html b/docs/structtag_1_1_tens_key_hash-members.html deleted file mode 100644 index 4cbf59b1e..000000000 --- a/docs/structtag_1_1_tens_key_hash-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::TensKeyHash Member List
    -
    -
    - -

    This is the complete list of members for tag::TensKeyHash, including all inherited members.

    - - -
    operator()(const TensKey &key) consttag::TensKeyHashinline
    - - - - diff --git a/docs/structtag_1_1_tens_key_hash.html b/docs/structtag_1_1_tens_key_hash.html deleted file mode 100644 index f76a5487a..000000000 --- a/docs/structtag_1_1_tens_key_hash.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: tag::TensKeyHash Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::TensKeyHash Struct Referencefinal
    -
    -
    - -

    #include <tag.hpp>

    - - - - -

    -Public Member Functions

    size_t operator() (const TensKey &key) const
     
    -

    Member Function Documentation

    - -

    ◆ operator()()

    - -
    -
    - - - - - -
    - - - - - - - - -
    size_t tag::TensKeyHash::operator() (const TensKeykey) const
    -
    -inline
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1i_tag-members.html b/docs/structtag_1_1i_tag-members.html deleted file mode 100644 index 10e77c8d0..000000000 --- a/docs/structtag_1_1i_tag-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -Tenncor: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag::iTag Member List
    -
    -
    - -

    This is the complete list of members for tag::iTag, including all inherited members.

    - - - - - -
    absorb(std::unique_ptr< iTag > &&other)=0tag::iTagpure virtual
    get_tags(void) const =0tag::iTagpure virtual
    tag_id(void) const =0tag::iTagpure virtual
    ~iTag(void)=defaulttag::iTagvirtual
    - - - - diff --git a/docs/structtag_1_1i_tag.html b/docs/structtag_1_1i_tag.html deleted file mode 100644 index 4314fc845..000000000 --- a/docs/structtag_1_1i_tag.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - -Tenncor: tag::iTag Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag::iTag Struct Referenceabstract
    -
    -
    - -

    #include <tag.hpp>

    -
    -Inheritance diagram for tag::iTag:
    -
    -
    Inheritance graph
    - - - - -
    [legend]
    - - - - - - - - - - -

    -Public Member Functions

    virtual ~iTag (void)=default
     
    virtual size_t tag_id (void) const =0
     
    virtual void absorb (std::unique_ptr< iTag > &&other)=0
     
    virtual TagRepsT get_tags (void) const =0
     
    -

    Constructor & Destructor Documentation

    - -

    ◆ ~iTag()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual tag::iTag::~iTag (void )
    -
    -virtualdefault
    -
    - -
    -
    -

    Member Function Documentation

    - -

    ◆ absorb()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void tag::iTag::absorb (std::unique_ptr< iTag > && other)
    -
    -pure virtual
    -
    - -
    -
    - -

    ◆ get_tags()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual TagRepsT tag::iTag::get_tags (void ) const
    -
    -pure virtual
    -
    - -

    Implemented in tag::GroupTag, and tag::PropTag.

    - -
    -
    - -

    ◆ tag_id()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual size_t tag::iTag::tag_id (void ) const
    -
    -pure virtual
    -
    - -

    Implemented in tag::GroupTag, and tag::PropTag.

    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/docs/structtag_1_1i_tag__inherit__graph.map b/docs/structtag_1_1i_tag__inherit__graph.map deleted file mode 100644 index 4b276d813..000000000 --- a/docs/structtag_1_1i_tag__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/structtag_1_1i_tag__inherit__graph.md5 b/docs/structtag_1_1i_tag__inherit__graph.md5 deleted file mode 100644 index be094c053..000000000 --- a/docs/structtag_1_1i_tag__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3f229104f9fd84f6a51e74411be94d5d \ No newline at end of file diff --git a/docs/structtag_1_1i_tag__inherit__graph.png b/docs/structtag_1_1i_tag__inherit__graph.png deleted file mode 100644 index 916fb8921..000000000 Binary files a/docs/structtag_1_1i_tag__inherit__graph.png and /dev/null differ diff --git a/docs/sync_off.png b/docs/sync_off.png deleted file mode 100644 index 3b443fc62..000000000 Binary files a/docs/sync_off.png and /dev/null differ diff --git a/docs/sync_on.png b/docs/sync_on.png deleted file mode 100644 index e08320fb6..000000000 Binary files a/docs/sync_on.png and /dev/null differ diff --git a/docs/tab_a.png b/docs/tab_a.png deleted file mode 100644 index 3b725c41c..000000000 Binary files a/docs/tab_a.png and /dev/null differ diff --git a/docs/tab_b.png b/docs/tab_b.png deleted file mode 100644 index e2b4a8638..000000000 Binary files a/docs/tab_b.png and /dev/null differ diff --git a/docs/tab_h.png b/docs/tab_h.png deleted file mode 100644 index fd5cb7054..000000000 Binary files a/docs/tab_h.png and /dev/null differ diff --git a/docs/tab_s.png b/docs/tab_s.png deleted file mode 100644 index ab478c95b..000000000 Binary files a/docs/tab_s.png and /dev/null differ diff --git a/docs/tabs.css b/docs/tabs.css deleted file mode 100644 index a28614b8e..000000000 --- a/docs/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/tag_8cpp.html b/docs/tag_8cpp.html deleted file mode 100644 index efef22d8d..000000000 --- a/docs/tag_8cpp.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Tenncor: tag/src/tag.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag.cpp File Reference
    -
    -
    -
    #include "tag/tag.hpp"
    -
    -Include dependency graph for tag.cpp:
    -
    -
    - - - - - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/tag_8cpp__incl.map b/docs/tag_8cpp__incl.map deleted file mode 100644 index 545460aeb..000000000 --- a/docs/tag_8cpp__incl.map +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/docs/tag_8cpp__incl.md5 b/docs/tag_8cpp__incl.md5 deleted file mode 100644 index 232155acd..000000000 --- a/docs/tag_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c509c951c6f22fc9a63d9c52b7e9c49e \ No newline at end of file diff --git a/docs/tag_8cpp__incl.png b/docs/tag_8cpp__incl.png deleted file mode 100644 index 5b323f6e4..000000000 Binary files a/docs/tag_8cpp__incl.png and /dev/null differ diff --git a/docs/tag_8hpp.html b/docs/tag_8hpp.html deleted file mode 100644 index 4d4a4b9c0..000000000 --- a/docs/tag_8hpp.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -Tenncor: tag/tag.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tag.hpp File Reference
    -
    -
    -
    #include <map>
    -#include <set>
    -#include "ade/ade.hpp"
    -
    -Include dependency graph for tag.hpp:
    -
    -
    - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - - - - - - -

    -Classes

    struct  tag::iTag
     
    struct  tag::TagCollective
     
    struct  tag::TensKey
     
    struct  tag::TensKeyHash
     
    struct  tag::TagRegistry
     
    - - - -

    -Namespaces

     tag
     
    - - - - - -

    -Typedefs

    using tag::TagRepsT = std::map< std::string, std::vector< std::string > >
     
    using tag::TagptrT = std::unique_ptr< iTag >
     
    - - - - - -

    -Functions

    bool tag::operator== (const TensKey &lhs, const TensKey &rhs)
     
    TagRegistry & tag::get_reg (void)
     
    -
    - - - - diff --git a/docs/tag_8hpp__dep__incl.map b/docs/tag_8hpp__dep__incl.map deleted file mode 100644 index cdb2c39a7..000000000 --- a/docs/tag_8hpp__dep__incl.map +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/tag_8hpp__dep__incl.md5 b/docs/tag_8hpp__dep__incl.md5 deleted file mode 100644 index fd2c78acf..000000000 --- a/docs/tag_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3615cba6f73c0e7c31600181bfff7c2a \ No newline at end of file diff --git a/docs/tag_8hpp__dep__incl.png b/docs/tag_8hpp__dep__incl.png deleted file mode 100644 index 41ee8d5db..000000000 Binary files a/docs/tag_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/tag_8hpp__incl.map b/docs/tag_8hpp__incl.map deleted file mode 100644 index 7dcb41ce9..000000000 --- a/docs/tag_8hpp__incl.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/tag_8hpp__incl.md5 b/docs/tag_8hpp__incl.md5 deleted file mode 100644 index 34bd19ef0..000000000 --- a/docs/tag_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b9af0fdad82a1029fe5bd9d85ea1f97d \ No newline at end of file diff --git a/docs/tag_8hpp__incl.png b/docs/tag_8hpp__incl.png deleted file mode 100644 index d39220286..000000000 Binary files a/docs/tag_8hpp__incl.png and /dev/null differ diff --git a/docs/tag_8hpp_source.html b/docs/tag_8hpp_source.html deleted file mode 100644 index fb649da1c..000000000 --- a/docs/tag_8hpp_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Tenncor: tag/tag.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tag.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include <map>
    2 #include <set>
    3 
    4 #include "ade/ade.hpp"
    5 
    6 #ifndef TAG_TAG_HPP
    7 #define TAG_TAG_HPP
    8 
    9 namespace tag
    10 {
    11 
    12 using TagRepsT = std::map<std::string,std::vector<std::string>>;
    13 
    14 // each tag instance is a set of tags with particular properties
    15 // iTag is the interface for such instances
    16 struct iTag
    17 {
    18  virtual ~iTag (void) = default;
    19 
    20  virtual size_t tag_id (void) const = 0;
    21 
    22  virtual void absorb (std::unique_ptr<iTag>&& other) = 0;
    23 
    24  virtual TagRepsT get_tags (void) const = 0;
    25 };
    26 
    27 using TagptrT = std::unique_ptr<iTag>;
    28 
    29 // TagCollective is a collective of generic iTag instances
    30 // only 1 instance of a particular type of iTag can be stored in an instance of
    31 // TagCollective, adding subsequent instances of the same type
    32 // absorbs new instances into the collective
    33 struct TagCollective final
    34 {
    35  TagCollective (void) = default;
    36 
    37  TagCollective (TagCollective&& other) : tags_(std::move(other.tags_)) {}
    38 
    40  {
    41  if (this != &other)
    42  {
    43  tags_ = std::move(other.tags_);
    44  }
    45  return *this;
    46  }
    47 
    48  void absorb (TagCollective&& other)
    49  {
    50  for (auto& tagpair : other.tags_)
    51  {
    52  size_t tid = tagpair.first;
    53  auto it = tags_.find(tid);
    54  if (tags_.end() == it)
    55  {
    56  tags_.emplace(tid, std::move(tagpair.second));
    57  }
    58  else
    59  {
    60  it->second->absorb(std::move(tagpair.second));
    61  }
    62  }
    63  other.tags_.clear();
    64  }
    65 
    66  void add (TagptrT entry)
    67  {
    68  size_t tid = entry->tag_id();
    69  auto it = tags_.find(tid);
    70  if (tags_.end() == it)
    71  {
    72  tags_.emplace(tid, std::move(entry));
    73  }
    74  else
    75  {
    76  it->second->absorb(std::move(entry));
    77  }
    78  }
    79 
    80  TagRepsT get_tags (void) const
    81  {
    82  TagRepsT tags;
    83  for (auto& tpair : tags_)
    84  {
    85  auto temp = tpair.second->get_tags();
    86  tags.insert(temp.begin(), temp.end());
    87  }
    88  return tags;
    89  }
    90 
    91 private:
    92  std::unordered_map<size_t,TagptrT> tags_;
    93 };
    94 
    95 struct TensKey final
    96 {
    97  TensKey (ade::TensrefT tens) : val_(tens.lock().get()), ref_(tens) {}
    98 
    99  // used to match keys
    100  TensKey (ade::iTensor* tens) : val_(tens) {}
    101 
    102  TensKey (const ade::iTensor* tens) : val_(tens) {}
    103 
    104  operator const ade::iTensor*() const
    105  {
    106  return val_;
    107  }
    108 
    109  bool expired (void) const
    110  {
    111  return ref_.expired();
    112  }
    113 
    115 
    117 };
    118 
    119 struct TensKeyHash final
    120 {
    121  size_t operator() (const TensKey& key) const
    122  {
    123  return std::hash<const void*>()(key.val_);
    124  }
    125 };
    126 
    127 inline bool operator == (const TensKey& lhs, const TensKey& rhs)
    128 {
    129  TensKeyHash hasher;
    130  return hasher(lhs) == hasher(rhs);
    131 }
    132 
    133 // todo: move tag registry to some session that claims global context
    134 // todo: make an interface for this
    135 struct TagRegistry final
    136 {
    138  {
    139  if (tens.expired())
    140  {
    141  logs::fatal("cannot tag with expired tensor ref");
    142  }
    143  auto it = registry_.find(TensKey(tens));
    144  // clear out previous entry that is expired
    145  if (registry_.end() != it && it->first.expired())
    146  {
    147  registry_.erase(tens.lock().get());
    148  }
    149  registry_[tens].add(std::move(tag));
    150  }
    151 
    153  {
    154  auto it = registry_.find(TensKey(tens));
    155  if (registry_.end() == it || it->first.expired())
    156  {
    157  return {};
    158  }
    159  return it->second.get_tags();
    160  }
    161 
    162  void move_tags (ade::TensrefT dest, const ade::iTensor* source)
    163  {
    164  if (dest.expired())
    165  {
    166  logs::fatal("cannot move with expired destination tensor");
    167  }
    168  auto src_it = registry_.find(TensKey(source));
    169  auto dest_it = registry_.find(TensKey(dest));
    170  if (registry_.end() == src_it || src_it->first.expired())
    171  {
    172  return;
    173  }
    174 
    175  if (registry_.end() == dest_it || dest_it->first.expired())
    176  {
    177  registry_[dest] = std::move(src_it->second);
    178  }
    179  else
    180  {
    181  dest_it->second.absorb(std::move(src_it->second));
    182  }
    183  registry_.erase(TensKey(source));
    184  }
    185 
    186  std::unordered_map<TensKey,TagCollective,TensKeyHash> registry_;
    187 };
    188 
    189 TagRegistry& get_reg (void);
    190 
    191 }
    192 
    193 #endif // TAG_TAG_HPP
    Definition: tag.hpp:119
    -
    void add_tag(ade::TensrefT tens, TagptrT tag)
    Definition: tag.hpp:137
    -
    TagRepsT get_tags(void) const
    Definition: tag.hpp:80
    -
    Definition: tag.hpp:16
    -
    virtual void absorb(std::unique_ptr< iTag > &&other)=0
    -
    TensKey(ade::iTensor *tens)
    Definition: tag.hpp:100
    -
    TagRepsT get_tags(const ade::iTensor *tens)
    Definition: tag.hpp:152
    -
    Definition: tag.hpp:135
    - -
    virtual TagRepsT get_tags(void) const =0
    -
    Definition: group.hpp:10
    -
    std::unique_ptr< iTag > TagptrT
    Definition: tag.hpp:27
    -
    TagCollective(void)=default
    -
    virtual ~iTag(void)=default
    -
    std::map< std::string, std::vector< std::string > > TagRepsT
    Definition: tag.hpp:12
    -
    std::unordered_map< TensKey, TagCollective, TensKeyHash > registry_
    Definition: tag.hpp:186
    -
    void move_tags(ade::TensrefT dest, const ade::iTensor *source)
    Definition: tag.hpp:162
    -
    Definition: tag.hpp:33
    -
    TensKey(const ade::iTensor *tens)
    Definition: tag.hpp:102
    -
    void add(TagptrT entry)
    Definition: tag.hpp:66
    -
    bool operator==(const TensKey &lhs, const TensKey &rhs)
    Definition: tag.hpp:127
    -
    ade::TensrefT ref_
    Definition: tag.hpp:116
    -
    std::unordered_map< size_t, TagptrT > tags_
    Definition: tag.hpp:92
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    TensKey(ade::TensrefT tens)
    Definition: tag.hpp:97
    -
    size_t operator()(const TensKey &key) const
    Definition: tag.hpp:121
    -
    Definition: tag.hpp:95
    -
    TagCollective & operator=(TagCollective &&other)
    Definition: tag.hpp:39
    -
    TagRegistry & get_reg(void)
    -
    bool expired(void) const
    Definition: tag.hpp:109
    -
    std::weak_ptr< iTensor > TensrefT
    Tensor weak pointers.
    Definition: itensor.hpp:52
    -
    TagCollective(TagCollective &&other)
    Definition: tag.hpp:37
    -
    virtual size_t tag_id(void) const =0
    -
    const ade::iTensor * val_
    Definition: tag.hpp:114
    -
    void absorb(TagCollective &&other)
    Definition: tag.hpp:48
    -
    - - - - diff --git a/docs/template_8py.html b/docs/template_8py.html deleted file mode 100644 index cbe58ed1c..000000000 --- a/docs/template_8py.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Tenncor: ead/age/plugins/template.py File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    template.py File Reference
    -
    -
    - - - - -

    -Namespaces

     template
     
    - - - -

    -Functions

    def template.build_template (template, funcs, args)
     
    -
    - - - - diff --git a/docs/tensor_8hpp.html b/docs/tensor_8hpp.html deleted file mode 100644 index 1dd036822..000000000 --- a/docs/tensor_8hpp.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/tensor.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tensor.hpp File Reference
    -
    -
    -
    #include <iostream>
    -#include <vector>
    -
    -Include dependency graph for tensor.hpp:
    -
    -
    -
    -
    -

    Go to the source code of this file.

    - - - - - -

    -Classes

    struct  PrettyTensor< T >
     Draw data as a multi-dimension array (similar to python) according to shape. More...
     
    -
    - - - - diff --git a/docs/tensor_8hpp__incl.map b/docs/tensor_8hpp__incl.map deleted file mode 100644 index e5596079b..000000000 --- a/docs/tensor_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/tensor_8hpp__incl.md5 b/docs/tensor_8hpp__incl.md5 deleted file mode 100644 index bf1f23040..000000000 --- a/docs/tensor_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9113b10cbabfffef3cd85bcec442886d \ No newline at end of file diff --git a/docs/tensor_8hpp__incl.png b/docs/tensor_8hpp__incl.png deleted file mode 100644 index 0ed2ee394..000000000 Binary files a/docs/tensor_8hpp__incl.png and /dev/null differ diff --git a/docs/tensor_8hpp_source.html b/docs/tensor_8hpp_source.html deleted file mode 100644 index af033870a..000000000 --- a/docs/tensor_8hpp_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/tensor.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tensor.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include <iostream>
    10 #include <vector>
    11 
    12 #ifndef DBG_TENSOR_HPP
    13 #define DBG_TENSOR_HPP
    14 
    16 template <typename T>
    17 struct PrettyTensor final
    18 {
    25  PrettyTensor (std::vector<uint16_t> datalimit) : datalimit_(datalimit) {}
    26 
    31  void print (std::ostream& out, T* arr, std::vector<uint8_t> shape)
    32  {
    33  print_helper(out, shape, arr, shape.size() - 1);
    34  }
    35 
    37  std::vector<uint16_t> datalimit_;
    38 
    39 private:
    40  void print_helper (std::ostream& out, const std::vector<uint8_t>& shape,
    41  T* arr, uint8_t rank)
    42  {
    43  out << "[";
    44  uint16_t n = shape[rank];
    45  // apply limit only if limit is available
    46  if (rank < datalimit_.size())
    47  {
    48  n = std::min(n, datalimit_[rank]);
    49  }
    50  if (rank == 0)
    51  {
    52  out << arr[0];
    53  for (uint16_t i = 1; i < n; ++i)
    54  {
    55  out << "," << arr[i];
    56  }
    57  }
    58  else
    59  {
    60  auto it = shape.begin();
    61  size_t before = std::accumulate(it, it + rank, (size_t) 1,
    62  std::multiplies<size_t>());
    63  print_helper(out, shape, arr, rank - 1);
    64  for (uint16_t i = 1; i < n; ++i)
    65  {
    66  out << ",";
    67  print_helper(out, shape, arr + i * before, rank - 1);
    68  }
    69  }
    70  if (n < shape[rank])
    71  {
    72  out << "..";
    73  }
    74  out << "]";
    75  }
    76 };
    77 
    78 #endif // DBG_TENSOR_HPP
    void print(std::ostream &out, T *arr, std::vector< uint8_t > shape)
    Definition: tensor.hpp:31
    -
    EigenptrT< T > min(ade::Shape &outshape, const OpArg< T > &a, const OpArg< T > &b)
    Definition: operator.hpp:893
    -
    void print_helper(std::ostream &out, const std::vector< uint8_t > &shape, T *arr, uint8_t rank)
    Definition: tensor.hpp:40
    -
    PrettyTensor(std::vector< uint16_t > datalimit)
    Definition: tensor.hpp:25
    -
    Draw data as a multi-dimension array (similar to python) according to shape.
    Definition: tensor.hpp:17
    -
    std::vector< uint16_t > datalimit_
    Number of elements to show for each dimension.
    Definition: tensor.hpp:37
    -
    - - - - diff --git a/docs/traveler_8cpp.html b/docs/traveler_8cpp.html deleted file mode 100644 index 090534913..000000000 --- a/docs/traveler_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Tenncor: ade/src/traveler.cpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    traveler.cpp File Reference
    -
    -
    -
    #include "ade/traveler.hpp"
    -
    -Include dependency graph for traveler.cpp:
    -
    -
    - - - - - - - - - - - -
    -
    - - - - diff --git a/docs/traveler_8cpp__incl.map b/docs/traveler_8cpp__incl.map deleted file mode 100644 index 7508791c7..000000000 --- a/docs/traveler_8cpp__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/traveler_8cpp__incl.md5 b/docs/traveler_8cpp__incl.md5 deleted file mode 100644 index 0bc5f6b6b..000000000 --- a/docs/traveler_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -039b9e94bb5dc56e887bd9b60cde5889 \ No newline at end of file diff --git a/docs/traveler_8cpp__incl.png b/docs/traveler_8cpp__incl.png deleted file mode 100644 index 2682c7c9f..000000000 Binary files a/docs/traveler_8cpp__incl.png and /dev/null differ diff --git a/docs/traveler_8hpp.html b/docs/traveler_8hpp.html deleted file mode 100644 index 097cfede9..000000000 --- a/docs/traveler_8hpp.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -Tenncor: ade/traveler.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    traveler.hpp File Reference
    -
    -
    -
    #include "estd/estd.hpp"
    -#include "estd/range.hpp"
    -#include "ade/ileaf.hpp"
    -#include "ade/ifunctor.hpp"
    -
    -Include dependency graph for traveler.hpp:
    -
    -
    - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - - - - - - - - - -

    -Classes

    struct  ade::OnceTraveler
     Extremely generic traveler that visits every node in the graph once. More...
     
    struct  ade::GraphStat
     Traveler that maps each tensor to its subtree's maximum depth. More...
     
    struct  ade::PathFinder
     
    struct  ade::ParentFinder
     Traveler that for each child tracks the relationship to all parents. More...
     
    struct  ade::HeightMatrix
     
    - - - -

    -Namespaces

     ade
     
    - - - - -

    -Typedefs

    using ade::OwnerMapT = std::unordered_map< iTensor *, TensrefT >
     Map between tensor and its corresponding smart pointer. More...
     
    - - - -

    -Functions

    OwnerMapT ade::track_owners (TensT roots)
     
    -
    - - - - diff --git a/docs/traveler_8hpp__dep__incl.map b/docs/traveler_8hpp__dep__incl.map deleted file mode 100644 index ba6881db8..000000000 --- a/docs/traveler_8hpp__dep__incl.map +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/traveler_8hpp__dep__incl.md5 b/docs/traveler_8hpp__dep__incl.md5 deleted file mode 100644 index c0ea07249..000000000 --- a/docs/traveler_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4df9ba322b602e1c336d96929480cd00 \ No newline at end of file diff --git a/docs/traveler_8hpp__dep__incl.png b/docs/traveler_8hpp__dep__incl.png deleted file mode 100644 index c5596cce5..000000000 Binary files a/docs/traveler_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/traveler_8hpp__incl.map b/docs/traveler_8hpp__incl.map deleted file mode 100644 index fd947db8c..000000000 --- a/docs/traveler_8hpp__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/traveler_8hpp__incl.md5 b/docs/traveler_8hpp__incl.md5 deleted file mode 100644 index 0ff54df58..000000000 --- a/docs/traveler_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -62a1994e41169451ee1807dd95288a5d \ No newline at end of file diff --git a/docs/traveler_8hpp__incl.png b/docs/traveler_8hpp__incl.png deleted file mode 100644 index c0cc04e4b..000000000 Binary files a/docs/traveler_8hpp__incl.png and /dev/null differ diff --git a/docs/traveler_8hpp_source.html b/docs/traveler_8hpp_source.html deleted file mode 100644 index d22978e83..000000000 --- a/docs/traveler_8hpp_source.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Tenncor: ade/traveler.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    traveler.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include "estd/estd.hpp"
    10 #include "estd/range.hpp"
    11 
    12 #include "ade/ileaf.hpp"
    13 #include "ade/ifunctor.hpp"
    14 
    15 #ifndef ADE_TRAVELER_HPP
    16 #define ADE_TRAVELER_HPP
    17 
    18 namespace ade
    19 {
    20 
    22 struct OnceTraveler : public iTraveler
    23 {
    24  virtual ~OnceTraveler (void) = default;
    25 
    27  void visit (iLeaf* leaf) override
    28  {
    29  if (false == estd::has(visited_, leaf))
    30  {
    31  visited_.emplace(leaf);
    32  visit_leaf(leaf);
    33  }
    34  }
    35 
    37  void visit (iFunctor* func) override
    38  {
    39  if (false == estd::has(visited_, func))
    40  {
    41  visited_.emplace(func);
    42  visit_func(func);
    43  }
    44  }
    45 
    46  virtual void visit_leaf (iLeaf* leaf) {} // do nothing
    47 
    48  virtual void visit_func (iFunctor* func)
    49  {
    50  auto& children = func->get_children();
    51  for (auto child : children)
    52  {
    53  child.get_tensor()->accept(*this);
    54  }
    55  }
    56 
    57  std::unordered_set<iTensor*> visited_;
    58 };
    59 
    61 struct GraphStat final : public iTraveler
    62 {
    64  void visit (iLeaf* leaf) override
    65  {
    66  graphsize_.emplace(leaf, estd::NumRange<size_t>());
    67  }
    68 
    70  void visit (iFunctor* func) override
    71  {
    72  if (false == estd::has(graphsize_, func))
    73  {
    74  ArgsT children = func->get_children();
    75  size_t nchildren = children.size();
    76  std::vector<size_t> max_heights;
    77  std::vector<size_t> min_heights;
    78  max_heights.reserve(nchildren);
    79  min_heights.reserve(nchildren);
    80  for (auto& child : children)
    81  {
    82  iTensor* tens = child.get_tensor().get();
    83  tens->accept(*this);
    84  estd::NumRange<size_t> range = estd::must_getf(graphsize_, tens,
    85  "GraphStat failed to visit child `%s` of functor `%s`",
    86  tens->to_string().c_str(), func->to_string().c_str());
    87  max_heights.push_back(range.upper_);
    88  min_heights.push_back(range.lower_);
    89  }
    90  size_t max_height = 1;
    91  size_t min_height = 1;
    92  auto max_it = std::max_element(
    93  max_heights.begin(), max_heights.end());
    94  auto min_it = std::min_element(
    95  min_heights.begin(), min_heights.end());
    96  if (max_heights.end() != max_it)
    97  {
    98  max_height += *max_it;
    99  }
    100  if (min_heights.end() != max_it)
    101  {
    102  min_height += *min_it;
    103  }
    104  graphsize_.emplace(func, estd::NumRange<size_t>(min_height, max_height));
    105  }
    106  }
    107 
    108  // Maximum depth of the subtree of mapped tensors
    109  std::unordered_map<iTensor*,estd::NumRange<size_t>> graphsize_;
    110 };
    111 
    117 struct PathFinder final : public iTraveler
    118 {
    120  using ParentMapT = std::unordered_map<iTensor*,std::unordered_set<size_t>>;
    121 
    122  PathFinder (const iTensor* target) : target_(target) {}
    123 
    125  void visit (iLeaf* leaf) override {}
    126 
    128  void visit (iFunctor* func) override
    129  {
    130  if (false == estd::has(parents_, func))
    131  {
    132  auto& children = func->get_children();
    133  size_t n = children.size();
    134  std::unordered_set<size_t> path;
    135  for (size_t i = 0; i < n; ++i)
    136  {
    137  TensptrT tens = children[i].get_tensor();
    138  if (tens.get() == target_)
    139  {
    140  path.emplace(i);
    141  }
    142  else
    143  {
    144  tens->accept(*this);
    145  if (estd::has(parents_, tens.get()))
    146  {
    147  path.emplace(i);
    148  }
    149  }
    150  }
    151  if (false == path.empty())
    152  {
    153  parents_[func] = path;
    154  }
    155  }
    156  }
    157 
    159  const iTensor* target_;
    160 
    163 };
    164 
    166 struct ParentFinder final : public iTraveler
    167 {
    168  using ParentMapT = std::unordered_map<iTensor*,std::vector<size_t>>;
    169 
    171  void visit (iLeaf* leaf) override
    172  {
    173  parents_.emplace(leaf, ParentMapT());
    174  }
    175 
    177  void visit (iFunctor* func) override
    178  {
    179  if (false == estd::has(parents_, func))
    180  {
    181  auto& children = func->get_children();
    182  for (size_t i = 0, n = children.size(); i < n; ++i)
    183  {
    184  auto& child = children[i];
    185  auto tens = child.get_tensor();
    186  tens->accept(*this);
    187  parents_[tens.get()][func].push_back(i);
    188  }
    189  parents_.emplace(func, ParentMapT());
    190  }
    191  }
    192 
    194  std::unordered_map<iTensor*,ParentMapT> parents_;
    195 };
    196 
    198 using OwnerMapT = std::unordered_map<iTensor*,TensrefT>;
    199 
    203 
    205 {
    206  HeightMatrix (const ade::TensT& roots)
    207  {
    208  ade::GraphStat stat;
    209  for (ade::TensptrT root : roots)
    210  {
    211  root->accept(stat);
    212  }
    213 
    214  std::vector<size_t> root_heights;
    215  root_heights.reserve(roots.size());
    216  std::transform(roots.begin(), roots.end(),
    217  std::back_inserter(root_heights),
    218  [&stat](const ade::TensptrT& root)
    219  {
    220  return stat.graphsize_[root.get()].upper_;
    221  });
    222  // max of the maxheight of roots should be the maxheight of the whole graph
    223  size_t maxheight = *std::max_element(
    224  root_heights.begin(), root_heights.end());
    225  funcs_ = std::vector<std::unordered_set<ade::iFunctor*>>(maxheight);
    226 
    227  for (auto& gpair : stat.graphsize_)
    228  {
    229  auto tens = gpair.first;
    230  size_t height = gpair.second.upper_;
    231  if (0 == height)
    232  {
    233  leaves_.emplace(static_cast<ade::iLeaf*>(tens));
    234  }
    235  else
    236  {
    237  funcs_[height - 1].emplace(static_cast<ade::iFunctor*>(tens));
    238  }
    239  }
    240  }
    241 
    242  std::unordered_set<ade::iLeaf*> leaves_;
    243 
    244  std::vector<std::unordered_set<ade::iFunctor*>> funcs_;
    245 };
    246 
    247 }
    248 
    249 #endif // ADE_TRAVELER_HPP
    Interface of iOperation-defined operation node.
    Definition: ifunctor.hpp:28
    -
    Extremely generic traveler that visits every node in the graph once.
    Definition: traveler.hpp:22
    -
    PathFinder(const iTensor *target)
    Definition: traveler.hpp:122
    -
    void visit(iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: traveler.hpp:27
    -
    void visit(iFunctor *func) override
    Implementation of iTraveler.
    Definition: traveler.hpp:177
    -
    std::unordered_set< iTensor * > visited_
    Definition: traveler.hpp:57
    -
    void visit(iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: traveler.hpp:64
    -
    Leaf of the graph commonly representing the variable in an equation.
    Definition: ileaf.hpp:19
    -
    void visit(iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: traveler.hpp:171
    -
    HeightMatrix(const ade::TensT &roots)
    Definition: traveler.hpp:206
    -
    virtual void visit_leaf(iLeaf *leaf)
    Definition: traveler.hpp:46
    -
    std::unordered_map< iTensor *, TensrefT > OwnerMapT
    Map between tensor and its corresponding smart pointer.
    Definition: traveler.hpp:198
    -
    std::unordered_map< iTensor *, std::vector< size_t > > ParentMapT
    Definition: traveler.hpp:168
    -
    Traveler that maps each tensor to its subtree&#39;s maximum depth.
    Definition: traveler.hpp:61
    -
    ParentMapT parents_
    Map of parent nodes in path.
    Definition: traveler.hpp:162
    -
    void visit(iFunctor *func) override
    Implementation of iTraveler.
    Definition: traveler.hpp:70
    -
    virtual std::string to_string(void) const =0
    Return the string representation of the tensor.
    -
    virtual void accept(iTraveler &visiter)=0
    Obtain concrete information on either leaf or functor implementations.
    -
    const iTensor * target_
    Target of tensor all paths are travelling to.
    Definition: traveler.hpp:159
    -
    std::unordered_map< iTensor *, ParentMapT > parents_
    Tracks child to parents relationship.
    Definition: traveler.hpp:194
    -
    Definition: traveler.hpp:117
    -
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    -
    Definition: coord.hpp:16
    -
    virtual void visit_func(iFunctor *func)
    Definition: traveler.hpp:48
    -
    Definition: traveler.hpp:204
    -
    Interface to travel through graph, treating iLeaf and iFunctor differently.
    Definition: itensor.hpp:22
    -
    Interface of traversible and differentiable nodes with shape information.
    Definition: itensor.hpp:34
    -
    void visit(iFunctor *func) override
    Implementation of iTraveler.
    Definition: traveler.hpp:37
    -
    virtual const ArgsT & get_children(void) const =0
    Return children nodes as a vector of raw pointers.
    -
    std::vector< std::unordered_set< ade::iFunctor * > > funcs_
    Definition: traveler.hpp:244
    -
    void visit(iFunctor *func) override
    Implementation of iTraveler.
    Definition: traveler.hpp:128
    -
    std::unordered_set< ade::iLeaf * > leaves_
    Definition: traveler.hpp:242
    -
    std::vector< TensptrT > TensT
    Vector representation of ade tensor pointers.
    Definition: funcarg.hpp:104
    -
    Traveler that for each child tracks the relationship to all parents.
    Definition: traveler.hpp:166
    -
    std::unordered_map< iTensor *, std::unordered_set< size_t > > ParentMapT
    Type for mapping function nodes in path to boolean vector.
    Definition: traveler.hpp:120
    -
    virtual ~OnceTraveler(void)=default
    - -
    void visit(iLeaf *leaf) override
    Implementation of iTraveler.
    Definition: traveler.hpp:125
    - -
    std::unordered_map< iTensor *, estd::NumRange< size_t > > graphsize_
    Definition: traveler.hpp:109
    -
    std::vector< FuncArg > ArgsT
    Type of functor arguments.
    Definition: funcarg.hpp:101
    -
    OwnerMapT track_owners(TensT roots)
    -
    - - - - diff --git a/docs/tree_8hpp.html b/docs/tree_8hpp.html deleted file mode 100644 index 4c5f2e254..000000000 --- a/docs/tree_8hpp.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/tree.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    tree.hpp File Reference
    -
    -
    -
    #include <functional>
    -#include <iostream>
    -#include <string>
    -
    -Include dependency graph for tree.hpp:
    -
    -
    -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    struct  PrettyTree< T >
     
    - - - -

    -Variables

    const char vert_branch = '-'
     
    -

    Variable Documentation

    - -

    ◆ vert_branch

    - -
    -
    - - - - -
    const char vert_branch = '-'
    -
    -

    tree.hpp dbg

    -

    Purpose: Draw a generic tree/graph structure as an ascii tree

    - -
    -
    -
    - - - - diff --git a/docs/tree_8hpp__dep__incl.map b/docs/tree_8hpp__dep__incl.map deleted file mode 100644 index 49bc66a2c..000000000 --- a/docs/tree_8hpp__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/tree_8hpp__dep__incl.md5 b/docs/tree_8hpp__dep__incl.md5 deleted file mode 100644 index 5c64a950d..000000000 --- a/docs/tree_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -92d719c291f4c85ef5db4eb1b6dda3c0 \ No newline at end of file diff --git a/docs/tree_8hpp__dep__incl.png b/docs/tree_8hpp__dep__incl.png deleted file mode 100644 index a2e9b0fbf..000000000 Binary files a/docs/tree_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/tree_8hpp__incl.map b/docs/tree_8hpp__incl.map deleted file mode 100644 index 818f5a30b..000000000 --- a/docs/tree_8hpp__incl.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/tree_8hpp__incl.md5 b/docs/tree_8hpp__incl.md5 deleted file mode 100644 index 73a904ff6..000000000 --- a/docs/tree_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5d3765fc35851f4b0ad7e93ed64ecff0 \ No newline at end of file diff --git a/docs/tree_8hpp__incl.png b/docs/tree_8hpp__incl.png deleted file mode 100644 index f4c358c6e..000000000 Binary files a/docs/tree_8hpp__incl.png and /dev/null differ diff --git a/docs/tree_8hpp_source.html b/docs/tree_8hpp_source.html deleted file mode 100644 index c27b0a27a..000000000 --- a/docs/tree_8hpp_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Tenncor: dbg/stream/tree.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    tree.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    9 #include <functional>
    10 #include <iostream>
    11 #include <string>
    12 
    13 #ifndef DBG_TREE_HPP
    14 #define DBG_TREE_HPP
    15 
    16 const char vert_branch = '-';
    17 
    21 template <typename T>
    22 struct PrettyTree final
    23 {
    26  PrettyTree (std::function<std::vector<T>(T&)> traverser,
    27  std::function<void(std::ostream&,T&)> to_stream) :
    28  traverser_(traverser), to_stream_(to_stream) {}
    29 
    33  void print (std::ostream& out, T root)
    34  {
    35  print_helper(out, root, "");
    36  }
    37 
    39  size_t branch_length_ = 2;
    40 
    42  std::function<std::vector<T>(T&)> traverser_;
    43 
    45  std::function<void(std::ostream&,T&)> to_stream_;
    46 
    47 private:
    48  void print_helper (std::ostream& out, T root, std::string prefix)
    49  {
    50  out << "(";
    51  to_stream_(out, root);
    52  out << ")\n";
    53  std::vector<T> children = traverser_(root);
    54  size_t nchildren = children.size();
    55  if (nchildren > 0)
    56  {
    57  std::string branch = prefix + " `" +
    58  std::string(branch_length_, vert_branch);
    59  for (size_t i = 0; i < nchildren - 1; ++i)
    60  {
    61  out << branch;
    62  this->print_helper(out, children[i],
    63  prefix + " |" + std::string(branch_length_, ' '));
    64  }
    65  out << branch;
    66  this->print_helper(out, children[nchildren - 1],
    67  prefix + std::string(2 + branch_length_, ' '));
    68  }
    69  }
    70 };
    71 
    72 #endif // DBG_TREE_HPP
    std::function< void(std::ostream &, T &)> to_stream_
    Behavior of displaying a node in the structure.
    Definition: tree.hpp:45
    -
    const char vert_branch
    Definition: tree.hpp:16
    -
    void print_helper(std::ostream &out, T root, std::string prefix)
    Definition: tree.hpp:48
    -
    void print(std::ostream &out, T root)
    Definition: tree.hpp:33
    -
    size_t branch_length_
    Horizontal length of the branch, by default the branch looks like `–.
    Definition: tree.hpp:39
    -
    Definition: tree.hpp:22
    -
    std::function< std::vector< T >T &)> traverser_
    Behavior of traversing through a structure.
    Definition: tree.hpp:42
    -
    PrettyTree(std::function< std::vector< T >(T &)> traverser, std::function< void(std::ostream &, T &)> to_stream)
    Definition: tree.hpp:26
    -
    - - - - diff --git a/docs/variable_8hpp.html b/docs/variable_8hpp.html deleted file mode 100644 index f586d3afc..000000000 --- a/docs/variable_8hpp.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Tenncor: ead/variable.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    variable.hpp File Reference
    -
    -
    -
    #include "ead/ileaf.hpp"
    -#include "ead/inode.hpp"
    -
    -Include dependency graph for variable.hpp:
    -
    -
    - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - -

    -Classes

    struct  ead::Variable< T >
     Leaf node containing data. More...
     
    struct  ead::VariableNode< T >
     
    - - - -

    -Namespaces

     ead
     
    - - - - -

    -Typedefs

    template<typename T >
    using ead::VarptrT = std::shared_ptr< VariableNode< T > >
     
    - - - - - - - - - - - - - -

    -Functions

    template<typename T >
    NodeptrT< T > ead::convert_to_node (VarptrT< T > var)
     
    template<typename T >
    VarptrT< T > ead::make_variable_scalar (T scalar, ade::Shape shape, std::string label="")
     
    template<typename T >
    VarptrT< T > ead::make_variable (ade::Shape shape, std::string label="")
     
    template<typename T >
    VarptrT< T > ead::make_variable (T *data, ade::Shape shape, std::string label="")
     
    -
    - - - - diff --git a/docs/variable_8hpp__dep__incl.map b/docs/variable_8hpp__dep__incl.map deleted file mode 100644 index 490378f37..000000000 --- a/docs/variable_8hpp__dep__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/variable_8hpp__dep__incl.md5 b/docs/variable_8hpp__dep__incl.md5 deleted file mode 100644 index 2344388f7..000000000 --- a/docs/variable_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b170eeb0824b90cf5a71799db1937750 \ No newline at end of file diff --git a/docs/variable_8hpp__dep__incl.png b/docs/variable_8hpp__dep__incl.png deleted file mode 100644 index 5180eeea9..000000000 Binary files a/docs/variable_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/variable_8hpp__incl.map b/docs/variable_8hpp__incl.map deleted file mode 100644 index 6f0d58192..000000000 --- a/docs/variable_8hpp__incl.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/variable_8hpp__incl.md5 b/docs/variable_8hpp__incl.md5 deleted file mode 100644 index 13875362a..000000000 --- a/docs/variable_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f027333cda74624061f1a2ea2ba3c456 \ No newline at end of file diff --git a/docs/variable_8hpp__incl.png b/docs/variable_8hpp__incl.png deleted file mode 100644 index 26b4e50ca..000000000 Binary files a/docs/variable_8hpp__incl.png and /dev/null differ diff --git a/docs/variable_8hpp_source.html b/docs/variable_8hpp_source.html deleted file mode 100644 index bf7a2d045..000000000 --- a/docs/variable_8hpp_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Tenncor: ead/variable.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    variable.hpp
    -
    -
    -Go to the documentation of this file.
    1 
    10 #include "ead/ileaf.hpp"
    11 #include "ead/inode.hpp"
    12 
    13 #ifndef EAD_VARIABLE_HPP
    14 #define EAD_VARIABLE_HPP
    15 
    16 namespace ead
    17 {
    18 
    20 template <typename T>
    21 struct Variable final : public iLeaf<T>
    22 {
    23  static Variable<T>* get (T* ptr, ade::Shape shape, std::string label = "");
    24 
    25  static Variable<T>* get (ade::Shape shape, std::string label = "")
    26  {
    27  return Variable<T>::get(std::vector<T>(shape.n_elems(), 0),
    28  shape, label);
    29  }
    30 
    31  static Variable<T>* get (T scalar, ade::Shape shape, std::string label = "")
    32  {
    33  if (label.empty())
    34  {
    35  label = fmts::to_string(scalar);
    36  }
    37  return Variable<T>::get(std::vector<T>(shape.n_elems(),scalar),
    38  shape, label);
    39  }
    40 
    41  static Variable<T>* get (std::vector<T> data, ade::Shape shape,
    42  std::string label = "")
    43  {
    44  if (data.size() != shape.n_elems())
    45  {
    46  logs::fatalf("cannot create variable with data size %d "
    47  "against shape %s", data.size(), shape.to_string().c_str());
    48  }
    49  return Variable<T>::get(data.data(), shape, label);
    50  }
    51 
    52  static Variable<T>* get (const Variable<T>& other)
    53  {
    54  return new Variable<T>(other);
    55  }
    56 
    57  static Variable<T>* get (Variable<T>&& other)
    58  {
    59  return new Variable<T>(std::move(other));
    60  }
    61 
    62  Variable<T>& operator = (const Variable<T>& other) = default;
    63 
    64  Variable<T>& operator = (Variable<T>&& other) = default;
    65 
    67  Variable<T>& operator = (std::vector<T> input)
    68  {
    69  size_t ninput = input.size();
    70  if (this->shape_.n_elems() != ninput)
    71  {
    72  logs::fatalf("cannot assign vector of %d elements to "
    73  "internal data of shape %s", ninput,
    74  this->shape_.to_string().c_str());
    75  }
    76  std::memcpy(this->data_.data(), input.data(), ninput * sizeof(T));
    77  return *this;
    78  }
    79 
    81  {
    82  this->data_ = input;
    83  return *this;
    84  }
    85 
    86  void assign (void* input, age::_GENERATED_DTYPE dtype, ade::Shape shape)
    87  {
    88  std::vector<T> data;
    89  age::type_convert(data, input, dtype, shape.n_elems());
    90  this->data_ = make_tensmap<T>(data.data(), shape);;
    91  }
    92 
    94  std::string to_string (void) const override
    95  {
    96  return "variable:" + label_;
    97  }
    98 
    99  bool is_const (void) const override
    100  {
    101  return false;
    102  }
    103 
    105  std::string label_;
    106 
    107 private:
    108  Variable (T* data, ade::Shape shape, std::string label) :
    109  iLeaf<T>(data, shape), label_(label) {}
    110 
    111  Variable (const Variable<T>& other) = default;
    112 
    113  Variable (Variable<T>&& other) = default;
    114 
    115 };
    116 
    117 template <typename T>
    118 struct VariableNode final : public iNode<T>
    119 {
    120  VariableNode (std::shared_ptr<Variable<T>> var) : var_(var) {}
    121 
    122  T* data (void) override
    123  {
    124  return (T*) var_->data();
    125  }
    126 
    127  void update (void) override {}
    128 
    129  ade::TensptrT get_tensor (void) override
    130  {
    131  return var_;
    132  }
    133 
    134  void assign (T* input, ade::Shape shape)
    135  {
    136  var_->assign(input, age::get_type<T>(), shape);
    137  }
    138 
    139  void assign (TensMapT<T>* tensmap)
    140  {
    141  var_->assign(tensmap->data(), age::get_type<T>(), get_shape(*tensmap));
    142  }
    143 
    144  std::string get_label (void) const
    145  {
    146  return var_->label_;
    147  }
    148 
    149 private:
    150  std::shared_ptr<Variable<T>> var_;
    151 };
    152 
    153 template <typename T>
    154 Variable<T>* Variable<T>::get (T* ptr, ade::Shape shape, std::string label)
    155 {
    156  static bool registered = register_builder<Variable<T>,T>(
    157  [](ade::TensptrT tens)
    158  {
    159  return std::make_shared<VariableNode<T>>(
    160  std::static_pointer_cast<Variable<T>>(tens));
    161  });
    162  assert(registered);
    163 
    164  return new Variable<T>(ptr, shape, label);
    165 }
    166 
    167 template <typename T>
    168 using VarptrT = std::shared_ptr<VariableNode<T>>;
    169 
    170 template <typename T>
    172 {
    173  return std::static_pointer_cast<iNode<T>>(var);
    174 }
    175 
    176 template <typename T>
    177 VarptrT<T> make_variable_scalar (T scalar, ade::Shape shape, std::string label = "")
    178 {
    179  return std::make_shared<VariableNode<T>>(
    180  std::shared_ptr<Variable<T>>(Variable<T>::get(scalar, shape, label))
    181  );
    182 }
    183 
    184 template <typename T>
    185 VarptrT<T> make_variable (ade::Shape shape, std::string label = "")
    186 {
    187  return std::make_shared<VariableNode<T>>(
    188  std::shared_ptr<Variable<T>>(Variable<T>::get(shape, label))
    189  );
    190 }
    191 
    192 template <typename T>
    193 VarptrT<T> make_variable (T* data, ade::Shape shape, std::string label = "")
    194 {
    195  return std::make_shared<VariableNode<T>>(
    196  std::shared_ptr<Variable<T>>(Variable<T>::get(data, shape, label))
    197  );
    198 }
    199 
    200 }
    201 
    202 #endif // EAD_VARIABLE_HPP
    VariableNode(std::shared_ptr< Variable< T >> var)
    Definition: variable.hpp:120
    -
    NodeptrT< T > convert_to_node(VarptrT< T > var)
    Definition: variable.hpp:171
    -
    ade::Shape get_shape(const TensorT< T > &tens)
    Definition: eigen.hpp:176
    -
    void assign(void *input, age::_GENERATED_DTYPE dtype, ade::Shape shape)
    Definition: variable.hpp:86
    -
    const ade::Shape & shape(void) const override
    Implementation of iTensor.
    Definition: ileaf.hpp:25
    -
    std::shared_ptr< iNode< T > > NodeptrT
    Definition: inode.hpp:31
    -
    std::string to_string(void) const
    Return string representation of shape.
    Definition: shape.hpp:146
    -
    VarptrT< T > make_variable(ade::Shape shape, std::string label="")
    Definition: variable.hpp:185
    -
    Definition: constant.hpp:9
    -
    std::shared_ptr< VariableNode< T > > VarptrT
    Definition: variable.hpp:168
    -
    NElemT n_elems(void) const
    Return the total number of elements represented by the shape.
    Definition: shape.hpp:116
    -
    ade::TensptrT get_tensor(void) override
    Definition: variable.hpp:129
    -
    TensorT< T > data_
    Data Source.
    Definition: ileaf.hpp:69
    -
    Eigen::TensorMap< TensorT< T > > TensMapT
    Definition: eigen.hpp:25
    -
    std::string get_label(void) const
    Definition: variable.hpp:144
    -
    Eigen::Tensor< T, 8 > TensorT
    Definition: eigen.hpp:22
    -
    static Variable< T > * get(T *ptr, ade::Shape shape, std::string label="")
    Definition: variable.hpp:154
    -
    Definition: inode.hpp:14
    -
    ade::Shape shape(void)
    Definition: inode.hpp:18
    -
    std::shared_ptr< iTensor > TensptrT
    Tensor smart pointer.
    Definition: itensor.hpp:49
    - -
    Variable< T > & operator=(const Variable< T > &other)=default
    -
    std::string to_string(void) const override
    Implementation of iTensor.
    Definition: variable.hpp:94
    -
    Definition: shape.hpp:60
    -
    std::shared_ptr< Variable< T > > var_
    Definition: variable.hpp:150
    -
    Definition: variable.hpp:118
    -
    ade::Shape shape_
    Shape utility to avoid excessive conversion between data_.dimensions()
    Definition: ileaf.hpp:72
    - -
    VarptrT< T > make_variable_scalar(T scalar, ade::Shape shape, std::string label="")
    Definition: variable.hpp:177
    -
    void assign(TensMapT< T > *tensmap)
    Definition: variable.hpp:139
    -
    std::string label_
    Label for distinguishing variable nodes.
    Definition: variable.hpp:105
    -
    void update(void) override
    Definition: variable.hpp:127
    -
    Definition: ileaf.hpp:20
    -
    bool is_const(void) const override
    Definition: variable.hpp:99
    -
    T * data(void) override
    Definition: variable.hpp:122
    -
    std::string to_string(const MatrixT &mat)
    Return the string representation of input matrix.
    -
    void * data(void) override
    Implementation of iData.
    Definition: ileaf.hpp:31
    -
    Leaf node containing data.
    Definition: variable.hpp:21
    -
    Variable(T *data, ade::Shape shape, std::string label)
    Definition: variable.hpp:108
    -
    void assign(T *input, ade::Shape shape)
    Definition: variable.hpp:134
    -
    - - - - diff --git a/docs/voter_8hpp.html b/docs/voter_8hpp.html deleted file mode 100644 index 5a8b067ec..000000000 --- a/docs/voter_8hpp.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Tenncor: opt/voter.hpp File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    voter.hpp File Reference
    -
    -
    -
    #include "opt/ivoter.hpp"
    -
    -Include dependency graph for voter.hpp:
    -
    -
    - - - - - - - - - - - - - - - - - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - - - -

    -Classes

    struct  opt::OrdrVoter
     
    struct  opt::CommVoter
     
    struct  opt::VariadicVoter
     
    - - - -

    -Namespaces

     opt
     
    -
    - - - - diff --git a/docs/voter_8hpp__dep__incl.map b/docs/voter_8hpp__dep__incl.map deleted file mode 100644 index 0d81c56ae..000000000 --- a/docs/voter_8hpp__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/voter_8hpp__dep__incl.md5 b/docs/voter_8hpp__dep__incl.md5 deleted file mode 100644 index e85123b29..000000000 --- a/docs/voter_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7350a2bb325a2781d29bd8a1fb77b446 \ No newline at end of file diff --git a/docs/voter_8hpp__dep__incl.png b/docs/voter_8hpp__dep__incl.png deleted file mode 100644 index 60e20a793..000000000 Binary files a/docs/voter_8hpp__dep__incl.png and /dev/null differ diff --git a/docs/voter_8hpp__incl.map b/docs/voter_8hpp__incl.map deleted file mode 100644 index e1e53eada..000000000 --- a/docs/voter_8hpp__incl.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/voter_8hpp__incl.md5 b/docs/voter_8hpp__incl.md5 deleted file mode 100644 index 9198a88e9..000000000 --- a/docs/voter_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -745600f02628338e02bb104d45004764 \ No newline at end of file diff --git a/docs/voter_8hpp__incl.png b/docs/voter_8hpp__incl.png deleted file mode 100644 index aa2b75d04..000000000 Binary files a/docs/voter_8hpp__incl.png and /dev/null differ diff --git a/docs/voter_8hpp_source.html b/docs/voter_8hpp_source.html deleted file mode 100644 index 92fb584ed..000000000 --- a/docs/voter_8hpp_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Tenncor: opt/voter.hpp Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    Tenncor -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    voter.hpp
    -
    -
    -Go to the documentation of this file.
    1 #include "opt/ivoter.hpp"
    2 
    3 #ifndef OPT_VOTER_HPP
    4 #define OPT_VOTER_HPP
    5 
    6 namespace opt
    7 {
    8 
    9 struct OrdrVoter final : public iVoter
    10 {
    11  OrdrVoter (std::string label) : label_(label) {}
    12 
    13  void emplace (VoterArgsT args, Symbol sym) override
    14  {
    15  args_.emplace(args, sym);
    16  }
    17 
    18  CandsT inspect (const CandArgsT& args) const override
    19  {
    20  CandsT out;
    21  out.reserve(args_.size());
    22  for (const auto& vpair : args_)
    23  {
    24  CtxsT ctxs;
    25  const VoterArgsT& vargs = vpair.first;
    26  if (vargs.size() != args.size())
    27  {
    28  continue;
    29  }
    30  if ([&]() -> bool
    31  {
    32  for (size_t i = 0, n = args.size(); i < n; ++i)
    33  {
    34  if (false == vargs[i].match(ctxs, args[i]))
    35  {
    36  return true;
    37  }
    38  }
    39  return false;
    40  }())
    41  {
    42  // failure to match one of the arguments
    43  continue;
    44  }
    45  out[vpair.second].insert(ctxs.begin(), ctxs.end());
    46  }
    47  return out;
    48  }
    49 
    50  std::string label_;
    51 
    52  std::unordered_map<VoterArgsT,Symbol,OrdrHasher> args_;
    53 };
    54 
    55 // todo: ensure comm voters are inspected after all available ordr voters are inspected (optimization)
    56 struct CommVoter final : public iVoter
    57 {
    58  CommVoter (std::string label) : label_(label) {}
    59 
    60  void emplace (VoterArgsT args, Symbol sym) override
    61  {
    62  // sort args
    63  SegVArgs segs;
    64  for (VoterArg& arg : args)
    65  {
    66  switch (arg.type_)
    67  {
    69  segs.scalars_.push_back(arg);
    70  break;
    72  segs.branches_.push_back(arg);
    73  break;
    75  default:
    76  segs.anys_.push_back(arg);
    77  }
    78  }
    79  if (segs.branches_.size() > 1)
    80  {
    81  logs::fatal("implementation limit: "
    82  "cannot have more than 1 operator as an argument of the "
    83  "commutative operator for the source subgraph");
    84  }
    85  sort_vargs(segs.scalars_);
    86  sort_vargs(segs.anys_);
    87  args_.emplace(segs, sym);
    88  }
    89 
    90  CandsT inspect (const CandArgsT& args) const override
    91  {
    92  CandsT out;
    93  out.reserve(args_.size());
    94  for (const auto& vpair : args_)
    95  {
    96  const SegVArgs& vargs = vpair.first;
    97  if (vargs.size() != args.size())
    98  {
    99  continue;
    100  }
    101  CtxsT ctxs;
    102  std::list<CandArg> unmatched(args.begin(), args.end());
    103  // attempt matching scalars first
    104  bool match_failed = false;
    105  for (const VoterArg& sarg : vargs.scalars_)
    106  {
    107  match_failed = true;
    108  for (auto it = unmatched.begin(), et = unmatched.end();
    109  it != et; ++it)
    110  {
    111  if (sarg.match(ctxs, *it))
    112  {
    113  unmatched.erase(it);
    114  match_failed = false;
    115  break;
    116  }
    117  }
    118  if (match_failed)
    119  {
    120  break;
    121  }
    122  }
    123  // none of the unmatched args matched
    124  // a scalar voter argument
    125  if (match_failed)
    126  {
    127  continue;
    128  }
    129 
    130  for (const VoterArg& barg : vargs.branches_)
    131  {
    132  match_failed = true;
    133  for (auto it = unmatched.begin(), et = unmatched.end();
    134  it != et; ++it)
    135  {
    136  if (barg.match(ctxs, *it))
    137  {
    138  unmatched.erase(it);
    139  match_failed = false;
    140  break;
    141  }
    142  }
    143  if (match_failed)
    144  {
    145  break;
    146  }
    147  }
    148  // none of the unmatched args matched
    149  // a branch voter argument
    150  if (match_failed)
    151  {
    152  continue;
    153  }
    154 
    155  // create permutations of remaining against anys matches
    156  std::vector<CandArg> remaining(unmatched.begin(), unmatched.end());
    157  size_t nremaining = remaining.size();
    158  std::vector<size_t> indices(nremaining);
    159  std::iota(indices.begin(), indices.end(), 0);
    160  do
    161  {
    162  bool matched = true;
    163  CtxsT local_ctxs = ctxs;
    164  for (size_t i = 0; i < nremaining && matched; ++i)
    165  {
    166  matched = vargs.anys_[i].match(local_ctxs,
    167  remaining[indices[i]]);
    168  }
    169  if (false == matched)
    170  {
    171  continue;
    172  }
    173  out[vpair.second].insert(local_ctxs.begin(), local_ctxs.end());
    174  }
    175  while (std::next_permutation(indices.begin(), indices.end()));
    176  }
    177  return out;
    178  }
    179 
    180  std::string label_;
    181 
    182  std::unordered_map<SegVArgs,Symbol,CommHasher> args_;
    183 };
    184 
    185 struct VariadicVoter final : public iVoter
    186 {
    187  VariadicVoter (std::string label, std::string variadic) :
    188  label_(label), variadic_(variadic) {}
    189 
    190  void emplace (VoterArgsT args, Symbol sym) override
    191  {
    192  // sort args
    193  SegVArgs segs;
    194  for (VoterArg& arg : args)
    195  {
    196  switch (arg.type_)
    197  {
    199  segs.scalars_.push_back(arg);
    200  break;
    202  segs.branches_.push_back(arg);
    203  break;
    205  default:
    206  segs.anys_.push_back(arg);
    207  }
    208  }
    209  if (segs.branches_.size() > 1)
    210  {
    211  logs::fatal("implementation limit: "
    212  "cannot have more than 1 operator as an argument of the "
    213  "commutative operator for the source subgraph");
    214  }
    215  sort_vargs(segs.scalars_);
    216  sort_vargs(segs.anys_);
    217  args_.emplace(segs, sym);
    218  }
    219 
    220  CandsT inspect (const CandArgsT& args) const override
    221  {
    222  CandsT out;
    223  out.reserve(args_.size());
    224  for (const auto& vpair : args_)
    225  {
    226  const SegVArgs& vargs = vpair.first;
    227  if (vargs.size() > args.size())
    228  {
    229  // not enough voter arguments to match candidate arguments
    230  continue;
    231  }
    232  CtxsT ctxs;
    233  std::list<CandArg> unmatched(args.begin(), args.end());
    234  // attempt matching scalars first
    235  bool match_failed = false;
    236  for (const VoterArg& sarg : vargs.scalars_)
    237  {
    238  match_failed = true;
    239  for (auto it = unmatched.begin(), et = unmatched.end();
    240  it != et; ++it)
    241  {
    242  if (sarg.match(ctxs, *it))
    243  {
    244  unmatched.erase(it);
    245  match_failed = false;
    246  break;
    247  }
    248  }
    249  if (match_failed)
    250  {
    251  break;
    252  }
    253  }
    254  // none of the unmatched args matched
    255  // a scalar voter argument
    256  if (match_failed)
    257  {
    258  continue;
    259  }
    260 
    261  for (const VoterArg& barg : vargs.branches_)
    262  {
    263  match_failed = true;
    264  for (auto it = unmatched.begin(), et = unmatched.end();
    265  it != et; ++it)
    266  {
    267  if (barg.match(ctxs, *it))
    268  {
    269  unmatched.erase(it);
    270  match_failed = false;
    271  break;
    272  }
    273  }
    274  if (match_failed)
    275  {
    276  break;
    277  }
    278  }
    279  // none of the unmatched args matched
    280  // a branch voter argument
    281  if (match_failed)
    282  {
    283  continue;
    284  }
    285 
    286  // create permutations of remaining against anys matches
    287  std::vector<CandArg> remaining(unmatched.begin(), unmatched.end());
    288  size_t nremaining = remaining.size();
    289  std::vector<size_t> indices(nremaining);
    290  std::iota(indices.begin(), indices.end(), 0);
    291 
    292  size_t nanys = vargs.anys_.size();
    293  do
    294  {
    295  // select first nanys indices,
    296  // and dump remaining as variadic
    297  bool matched = true;
    298  CtxsT local_ctxs = ctxs;
    299  for (size_t i = 0; i < nanys && matched; ++i)
    300  {
    301  matched = vargs.anys_[i].match(local_ctxs,
    302  remaining[indices[i]]);
    303  }
    304  if (false == matched)
    305  {
    306  continue;
    307  }
    308  CtxValT cvals;
    309  for (size_t i = nanys; i < nremaining; ++i)
    310  {
    311  // dump remaining[indices[i]] as variadic
    312  cvals.emplace(remaining[indices[i]].tensor_); // todo: also store coorder and shaper
    313  }
    314  CtxsT& out_ctxs = out[vpair.second];
    315  for (ContexT ctx : local_ctxs)
    316  {
    317  ctx.emplace(variadic_, cvals);
    318  out_ctxs.emplace(ctx);
    319  }
    320  }
    321  while (std::next_permutation(indices.begin(), indices.end()));
    322  }
    323  return out;
    324  }
    325 
    326  std::string label_;
    327 
    328  std::string variadic_;
    329 
    330  std::unordered_map<SegVArgs,Symbol,CommHasher> args_;
    331 };
    332 
    333 }
    334 
    335 #endif // OPT_VOTER_HPP
    std::set< ade::TensptrT > CtxValT
    Definition: candidate.hpp:14
    -
    std::string label_
    Definition: voter.hpp:180
    -
    CandsT inspect(const CandArgsT &args) const override
    Definition: voter.hpp:220
    -
    args
    Definition: csv_to_png.py:105
    -
    VariadicVoter(std::string label, std::string variadic)
    Definition: voter.hpp:187
    -
    VoterArgsT branches_
    Definition: ivoter.hpp:141
    -
    std::unordered_map< SegVArgs, Symbol, CommHasher > args_
    Definition: voter.hpp:182
    -
    std::string label_
    Definition: voter.hpp:50
    -
    std::string variadic_
    Definition: voter.hpp:328
    -
    Definition: candidate.hpp:11
    -
    std::unordered_map< VoterArgsT, Symbol, OrdrHasher > args_
    Definition: voter.hpp:52
    -
    VoterArgsT anys_
    Definition: ivoter.hpp:143
    -
    Definition: def.h:20
    -
    void emplace(VoterArgsT args, Symbol sym) override
    Definition: voter.hpp:190
    -
    std::unordered_set< ContexT, boost::hash< ContexT > > CtxsT
    Definition: candidate.hpp:18
    -
    std::vector< CandArg > CandArgsT
    Definition: candidate.hpp:67
    -
    void emplace(VoterArgsT args, Symbol sym) override
    Definition: voter.hpp:60
    -
    Definition: voter.hpp:185
    -
    void emplace(VoterArgsT args, Symbol sym) override
    Definition: voter.hpp:13
    -
    Definition: ivoter.hpp:132
    -
    std::map< std::string, CtxValT > ContexT
    Definition: candidate.hpp:16
    -
    Definition: def.h:19
    -
    std::unordered_map< Symbol, CtxsT, SymbolHash > CandsT
    Definition: candidate.hpp:54
    -
    VoterArgsT scalars_
    Definition: ivoter.hpp:139
    -
    void sort_vargs(VoterArgsT &args)
    -
    Definition: ivoter.hpp:208
    -
    CommVoter(std::string label)
    Definition: voter.hpp:58
    -
    std::string label_
    Definition: voter.hpp:326
    -
    CandsT inspect(const CandArgsT &args) const override
    Definition: voter.hpp:18
    -
    Definition: candidate.hpp:28
    - -
    OrdrVoter(std::string label)
    Definition: voter.hpp:11
    -
    size_t size(void) const
    Definition: ivoter.hpp:134
    -
    std::vector< VoterArg > VoterArgsT
    Definition: ivoter.hpp:130
    -
    std::unordered_map< SegVArgs, Symbol, CommHasher > args_
    Definition: voter.hpp:330
    -
    CandsT inspect(const CandArgsT &args) const override
    Definition: voter.hpp:90
    -
    Definition: voter.hpp:9
    -
    Definition: def.h:18
    -
    Definition: voter.hpp:56
    -
    Definition: ivoter.hpp:14
    -
    bool match(CtxsT &ctxs, const CandArg &arg) const
    Definition: ivoter.hpp:27
    -
    - - - - diff --git a/ead/BUILD.bazel b/ead/BUILD.bazel index ce0353ad5..b090a09f6 100644 --- a/ead/BUILD.bazel +++ b/ead/BUILD.bazel @@ -42,9 +42,19 @@ py_binary( deps = ["//gen:gen"], ) +config_setting( + name = "fast_build", + values = { + "define": "EAD_CFG=MIN", + }, +) + genrule( name = "generated_ead", - srcs = ["//cfg:ead"], + srcs = select({ + "//conditions:default": ["//cfg:ead"], + ":fast_build": ["//cfg:ead_min"] + }), outs = [ "generated/api.hpp", "generated/api.cpp", @@ -56,10 +66,17 @@ genrule( "generated/pyapi_tenncor.cpp", ], tools = ["//ead:agen"], - cmd = "$(location //ead:agen) " + + cmd = select({ + "//conditions:default": "$(location //ead:agen) " + "--cfg $(location //cfg:ead) " + "--out $(@D)/generated " + "--strip_prefix=$$(dirname $(@D))", + + ":fast_build": "$(location //ead:agen) " + + "--cfg $(location //cfg:ead_min) " + + "--out $(@D)/generated " + + "--strip_prefix=$$(dirname $(@D))", + }) ) cc_library( @@ -115,13 +132,14 @@ cc_test( "//ead:ead", "//dbg:stream_out", "@gtest//:gtest", + "@com_github_mingkaic_cppkg//diff:diff", "@com_github_mingkaic_cppkg//exam:exam", ], linkstatic = True, - data = ["//cfg:optimizations"] + glob([ - "data/*.pb", - "data/*.txt", - ]), + data = [ + "//:test_models", + "//cfg:optimizations", + ], ) py_test( diff --git a/ead/constant.hpp b/ead/constant.hpp index e34fe85b7..42e6fbd29 100644 --- a/ead/constant.hpp +++ b/ead/constant.hpp @@ -54,6 +54,7 @@ struct Constant final : public iLeaf return out; } + /// Implementation of iLeaf bool is_const (void) const override { return true; diff --git a/ead/ead.hpp b/ead/ead.hpp index a0adbdcc3..3796d4e13 100644 --- a/ead/ead.hpp +++ b/ead/ead.hpp @@ -1,3 +1,5 @@ #include "ead/grader.hpp" #include "ead/serialize.hpp" #include "ead/session.hpp" + +#include "ead/generated/api.hpp" diff --git a/ead/eigen.hpp b/ead/eigen.hpp index 7c7cc29e1..69af2ae0a 100644 --- a/ead/eigen.hpp +++ b/ead/eigen.hpp @@ -155,7 +155,7 @@ inline MatMapT make_matmap (T* data, const ade::Shape& shape) { if (nullptr == data) { - logs::fatal("cannot get matmap from nullptr");; + logs::fatal("cannot get matmap from nullptr"); } return MatMapT(data, shape.at(1), shape.at(0)); } @@ -167,7 +167,7 @@ inline TensMapT make_tensmap (T* data, const ade::Shape& shape) std::copy(shape.begin(), shape.end(), slist.begin()); if (nullptr == data) { - logs::fatal("cannot get tensmap from nullptr");; + logs::fatal("cannot get tensmap from nullptr"); } return TensMapT(data, slist); } diff --git a/ead/funcarg.hpp b/ead/funcarg.hpp index 55957157a..cdf14e32b 100644 --- a/ead/funcarg.hpp +++ b/ead/funcarg.hpp @@ -120,6 +120,63 @@ FuncArg permute_map (NodeptrT node, std::vector order) return FuncArg(node, ade::permute(order), permute(order)); } +template +FuncArg slice_map (NodeptrT node, ade::RankT offset, + ade::RankT extent, ade::RankT dimension) +{ + if (dimension >= ade::rank_cap) + { + logs::fatalf("cannot slice dimension %d beyond rank_cap %d", + dimension, ade::rank_cap); + } + ade::CoordT slicings; + std::fill(slicings.begin(), slicings.end(), ade::rank_cap); + slicings[0] = offset; + slicings[1] = extent; + slicings[2] = dimension; + return FuncArg(node, + std::make_shared( + [=](ade::MatrixT fwd) + { + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[i][i] = 1; + } + fwd[ade::rank_cap][dimension] = + extent - node->shape().at(dimension); + }), + std::make_shared(slicings, false)); +} + +template +FuncArg pad_map (NodeptrT node, + const std::pair& padding, + ade::RankT dimension) +{ + if (dimension >= ade::rank_cap) + { + logs::fatalf("cannot pad dimension %d beyond rank_cap %d", + dimension, ade::rank_cap); + } + ade::CoordT paddings; + std::fill(paddings.begin(), paddings.end(), ade::rank_cap); + paddings[0] = padding.first; + paddings[1] = padding.second; + paddings[2] = dimension; + return FuncArg(node, + std::make_shared( + [=](ade::MatrixT fwd) + { + for (ade::RankT i = 0; i < ade::rank_cap; ++i) + { + fwd[i][i] = 1; + } + fwd[ade::rank_cap][dimension] = + padding.first + padding.second; + }), + std::make_shared(paddings, false)); +} + } #endif // EAD_FUNCARG_HPP diff --git a/ead/functor.hpp b/ead/functor.hpp index f154af92b..3588dc18c 100644 --- a/ead/functor.hpp +++ b/ead/functor.hpp @@ -202,7 +202,7 @@ Functor* Functor::get (ade::Opcode opcode, ArgsT args) size_t nargs = args.size(); if (0 == nargs) { - logs::fatalf("cannot perform %s with no arguments", + logs::fatalf("cannot perform `%s` with no arguments", opcode.name_.c_str()); } @@ -212,7 +212,7 @@ Functor* Functor::get (ade::Opcode opcode, ArgsT args) ade::Shape ishape = args[i].shape(); if (false == ishape.compatible_after(shape, 0)) { - logs::fatalf("cannot perform %s with incompatible shapes %s " + logs::fatalf("cannot perform `%s` with incompatible shapes %s " "and %s", opcode.name_.c_str(), shape.to_string().c_str(), ishape.to_string().c_str()); } diff --git a/ead/grader.hpp b/ead/grader.hpp index 31bc6b168..5c529c319 100644 --- a/ead/grader.hpp +++ b/ead/grader.hpp @@ -207,7 +207,7 @@ struct GradientBuilder final : public ade::iGradientBuilder case age::MAX: case age::MIN: out = tenncor::eq(NodeConverters::to_node(op), - NodeConverters::to_node(args[arg_idx].get_tensor()))->get_tensor();; + NodeConverters::to_node(args[arg_idx].get_tensor()))->get_tensor(); break; case age::POW: out = (arg_idx==0 ? @@ -224,7 +224,7 @@ struct GradientBuilder final : public ade::iGradientBuilder ) : tenncor::mul(tenncor::log(NodeConverters::to_node(args[0].get_tensor())), NodeConverters::to_node(op)) - )->get_tensor();; + )->get_tensor(); break; case age::SUB: out = make_constant_scalar(arg_idx == 0 ? @@ -414,6 +414,7 @@ struct GradientBuilder final : public ade::iGradientBuilder tenncor::slice(NodeConverters::to_node(supcomp_grad), offset, extent, dimension)); } + break; case age::SELECT: { if (0 == arg_idx) diff --git a/ead/ileaf.hpp b/ead/ileaf.hpp index d4d69d01a..ceeed87a6 100644 --- a/ead/ileaf.hpp +++ b/ead/ileaf.hpp @@ -57,9 +57,6 @@ struct iLeaf : public ade::iLeaf return sizeof(T) * shape_.n_elems(); } - // todo: deprecate (with is_mutable) - virtual bool is_const (void) const = 0; - protected: iLeaf (T* data, ade::Shape shape) : data_(make_tensmap(data, shape)), diff --git a/ead/inode.hpp b/ead/inode.hpp index 376e055c8..55fbc26be 100644 --- a/ead/inode.hpp +++ b/ead/inode.hpp @@ -45,7 +45,7 @@ struct NodeConverters final { const std::type_info& tp = typeid(*tens); return estd::must_getf(builders_, tp.hash_code(), - "unknown tensor type %s with %s dtype", + "unknown tensor type `%s` with `%s` dtype", tp.name(), age::name_type(age::get_type()).c_str())(tens); } diff --git a/ead/operator.hpp b/ead/operator.hpp index 054e6b908..222e1ad7d 100644 --- a/ead/operator.hpp +++ b/ead/operator.hpp @@ -120,6 +120,17 @@ EigenptrT permute (ade::Shape& outshape, const OpArg& in) assert(nullptr != in.coorder_); ade::CoordT reorder; in.coorder_->forward(reorder.begin(), reorder.begin()); + if (is_2d(outshape) && reorder[0] == 1 && reorder[1] == 0) + { + // use matrix when possible + return make_eigenmatrix>, + MatMapT>( + shape_convert(outshape), + [](MatMapT& in) + { + return in.transpose(); + }, make_matmap(in.data_, in.shape_)); + } return make_eigentensor>,TensMapT>( shape_convert(outshape), diff --git a/ead/parse.hpp b/ead/parse.hpp index 9bd0729f7..9e878b0d3 100644 --- a/ead/parse.hpp +++ b/ead/parse.hpp @@ -64,7 +64,7 @@ struct AnyConvr final : public opt::iConverter ade::Shape outshape) const override { const opt::CtxValT& val = estd::must_getf(ctx, any_id_, - "cannot find any id %s in conversion", any_id_.c_str()); + "cannot find any id `%s` in conversion", any_id_.c_str()); if (val.size() != 1) { logs::fatal("context value is not any"); @@ -250,7 +250,7 @@ struct ConverterBuilder final : public opt::iConverterBuilder std::string symbol(sg->val_.any_); if (false == estd::has(ctx.symbols_, symbol)) { - logs::fatalf("undeclared symbol '%s'", symbol.c_str()); + logs::fatalf("undeclared symbol `%s`", symbol.c_str()); } out = std::make_shared>(symbol); } diff --git a/ead/python/ead.cpp b/ead/python/ead.cpp index 70187e766..b9263a340 100644 --- a/ead/python/ead.cpp +++ b/ead/python/ead.cpp @@ -19,6 +19,7 @@ namespace py = pybind11; namespace pyead { +// todo: move these to a common file ade::Shape p2cshape (std::vector& pyshape) { return ade::Shape(std::vector( @@ -40,7 +41,7 @@ std::vector c2pshape (const ade::Shape& cshape) template py::array typedata_to_array (ead::iNode* tnode, py::dtype dtype) { - auto pshape = pyead::c2pshape(tnode->shape()); + auto pshape = c2pshape(tnode->shape()); return py::array(dtype, py::array::ShapeContainer(pshape.begin(), pshape.end()), tnode->data()); @@ -49,7 +50,7 @@ py::array typedata_to_array (ead::iNode* tnode, py::dtype dtype) std::vector arr2vec (ade::Shape& outshape, py::array data) { py::buffer_info info = data.request(); - outshape = pyead::p2cshape(info.shape); + outshape = p2cshape(info.shape); size_t n = outshape.n_elems(); auto dtype = data.dtype(); char kind = dtype.kind(); @@ -120,121 +121,124 @@ PYBIND11_MODULE(ead, m) m.doc() = "ead variables"; // ==== node ==== - py::object node = (py::object) + auto node = (py::class_,ead::NodeptrT>) py::module::import("ead.tenncor").attr("NodeptrT"); - ((py::class_,ead::NodeptrT>) node) + node .def("__str__", - [](py::object self) - { - auto dnode = self.cast*>(); - return dnode->get_tensor()->to_string(); - }, - "Return string representation of this tensor instance") + [](py::object self) + { + auto dnode = self.cast*>(); + return dnode->get_tensor()->to_string(); + }, + "Return string representation of this tensor instance") .def("shape", - [](py::object self) - { - auto dnode = self.cast*>(); - ade::Shape shape = dnode->get_tensor()->shape(); - auto pshape = pyead::c2pshape(shape); - std::vector ipshape(pshape.begin(), pshape.end()); - return py::array(ipshape.size(), ipshape.data()); - }, - "Return this instance's shape") + [](py::object self) + { + auto dnode = self.cast*>(); + ade::Shape shape = dnode->get_tensor()->shape(); + auto pshape = pyead::c2pshape(shape); + std::vector ipshape(pshape.begin(), pshape.end()); + return py::array(ipshape.size(), ipshape.data()); + }, + "Return this instance's shape") .def("children", - [](py::object self) - { - auto dnode = self.cast*>(); - std::vector tens; - if (auto f = dynamic_cast( - dnode->get_tensor().get())) + [](py::object self) { - auto args = f->get_children(); - std::transform(args.begin(), args.end(), - std::back_inserter(tens), - [](ade::FuncArg& mten) + auto dnode = self.cast*>(); + std::vector tens; + if (auto f = dynamic_cast( + dnode->get_tensor().get())) { - return mten.get_tensor(); - }); - } - return tens; - }) + auto args = f->get_children(); + std::transform(args.begin(), args.end(), + std::back_inserter(tens), + [](ade::FuncArg& mten) + { + return mten.get_tensor(); + }); + } + return tens; + }) .def("as_tens", - [](py::object self) - { - auto dnode = self.cast*>(); - return dnode->get_tensor(); - }) + [](py::object self) + { + auto dnode = self.cast*>(); + return dnode->get_tensor(); + }) .def("get", - [](py::object self) - { - auto dnode = self.cast*>(); - return pyead::typedata_to_array(dnode, - py::dtype::of()); - }); + [](py::object self) + { + auto dnode = self.cast*>(); + return pyead::typedata_to_array(dnode, + py::dtype::of()); + }); // ==== session ==== py::class_ isess(m, "iSession"); py::class_ session(m, "Session", isess); - py::implicitly_convertible(); - session - .def(py::init()) + isess .def("track", - [](py::object self, ead::NodesT roots) - { - auto sess = self.cast(); - ade::TensT troots; - troots.reserve(roots.size()); - std::transform(roots.begin(), roots.end(), - std::back_inserter(troots), - [](ead::NodeptrT& node) - { - return node->get_tensor(); - }); - sess->track(troots); - }, - "Track node") + [](py::object self, ead::NodesT roots) + { + auto sess = self.cast(); + ade::TensT troots; + troots.reserve(roots.size()); + std::transform(roots.begin(), roots.end(), + std::back_inserter(troots), + [](ead::NodeptrT& node) + { + return node->get_tensor(); + }); + sess->track(troots); + }) .def("update", - [](py::object self, std::vector> nodes) - { - auto sess = self.cast(); - std::unordered_set updates; - for (ead::NodeptrT& node : nodes) + [](py::object self, std::vector> nodes) { - updates.emplace(node->get_tensor().get()); - } - sess->update(updates); - }, - "Calculate every node in the graph given list of updated data nodes", - py::arg("nodes") = std::vector>{}) + auto sess = self.cast(); + std::unordered_set updates; + for (ead::NodeptrT& node : nodes) + { + updates.emplace(node->get_tensor().get()); + } + sess->update(updates); + }, + "Calculate every node in the graph given list of updated data nodes", + py::arg("nodes") = std::vector>{}) .def("update_target", - [](py::object self, std::vector> targeted, - std::vector> updated) - { - auto sess = self.cast(); - std::unordered_set targets; - std::unordered_set updates; - for (ead::NodeptrT& node : targeted) - { - targets.emplace(node->get_tensor().get()); - } - for (ead::NodeptrT& node : updated) + [](py::object self, std::vector> targeted, + std::vector> updated) { - updates.emplace(node->get_tensor().get()); - } - sess->update_target(targets, updates); - }, - "Calculate node relevant to targets in the graph given list of updated data", - py::arg("targets"), py::arg("updated") = std::vector>{}) + auto sess = self.cast(); + std::unordered_set targets; + std::unordered_set updates; + for (ead::NodeptrT& node : targeted) + { + targets.emplace(node->get_tensor().get()); + } + for (ead::NodeptrT& node : updated) + { + updates.emplace(node->get_tensor().get()); + } + sess->update_target(targets, updates); + }, + "Calculate node relevant to targets in the graph given list of updated data", + py::arg("targets"), + py::arg("updated") = std::vector>{}); + + py::implicitly_convertible(); + session + .def(py::init()) .def("optimize", - [](py::object self, std::string filename) - { - auto sess = self.cast(); - opt::OptCtx rules = ead::parse_file("cfg/optimizations.rules"); - sess->optimize(rules); - }, - "Optimize using rules for specified filename"); + [](py::object self, std::string filename) + { + auto sess = self.cast(); + opt::OptCtx rules = ead::parse_file(filename); + sess->optimize(rules); + }, + py::arg("filename") = "cfg/optimizations.rules", + "Optimize using rules for specified filename"); // ==== constant ==== py::class_,std::shared_ptr>> constant( @@ -250,56 +254,61 @@ PYBIND11_MODULE(ead, m) variable .def("assign", - [](py::object self, py::array data) - { - auto var = self.cast*>(); - ade::Shape shape; - std::vector vec = pyead::arr2vec(shape, data); - var->assign(vec.data(), shape); - }, - "Assign numpy data array to variable"); + [](py::object self, py::array data) + { + auto var = self.cast*>(); + ade::Shape shape; + std::vector vec = pyead::arr2vec(shape, data); + var->assign(vec.data(), shape); + }, + "Assign numpy data array to variable"); // ==== inline functions ==== - m.def("scalar_constant", - [](PybindT scalar, std::vector slist) - { - return ead::make_constant_scalar(scalar, - pyead::p2cshape(slist)); - }, - "Return scalar constant node"); - - m.def("constant", - [](py::array data) - { - ade::Shape shape; - std::vector vec = pyead::arr2vec(shape, data); - return ead::make_constant(vec.data(), shape); - }, "Return constant node with data"); - - m.def("scalar_variable", [](PybindT scalar, std::vector slist, std::string label) - { - return ead::make_variable_scalar(scalar, pyead::p2cshape(slist), label); - }, - "Return labelled variable containing numpy data array", - py::arg("scalar"), py::arg("slist"), py::arg("label") = ""); - - m.def("variable", - [](py::array data, std::string label) - { - ade::Shape shape; - std::vector vec = pyead::arr2vec(shape, data); - return ead::make_variable(vec.data(), shape, label); - }, - "Return labelled variable containing numpy data array", - py::arg("data"), py::arg("label") = ""); + m + // constant creation + .def("scalar_constant", + [](PybindT scalar, std::vector slist) + { + return ead::make_constant_scalar(scalar, + pyead::p2cshape(slist)); + }, + "Return scalar constant node") + .def("constant", + [](py::array data) + { + ade::Shape shape; + std::vector vec = pyead::arr2vec(shape, data); + return ead::make_constant(vec.data(), shape); + }, "Return constant node with data") - m.def("derive", &ead::derive, - "Return derivative of first tensor with respect to second tensor (deprecated)"); + // variable creation + .def("scalar_variable", + [](PybindT scalar, std::vector slist, std::string label) + { + return ead::make_variable_scalar(scalar, pyead::p2cshape(slist), label); + }, + "Return labelled variable containing numpy data array", + py::arg("scalar"), + py::arg("slist"), + py::arg("label") = "") + .def("variable", + [](py::array data, std::string label) + { + ade::Shape shape; + std::vector vec = pyead::arr2vec(shape, data); + return ead::make_variable(vec.data(), shape, label); + }, + "Return labelled variable containing numpy data array", + py::arg("data"), + py::arg("label") = "") - m.def("seed", - [](size_t seed) - { - ead::get_engine().seed(seed); - }, - "Seed internal RNG"); + // other stuff + .def("derive", &ead::derive, + "Return derivative of first tensor with respect to second tensor (deprecated)") + .def("seed", + [](size_t seed) + { + ead::get_engine().seed(seed); + }, + "Seed internal RNG"); } diff --git a/ead/random.hpp b/ead/random.hpp index 4a1a7b3f4..30ab3ebce 100644 --- a/ead/random.hpp +++ b/ead/random.hpp @@ -35,7 +35,7 @@ template ::value>::type* GenF unif_gen (const T& a, const T& b) { std::uniform_int_distribution dist(a, b); - return std::bind(dist, get_engine());; + return std::bind(dist, get_engine()); } template ::value>::type* = nullptr> diff --git a/ead/serialize.hpp b/ead/serialize.hpp index d25f47b72..8f6645a20 100644 --- a/ead/serialize.hpp +++ b/ead/serialize.hpp @@ -14,6 +14,7 @@ #include "ead/coord.hpp" #include "ead/constant.hpp" #include "ead/variable.hpp" +#include "ead/functor.hpp" #ifndef EAD_SERIALIZE_HPP #define EAD_SERIALIZE_HPP @@ -43,7 +44,7 @@ static bool is_big_endian(void) struct EADSaver final : public pbm::iSaver { - std::string save_leaf (bool& is_const, ade::iLeaf* leaf) override + std::string save_leaf (ade::iLeaf* leaf) override { char* data = (char*) leaf->data(); size_t nelems = leaf->shape().n_elems(); @@ -93,9 +94,21 @@ struct EADSaver final : public pbm::iSaver }; #define _OUT_GENERIC(realtype)leaf = is_const?\ -make_constant((realtype*) pb, shape)->get_tensor():\ +ade::TensptrT(Constant::get((realtype*) pb, shape)):\ ade::TensptrT(Variable::get((realtype*) pb, shape, label)); +#define _OUT_GENFUNC(realtype){\ +ArgsT eargs;eargs.reserve(args.size());\ +std::transform(args.begin(), args.end(), std::back_inserter(eargs),\ +[](ade::FuncArg arg){\ + return FuncArg(\ + NodeConverters::to_node(arg.get_tensor()),\ + arg.get_shaper(),\ + std::static_pointer_cast(arg.get_coorder()));\ +});\ +func = ade::TensptrT(\ +Functor::get(ade::Opcode{opname, age::get_op(opname)},eargs));} + /// Unmarshal cortenn::Source as Variable containing context of source struct EADLoader final : public pbm::iLoader { @@ -127,7 +140,28 @@ struct EADLoader final : public pbm::iLoader ade::TensptrT generate_func (std::string opname, ade::ArgsT args) override { - return ade::TensptrT(ade::Functor::get(ade::Opcode{opname, age::get_op(opname)}, args)); + if (args.empty()) + { + logs::fatalf("cannot generate func %s without args", opname.c_str()); + } + size_t gencode = age::BAD_TYPE; + auto arg = args[0].get_tensor().get(); + if (auto leaf = dynamic_cast(arg)) + { + gencode = leaf->type_code(); + } + else if (auto func = dynamic_cast(arg)) + { + gencode = func->type_code(); + } + else + { + logs::fatalf("cannot generate func from non-ead tensor arg %s", + arg->to_string().c_str()); + } + ade::TensptrT func = nullptr; + TYPE_LOOKUP(_OUT_GENFUNC, (age::_GENERATED_DTYPE) gencode); + return func; } ade::CoordptrT generate_shaper (std::vector coord) override diff --git a/ead/session.hpp b/ead/session.hpp index 6b073e3a4..69ec63231 100644 --- a/ead/session.hpp +++ b/ead/session.hpp @@ -30,7 +30,7 @@ struct iSession virtual void update_target (TensSetT target, TensSetT updated = {}) = 0; }; -struct SizeT +struct SizeT final { size_t d = 0; @@ -98,6 +98,7 @@ struct Session final : public iSession } } + // this function is expected to be called repeatedly during runtime void update (TensSetT updated = {}, TensSetT ignores = {}) override { std::unordered_map fulfilments; @@ -126,6 +127,7 @@ struct Session final : public iSession } } + // this function is expected to be called repeatedly during runtime void update_target (TensSetT target, TensSetT updated = {}) override { ade::OnceTraveler targetted; @@ -175,6 +177,7 @@ struct Session final : public iSession std::unordered_map> parents_; + // List of operatible nodes and its number of unique children ordered from leaf to root std::vector> requirements_; // todo: test minimal requirements }; diff --git a/ead/test/ptest.py b/ead/test/ptest.py index d7920141e..e66e1a729 100644 --- a/ead/test/ptest.py +++ b/ead/test/ptest.py @@ -102,7 +102,7 @@ def _common_unary_tf(self, shape, api, tf_op): tf_var = tf.Variable(data) tf_out = tf_op(tf_var) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) sess = ead.Session() @@ -177,7 +177,7 @@ def _common_reduce_1d(self, dim_reduce, tf_reduce): var = ead.variable(data, 'var') tf_var = tf.Variable(data) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) out = dim_reduce(var, 1) @@ -219,7 +219,7 @@ def _common_reduce(self, all_reduce, dim_reduce, tf_reduce): var = ead.variable(data, 'var') tf_var = tf.Variable(data) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) out = all_reduce(var) @@ -613,7 +613,7 @@ def test_rl2norm(self): var = ead.variable(data, 'var') tf_var = tf.Variable(data) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) out = tc.reduce_l2norm(var) @@ -674,7 +674,7 @@ def test_matmul(self): tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -777,7 +777,7 @@ def test_convolution(self): fout = out.get() - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_kernel.initializer) @@ -833,7 +833,7 @@ def test_conv2d(self): sess.track([out]) sess.update() - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfoutput = tf.nn.conv2d(tfimage, tfkernel, [1, 1, 1, 1], 'VALID') tfsess.run(tfimage.initializer) @@ -874,7 +874,7 @@ def test_grader_scenario1(self): # REDUCE -> MUL tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -910,7 +910,7 @@ def test_grader_scenario2(self): # EXTEND -> MUL tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -946,7 +946,7 @@ def test_grader_scenario3(self): # PERMUTE -> MUL tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -985,7 +985,7 @@ def test_grader_scenario4(self): # MATMUL -> MUL tf_var2 = tf.Variable(data2) tf_var3 = tf.Variable(data3) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) tfsess.run(tf_var3.initializer) @@ -1025,7 +1025,7 @@ def test_grader_scenario5(self): # MATMUL -> MATMUL tf_var2 = tf.Variable(data2) tf_var3 = tf.Variable(data3) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) tfsess.run(tf_var3.initializer) @@ -1062,7 +1062,7 @@ def test_grader_scenario6(self): # REDUCE -> MATMUL tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -1099,7 +1099,7 @@ def test_grader_scenario7(self): # EXTEND -> MATMUL tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) @@ -1137,7 +1137,7 @@ def test_grader_scenario8(self): var = ead.variable(data, 'var') tf_var = tf.Variable(data) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) out = tc.matmul( @@ -1196,7 +1196,7 @@ def test_grader_scenario9(self): dc = ead.derive(dest, c) tf_da, tf_db, tf_dc = tf.gradients(tf_dest, [tf_a, tf_b, tf_c]) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_a.initializer) tfsess.run(tf_b.initializer) tfsess.run(tf_c.initializer) diff --git a/ead/test/test_serialize.cpp b/ead/test/test_serialize.cpp index ef08dc8f0..ad75e465e 100644 --- a/ead/test/test_serialize.cpp +++ b/ead/test/test_serialize.cpp @@ -4,8 +4,12 @@ #include +#include + #include "gtest/gtest.h" +#include "diff/msg.hpp" + #include "exam/exam.hpp" #include "dbg/stream/ade.hpp" @@ -13,21 +17,21 @@ #include "pbm/save.hpp" #include "pbm/load.hpp" +#include "tag/prop.hpp" + #include "ead/serialize.hpp" #include "ead/ead.hpp" -const std::string testdir = "ead/data"; +const std::string testdir = "models/test"; TEST(SERIALIZE, SaveGraph) { - std::string expect_pbfile = testdir + "/graph.pb"; - std::string got_pbfile = "got_graph.pb"; + std::string expect_pbfile = testdir + "/ead_test.pbx"; + std::string got_pbfile = "got_ead_test.pbx"; cortenn::Graph graph; - std::vector roots; - pbm::PathedMapT labels; ade::Shape in_shape({10, 3}); ade::Shape weight0_shape({9, 10}); ade::Shape bias0_shape({9}); @@ -36,24 +40,31 @@ TEST(SERIALIZE, SaveGraph) ade::Shape out_shape({5,3}); ead::NodeptrT in = ead::make_variable( - std::vector(in_shape.n_elems()).data(), in_shape); + std::vector(in_shape.n_elems()).data(), + in_shape, "in"); ead::NodeptrT weight0 = ead::make_variable( - std::vector(weight0_shape.n_elems()).data(), weight0_shape); + std::vector(weight0_shape.n_elems()).data(), + weight0_shape, "weight0"); ead::NodeptrT bias0 = ead::make_variable( - std::vector(bias0_shape.n_elems()).data(), bias0_shape); + std::vector(bias0_shape.n_elems()).data(), + bias0_shape, "bias0"); ead::NodeptrT weight1 = ead::make_variable( - std::vector(weight1_shape.n_elems()).data(), weight1_shape); + std::vector(weight1_shape.n_elems()).data(), + weight1_shape, "weight1"); ead::NodeptrT bias1 = ead::make_variable( - std::vector(bias1_shape.n_elems()).data(), bias1_shape); + std::vector(bias1_shape.n_elems()).data(), + bias1_shape, "bias1"); ead::NodeptrT out = ead::make_variable( - std::vector(out_shape.n_elems()).data(), out_shape); + std::vector(out_shape.n_elems()).data(), + out_shape, "out"); - labels[in->get_tensor()] = {"global", "training", "in"}; - labels[weight0->get_tensor()] = {"global", "storage", "weight0"}; - labels[bias0->get_tensor()] = {"global", "storage", "bias0"}; - labels[weight1->get_tensor()] = {"global", "storage", "weight1"}; - labels[bias1->get_tensor()] = {"global", "storage", "bias1"}; - labels[out->get_tensor()] = {"global", "training", "out"}; + auto& preg = tag::get_property_reg(); + preg.property_tag(in->get_tensor(), "training_in"); + preg.property_tag(weight0->get_tensor(), "storage_weight0"); + preg.property_tag(bias0->get_tensor(), "storage_bias0"); + preg.property_tag(weight1->get_tensor(), "storage_weight1"); + preg.property_tag(bias1->get_tensor(), "storage_bias1"); + preg.property_tag(out->get_tensor(), "training_out"); auto layer0 = tenncor::add(tenncor::matmul(in, weight0), tenncor::extend(bias0, 1, {3})); auto sig0 = tenncor::div(ead::make_constant_scalar(1, ade::Shape({9, 3})), @@ -72,10 +83,10 @@ TEST(SERIALIZE, SaveGraph) auto dw1 = ead::derive(err, weight1); auto db1 = ead::derive(err, bias1); - labels[dw0->get_tensor()] = {"global", "dw0"}; - labels[db0->get_tensor()] = {"global", "db0"}; - labels[dw1->get_tensor()] = {"global", "dw1"}; - labels[db1->get_tensor()] = {"global", "db1"}; + preg.property_tag(dw0->get_tensor(), "derivative_dw0"); + preg.property_tag(db0->get_tensor(), "derivative_db0"); + preg.property_tag(dw1->get_tensor(), "derivative_dw1"); + preg.property_tag(db1->get_tensor(), "derivative_db1"); pbm::GraphSaver saver; dw0->get_tensor()->accept(saver); @@ -83,6 +94,7 @@ TEST(SERIALIZE, SaveGraph) dw1->get_tensor()->accept(saver); db1->get_tensor()->accept(saver); + pbm::PathedMapT labels; // todo: deprecate labels saver.save(graph, labels); { @@ -92,21 +104,21 @@ TEST(SERIALIZE, SaveGraph) ASSERT_TRUE(graph.SerializeToOstream(&gotstr)); } - std::fstream expect_ifs(expect_pbfile, std::ios::in | std::ios::binary); - std::fstream got_ifs(got_pbfile, std::ios::in | std::ios::binary); - ASSERT_TRUE(expect_ifs.is_open()); - ASSERT_TRUE(got_ifs.is_open()); - - std::string expect; - std::string got; - // skip the first line (it contains timestamp) - expect_ifs >> expect; - got_ifs >> got; - for (size_t lineno = 1; expect_ifs && got_ifs; ++lineno) { - expect_ifs >> expect; - got_ifs >> got; - EXPECT_STREQ(expect.c_str(), got.c_str()) << "line number " << lineno; + std::fstream expect_ifs(expect_pbfile, std::ios::in | std::ios::binary); + std::fstream got_ifs(got_pbfile, std::ios::in | std::ios::binary); + ASSERT_TRUE(expect_ifs.is_open()); + ASSERT_TRUE(got_ifs.is_open()); + + cortenn::Graph expect_graph; + cortenn::Graph got_graph; + ASSERT_TRUE(expect_graph.ParseFromIstream(&expect_ifs)); + ASSERT_TRUE(got_graph.ParseFromIstream(&got_ifs)); + + google::protobuf::util::MessageDifferencer differ; + std::string report; + differ.ReportDifferencesToString(&report); + EXPECT_TRUE(differ.Compare(expect_graph, got_graph)) << report; } } @@ -115,7 +127,7 @@ TEST(SERIALIZE, LoadGraph) { cortenn::Graph in; { - std::fstream inputstr(testdir + "/graph.pb", + std::fstream inputstr(testdir + "/ead_test.pbx", std::ios::in | std::ios::binary); ASSERT_TRUE(inputstr.is_open()); ASSERT_TRUE(in.ParseFromIstream(&inputstr)); @@ -123,45 +135,61 @@ TEST(SERIALIZE, LoadGraph) pbm::GraphInfo out; pbm::load_graph(out, in); - EXPECT_EQ(4, out.roots_.size()); - ASSERT_EQ(1, out.tens_.children_.size()); - ASSERT_EQ(0, out.tens_.tens_.size()); - ASSERT_HAS(out.tens_.children_, "global"); - - auto global = out.tens_.children_["global"]; - ASSERT_EQ(2, global->children_.size()); - ASSERT_EQ(4, global->tens_.size()); - ASSERT_HAS(global->children_, "training"); - ASSERT_HAS(global->children_, "storage"); - ASSERT_HAS(global->tens_, "dw0"); - ASSERT_HAS(global->tens_, "db0"); - ASSERT_HAS(global->tens_, "dw1"); - ASSERT_HAS(global->tens_, "db1"); - - auto training = global->children_["training"]; - auto storage = global->children_["storage"]; - ASSERT_EQ(0, training->children_.size()); - ASSERT_EQ(2, training->tens_.size()); - ASSERT_EQ(0, storage->children_.size()); - ASSERT_EQ(4, storage->tens_.size()); - ASSERT_HAS(training->tens_, "in"); - ASSERT_HAS(training->tens_, "out"); - ASSERT_HAS(storage->tens_, "weight0"); - ASSERT_HAS(storage->tens_, "bias0"); - ASSERT_HAS(storage->tens_, "weight1"); - ASSERT_HAS(storage->tens_, "bias1"); - - auto dw0 = global->tens_["dw0"]; - auto db0 = global->tens_["db0"]; - auto dw1 = global->tens_["dw1"]; - auto db1 = global->tens_["db1"]; - - ASSERT_ARRHAS(out.roots_, dw0); - ASSERT_ARRHAS(out.roots_, db0); - ASSERT_ARRHAS(out.roots_, dw1); - ASSERT_ARRHAS(out.roots_, db1); + auto& reg = tag::get_reg(); + tag::Query q; + + std::vector root_props; + std::unordered_map propdtens; + for (auto tens : out.roots_) + { + tens->accept(q); + auto tags = reg.get_tags(tens.get()); + ASSERT_HAS(tags, tag::props_key); + auto& props = tags[tag::props_key]; + for (auto& prop : props) + { + propdtens.emplace(prop, tens); + } + root_props.insert(root_props.end(), props.begin(), props.end()); + } + EXPECT_ARRHAS(root_props, "derivative_dw0"); + EXPECT_ARRHAS(root_props, "derivative_dw1"); + EXPECT_ARRHAS(root_props, "derivative_db0"); + EXPECT_ARRHAS(root_props, "derivative_db1"); + + ASSERT_HAS(q.labels_, tag::props_key); + auto& props = q.labels_[tag::props_key]; + ASSERT_HAS(props, "training_in"); + ASSERT_HAS(props, "storage_weight0"); + ASSERT_HAS(props, "storage_bias0"); + ASSERT_HAS(props, "storage_weight1"); + ASSERT_HAS(props, "storage_bias1"); + ASSERT_HAS(props, "training_out"); + + auto& tins = props["training_in"]; + auto& w0s = props["storage_weight0"]; + auto& b0s = props["storage_bias0"]; + auto& w1s = props["storage_weight1"]; + auto& b1s = props["storage_bias1"]; + auto& touts = props["training_out"]; + + ASSERT_EQ(1, tins.size()); + ASSERT_EQ(1, w0s.size()); + ASSERT_EQ(1, b0s.size()); + ASSERT_EQ(1, w1s.size()); + ASSERT_EQ(1, b1s.size()); + ASSERT_EQ(1, touts.size()); + + ASSERT_HAS(propdtens, "derivative_dw0"); + ASSERT_HAS(propdtens, "derivative_db0"); + ASSERT_HAS(propdtens, "derivative_dw1"); + ASSERT_HAS(propdtens, "derivative_db1"); + auto dw0 = propdtens["derivative_dw0"]; + auto db0 = propdtens["derivative_db0"]; + auto dw1 = propdtens["derivative_dw1"]; + auto db1 = propdtens["derivative_db1"]; ASSERT_NE(nullptr, dw0); ASSERT_NE(nullptr, db0); @@ -171,14 +199,16 @@ TEST(SERIALIZE, LoadGraph) std::string expect; std::string got; std::string line; - std::ifstream expectstr(testdir + "/graph.txt"); - ASSERT_TRUE(expectstr.is_open()); - while (std::getline(expectstr, line)) { - fmts::trim(line); - if (line.size() > 0) + std::ifstream expectstr(testdir + "/ead_test.txt"); + ASSERT_TRUE(expectstr.is_open()); + while (std::getline(expectstr, line)) { - expect += line + '\n'; + fmts::trim(line); + if (line.size() > 0) + { + expect += line + '\n'; + } } } diff --git a/ead/variable.hpp b/ead/variable.hpp index 46d2d6ea6..563b59ffd 100644 --- a/ead/variable.hpp +++ b/ead/variable.hpp @@ -87,22 +87,23 @@ struct Variable final : public iLeaf { std::vector data; age::type_convert(data, input, dtype, shape.n_elems()); - this->data_ = make_tensmap(data.data(), shape);; + this->data_ = make_tensmap(data.data(), shape); } /// Implementation of iTensor std::string to_string (void) const override { - return "variable:" + label_; + return label_; } + /// Implementation of iLeaf bool is_const (void) const override { return false; } /// Label for distinguishing variable nodes - std::string label_; + std::string label_; // todo: make private private: Variable (T* data, ade::Shape shape, std::string label) : @@ -143,7 +144,7 @@ struct VariableNode final : public iNode std::string get_label (void) const { - return var_->label_; + return var_->to_string(); } private: diff --git a/models/dqnmodel.json b/models/dqnmodel.json new file mode 100644 index 000000000..e155af453 --- /dev/null +++ b/models/dqnmodel.json @@ -0,0 +1,188 @@ +{ + "nodes": [ + { + "label": "weight", + "source": { + "shape": [ + "9", + "10", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "tsT1vlSvqD+qrIm+BhD5Px1aDj+g7TU/ATuUP9q/zj9HWJw/sdjQP4j0xj8DEwy/oiEgQHahaD0o72k/4zv5P7T0uD+E/TU/4pp+PyUivD/AyS6/S5MLQGhihT+U79Q/Jwj0P+jisT/vw/0+BdWSP2sM7D+05mq+k2AhQPppnz+5knc/Gp63P0mxuj9Qs30/mwuHP8R/H0A5uRe+DEMBQEN/aT8dpLE/DFwLQLFw1T98Wps/d6G3P3dxDEAMjpO8LpLqP38Plj993/Y/AbYVQJRcnT9j8eM/fuVCPwxY4j+/iTG/01obQLaQ1j8T3/Y+Hs8QQGIttD/IFqk/GgqIP/oeK0CHUxa+z6EAQLbn/D4m99s/eUYEQKn2jT8SnsI/LkcaPxB85j8Liru+l0ikP/enwT8sMwY/DYXnP7Qv7D9Hsu0/8aREP/iq8D88Xo6+UCs2QND5rj+R9AVANDsdQJ+hB0BCmwxA", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "0::weight:0" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:0:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "9", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "4hp0P1oP9z8Li/u+6O0NQEgpeT+lu7Y/23H5P2lZyz/euKM/", + "typelabel": "FLOAT" + }, + "tags": { + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:0:0" + ] + }, + "layer_dense": { + "labels": [ + "0::bias:0" + ] + } + } + }, + { + "source": { + "shape": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAA==", + "typelabel": "FLOAT", + "isConst": true + }, + "tags": { + "layer_sigmoid": { + "labels": [ + "sigmoid:::0" + ] + }, + "properties": { + "labels": [ + "immutable" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_sigmoid:sigmoid:1" + ] + } + } + }, + { + "label": "weight", + "source": { + "shape": [ + "9", + "9", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "tZO7Pxn5tz8dqQZAEHTcvCRWnr9YXO2/VdNovynS+z5URKw/IkEjQF/H3T/iavc/1FPOPkUU6L9c+gLAEpy0vi4d9z4M/hE/tW/cPylYmT/XZN4/QXRzPiOKkr/jjmW/6JOBPJhUpD4SZis/EpMOQJwe5D8LaBBAKj79PvkReb9gEee/TKVpv1TADj9qvnA/fpgMQCnqCkDSnyVAueUJvlqYyL8TGHm/p6EHvrTbEz/jJ6g/vbrGP+tDAUBADCBAxW13vgGorL+5bZy/KZvUvjjuibwT/2A/3ELzP4Rpvj8WO7c/v8H1PuqcTb/4cwLAUqqgPU6elD7OKpQ/sb7rP11lHEAdBQFAuTF/voDF378CxIG/GOFhvyRZkj7TooA/zz/lPz1rFkBPpAZAyMalvL4zRL9vOQPACE6xvZDWGD9KNsI/", + "typelabel": "FLOAT" + }, + "tags": { + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:1:2" + ] + }, + "layer_dense": { + "labels": [ + "1::weight:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "9", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "xjIDQHt28j8GIQFASIOqPNtJo7+H9cO/P+3HvuLtkT5awpE/", + "typelabel": "FLOAT" + }, + "tags": { + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:1:2" + ] + }, + "layer_dense": { + "labels": [ + "1::bias:0" + ] + } + } + }, + { + "source": { + "shape": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAA==", + "typelabel": "FLOAT", + "isConst": true + }, + "tags": { + "layer_sigmoid": { + "labels": [ + "sigmoid:::0" + ] + }, + "properties": { + "labels": [ + "immutable" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_sigmoid:sigmoid:3" + ] + } + } + } + ] +} diff --git a/models/dqnmodel.pbx b/models/dqnmodel.pbx new file mode 100644 index 000000000..0918f0367 Binary files /dev/null and b/models/dqnmodel.pbx differ diff --git a/models/gdmodel.json b/models/gdmodel.json new file mode 100644 index 000000000..1a9884782 --- /dev/null +++ b/models/gdmodel.json @@ -0,0 +1,188 @@ +{ + "nodes": [ + { + "label": "weight", + "source": { + "shape": [ + "9", + "10", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "u0GGv2yM774bza09kH3oPVHWqr8w0H6/Us4TP6WJeD5uX5m/JHoLvy1oE7/D+LM9QMQ5vehYkr93vZm/pSQ+P0uAtj4u/re/+dMcv7BG679HP4k+V7H3PoVDnz86uwy+dpxsvvRPcT2v3QE+gTHZvtbXyr+2y/I+QAzwPh3ipj/ojEG/qMS3vlan4DwMop8+OyGKvhAruL2GBcY/Lg3HvwOJnb31xiA/l5LRvs/o2D4DOkM9VWMRv66qgz3nXrM/ISfIv1QsEb3JSSA/YSwDv5jEqbx0gQ++8p8fvsOd5j7AClm/g7YjvttunT5hKZm+Oa6qv4Ozwj+b67m+wvv/voIT4z7R1We/EnxcvQzMUD78Www9asyuv0acsD/c98C+nyQ6v5ueDz/KAUO/seaCv8XgTj8Lokm/zyOOP+sDNb3t5lY/Dipuv/8frD7Xa1i/UfVpv34+Ij+Des293x2iP4Zfvj5PLHo/", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "0::weight:0" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:0:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "9", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "StQXQBZ0lD8OYaq+xej9P9BeaL/80ng/FqgtPmLUDcBoV7M9", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "0::bias:0" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:0:0" + ] + } + } + }, + { + "source": { + "shape": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAA==", + "typelabel": "FLOAT", + "isConst": true + }, + "tags": { + "layer_sigmoid": { + "labels": [ + "sigmoid:::0" + ] + }, + "properties": { + "labels": [ + "immutable" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_sigmoid:sigmoid:1" + ] + } + } + }, + { + "label": "weight", + "source": { + "shape": [ + "5", + "9", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "C8jlv2ZtlL+33Ui/aYF7v0bd3b+MzGW/yoJGwNAVjL25Y0E/08IwP4Sq7z5eW0I/rhAyQEeGyr8uNsC/U8QAPnYrTD91kkXA8BuzvmuSAMB3ofu/EV8UQNTU1DuyhvA+1zawP2TU5798CUe/i4wfP8mbyr48lGe/OA63P8kRAr8Kr0u/HgcpwLAlFkB95Yw/bKbOPgIvGD9SbCxAd9sEP5O2+L9NmcM+LCwzvun8Ib9ZPJ4/", + "typelabel": "FLOAT" + }, + "tags": { + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:1:2" + ] + }, + "layer_dense": { + "labels": [ + "1::weight:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "5", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "aKYAQPhQlT4iW9A+5zWVP6YWbr4=", + "typelabel": "FLOAT" + }, + "tags": { + "layer_seqmodel": { + "labels": [ + "demo:layer_dense:1:2" + ] + }, + "layer_dense": { + "labels": [ + "1::bias:0" + ] + } + } + }, + { + "source": { + "shape": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAA==", + "typelabel": "FLOAT", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + }, + "layer_seqmodel": { + "labels": [ + "demo:layer_sigmoid:sigmoid:3" + ] + }, + "layer_sigmoid": { + "labels": [ + "sigmoid:::0" + ] + } + } + } + ] +} diff --git a/models/gdmodel.pbx b/models/gdmodel.pbx new file mode 100644 index 000000000..a93839fb1 Binary files /dev/null and b/models/gdmodel.pbx differ diff --git a/models/rbmmodel.json b/models/rbmmodel.json new file mode 100644 index 000000000..65f6b95e0 --- /dev/null +++ b/models/rbmmodel.json @@ -0,0 +1,240 @@ +{ + "nodes": [ + { + "label": "weight", + "source": { + "shape": [ + "64", + "784", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "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", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "hidden::weight:0" + ] + }, + "layer_rbm": { + "labels": [ + "demo:layer_dense:hidden:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "64", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "M/c4QKLFK0BwXA1A3PcvQBZVN0D7WCxAyCxCQObTJkDGwydAv9UhQIhjG0AlyiRAqU8VQEr/HEAhHhtAt9M4QI67L0ALqCVA7owzQJtPH0CYTixA4IwpQHY6IECsrjNAOJYiQPpkHEAF/iBA2RALQJ7OJEAjOxxAkbsbQAlKLkBJmRVARpI1QDysE0DMNC5As04iQLnEHkCpICNAASUPQJEkE0BE1glAMdEoQHiRG0CpCTFAnooyQOdhMkBKYRZAZ5UZQFQ2MEBknDFAeOYlQJaTOUA44xtAr58uQDU5N0DmmSRAcbcgQPufKUDeUzVAqjw6QJSSJkB8XBtASLkuQA==", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "hidden::bias:0" + ] + }, + "layer_rbm": { + "labels": [ + "demo:layer_dense:hidden:0" + ] + } + } + }, + { + "label": "bias", + "source": { + "shape": [ + "784", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "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", + "typelabel": "FLOAT" + }, + "tags": { + "layer_dense": { + "labels": [ + "visible::bias:0" + ] + }, + "layer_rbm": { + "labels": [ + "demo:layer_dense:visible:1" + ] + } + } + }, + { + "source": { + "shape": [ + "1", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAA==", + "typelabel": "FLOAT", + "isConst": true + }, + "tags": { + "layer_sigmoid": { + "labels": [ + "sigmoid:::0" + ] + }, + "layer_rbm": { + "labels": [ + "demo:layer_sigmoid:sigmoid:2" + ] + }, + "properties": { + "labels": [ + "immutable" + ] + } + } + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "coord": [ + 1, + 0, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "layer_dense": { + "labels": [ + "visible::weight:0" + ] + }, + "layer_rbm": { + "labels": [ + "demo:layer_dense:visible:1" + ] + } + } + } + ] +} diff --git a/models/rbmmodel.pbx b/models/rbmmodel.pbx new file mode 100644 index 000000000..4a5273c12 Binary files /dev/null and b/models/rbmmodel.pbx differ diff --git a/models/test/ead_test.json b/models/test/ead_test.json new file mode 100644 index 000000000..67addfc03 --- /dev/null +++ b/models/test/ead_test.json @@ -0,0 +1,19179 @@ +{ + "nodes": [ + { + "source": { + "shape": [ + "10", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "training_in" + ] + } + }, + "label": "in" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "9", + "10", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "storage_weight0" + ] + } + }, + "label": "weight0" + }, + { + "source": { + "shape": [ + "9", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "storage_bias0" + ] + } + }, + "label": "bias0" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "9", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "storage_weight1" + ] + } + }, + "label": "weight1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "storage_bias1" + ] + } + }, + "label": "bias1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABA", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "2" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "typelabel": "DOUBLE" + }, + "tags": { + "properties": { + "labels": [ + "training_out" + ] + } + }, + "label": "out" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "9", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "1", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPw==", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "-1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "source": { + "shape": [ + "5", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/", + "typelabel": "DOUBLE", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "immutable" + ] + } + }, + "label": "1" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "coord": [ + 1, + 1, + 9, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "MATMUL", + "args": [ + { + "shaper": [ + 0, + 0, + 0.1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 3, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "MATMUL" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 4, + "coord": [ + 1, + 3, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 6, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 8, + "coord": [ + 1, + 1, + 3, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 11, + "coord": [ + 1, + 3, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 13, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "SUB", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 18, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "SUB" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 6, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 8, + "coord": [ + 1, + 1, + 3, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 13, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "SUB", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 28, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "SUB" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 13, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "SUB", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 34, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "SUB" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 13, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "SUB", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 41, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "SUB" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 43, + "coord": [ + 2, + 1, + 0, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "ADD", + "args": [ + { + "idx": 44, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 45, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "sum" + ] + } + }, + "label": "ADD" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 47, + "coord": [ + 0, + 2, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 52, + "coord": [ + 0, + 2, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 60, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "EXP", + "args": [ + { + "idx": 63, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "EXP" + }, + { + "functor": { + "opname": "ADD", + "args": [ + { + "idx": 7, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 64, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "sum" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "ADD" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 46, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 65, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 6, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 65, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 51, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 65, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 66, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 65, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "MATMUL", + "args": [ + { + "idx": 67, + "shaper": [ + 0, + 0, + 0.1111111111111111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 8, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.1111111111111111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "MATMUL" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 68, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 65, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 67, + "coord": [ + 1, + 1, + 5, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "ADD", + "args": [ + { + "idx": 70, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 48, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "sum" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "ADD" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 72, + "coord": [ + 2, + 1, + 0, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "NEG", + "args": [ + { + "idx": 73, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "NEG" + }, + { + "functor": { + "opname": "EXP", + "args": [ + { + "idx": 75, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "EXP" + }, + { + "functor": { + "opname": "ADD", + "args": [ + { + "idx": 14, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 76, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "sum" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "ADD" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 49, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 13, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 53, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 55, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 57, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 78, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "SUB", + "args": [ + { + "idx": 17, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 79, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "SUB" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 80, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 81, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "DIV", + "args": [ + { + "idx": 82, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 77, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "DIV" + }, + { + "functor": { + "opname": "POW", + "args": [ + { + "idx": 84, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 50, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "POW" + }, + { + "functor": { + "opname": "POW", + "args": [ + { + "idx": 84, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 54, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "POW" + }, + { + "functor": { + "opname": "POW", + "args": [ + { + "idx": 84, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 56, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "POW" + }, + { + "functor": { + "opname": "POW", + "args": [ + { + "idx": 84, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 58, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "POW" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 88, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 89, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 90, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 16, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 91, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 92, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 19, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 93, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 29, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 94, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 35, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 95, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 42, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 15, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 96, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 27, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 97, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 33, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 98, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 40, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 99, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 83, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 100, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 85, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 101, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 86, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 102, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 87, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 103, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 12, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 104, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 26, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 105, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 32, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 106, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 39, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 107, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 76, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 108, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 76, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 109, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 76, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 110, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 76, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 111, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 10, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 112, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 25, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 113, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 31, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 114, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 38, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 115, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 9, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 116, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 24, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 117, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 30, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 118, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 37, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 119, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 120, + "coord": [ + 1, + 1, + 9, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 121, + "coord": [ + 1, + 1, + 9, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 122, + "coord": [ + 1, + 1, + 9, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 123, + "coord": [ + 1, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.33333333333333331, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "REDUCE_SUM" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 61, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 124, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 62, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 125, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 74, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 126, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 36, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 127, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "derivative_db1", + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 128, + "coord": [ + 2, + 1, + 0, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 129, + "coord": [ + 2, + 1, + 0, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 130, + "coord": [ + 0, + 2, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 132, + "coord": [ + 2, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "REDUCE_SUM" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 133, + "coord": [ + 2, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "REDUCE_SUM" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 134, + "coord": [ + 2, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.33333333333333331, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "tags": { + "properties": { + "labels": [ + "derivative_dw1" + ] + } + }, + "label": "REDUCE_SUM" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 69, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 135, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 71, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 136, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 5, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 138, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 23, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 139, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 64, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 140, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 64, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 141, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 2, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 142, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "properties": { + "labels": [ + "commutative" + ] + }, + "groups": { + "labels": [ + "prod" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 22, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 143, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 1, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 144, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 21, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 145, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "EXTEND", + "args": [ + { + "idx": 146, + "coord": [ + 1, + 1, + 10, + 1, + 1, + 1, + 1, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "EXTEND" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 147, + "coord": [ + 1, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.33333333333333331, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "REDUCE_SUM" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 59, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 148, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "MUL", + "args": [ + { + "idx": 20, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + }, + { + "idx": 149, + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "tags": { + "groups": { + "labels": [ + "prod" + ] + }, + "properties": { + "labels": [ + "derivative_db0", + "commutative" + ] + } + }, + "label": "MUL" + }, + { + "functor": { + "opname": "PERMUTE", + "args": [ + { + "idx": 150, + "coord": [ + 0, + 2, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "fwd": true + } + ] + }, + "label": "PERMUTE" + }, + { + "functor": { + "opname": "REDUCE_SUM", + "args": [ + { + "idx": 152, + "coord": [ + 2, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0.33333333333333331, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "tags": { + "properties": { + "labels": [ + "derivative_dw0" + ] + } + }, + "label": "REDUCE_SUM" + } + ] +} diff --git a/ead/data/graph.pb b/models/test/ead_test.pbx similarity index 92% rename from ead/data/graph.pb rename to models/test/ead_test.pbx index 6571701d5..153f83352 100644 Binary files a/ead/data/graph.pb and b/models/test/ead_test.pbx differ diff --git a/ead/data/graph.txt b/models/test/ead_test.txt similarity index 89% rename from ead/data/graph.txt rename to models/test/ead_test.txt index 55eaac775..ab170c3ad 100644 --- a/ead/data/graph.txt +++ b/models/test/ead_test.txt @@ -6,9 +6,9 @@ | `--(variable:in) `--(EXTEND) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) @@ -19,14 +19,14 @@ | `--(EXTEND) | `--(variable:bias0) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) @@ -36,7 +36,7 @@ | | `--(EXTEND) | | `--(variable:bias0) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) @@ -53,18 +53,18 @@ | `--(variable:weight1) `--(EXTEND) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -77,22 +77,22 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -105,15 +105,15 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -126,25 +126,25 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(MUL) - | `--(variable:) + | `--(constant:2) | `--(POW) | `--(SUB) | | `--(variable:out) | | `--(DIV) - | | `--(variable:) + | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -157,16 +157,16 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(SUB) - | `--(variable:) - | `--(variable:) - `--(variable:) + | `--(constant:2) + | `--(constant:1) + `--(constant:1) (MUL) - `--(variable:) + `--(constant:1) `--(REDUCE_SUM) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) @@ -177,14 +177,14 @@ | `--(EXTEND) | `--(variable:bias0) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) @@ -194,7 +194,7 @@ | | `--(EXTEND) | | `--(variable:bias0) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) @@ -211,18 +211,18 @@ | `--(variable:weight1) `--(EXTEND) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -235,22 +235,22 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -263,15 +263,15 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -284,25 +284,25 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(MUL) - | `--(variable:) + | `--(constant:2) | `--(POW) | `--(SUB) | | `--(variable:out) | | `--(DIV) - | | `--(variable:) + | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -315,18 +315,18 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(SUB) - | `--(variable:) - | `--(variable:) - `--(variable:) + | `--(constant:2) + | `--(constant:1) + `--(constant:1) (REDUCE_SUM) `--(PERMUTE) `--(MUL) `--(PERMUTE) | `--(EXTEND) | `--(DIV) - | `--(variable:) + | `--(constant:1) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) @@ -337,18 +337,18 @@ | `--(variable:bias0) `--(EXTEND) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -361,22 +361,22 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -389,15 +389,15 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -410,25 +410,25 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(MUL) - | `--(variable:) + | `--(constant:2) | `--(POW) | `--(SUB) | | `--(variable:out) | | `--(DIV) - | | `--(variable:) + | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -441,25 +441,25 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(SUB) - | `--(variable:) - | `--(variable:) - `--(variable:) + | `--(constant:2) + | `--(constant:1) + `--(constant:1) (MUL) - `--(variable:) + `--(constant:1) `--(REDUCE_SUM) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -472,22 +472,22 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:1) `--(MUL) `--(DIV) | `--(DIV) | | `--(NEG) - | | | `--(variable:) + | | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -500,15 +500,15 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(ADD) - | `--(variable:) + | `--(constant:1) | `--(EXP) | `--(NEG) | `--(ADD) | `--(MATMUL) | | `--(DIV) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(ADD) - | | | `--(variable:) + | | | `--(constant:1) | | | `--(EXP) | | | `--(NEG) | | | `--(ADD) @@ -521,25 +521,25 @@ | `--(EXTEND) | `--(variable:bias1) `--(MUL) - `--(variable:) + `--(constant:-1) `--(MUL) `--(MUL) - | `--(variable:) + | `--(constant:2) | `--(POW) | `--(SUB) | | `--(variable:out) | | `--(DIV) - | | `--(variable:) + | | `--(constant:1) | | `--(ADD) - | | `--(variable:) + | | `--(constant:1) | | `--(EXP) | | `--(NEG) | | `--(ADD) | | `--(MATMUL) | | | `--(DIV) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(ADD) - | | | | `--(variable:) + | | | | `--(constant:1) | | | | `--(EXP) | | | | `--(NEG) | | | | `--(ADD) @@ -552,6 +552,6 @@ | | `--(EXTEND) | | `--(variable:bias1) | `--(SUB) - | `--(variable:) - | `--(variable:) - `--(variable:) + | `--(constant:2) + | `--(constant:1) + `--(constant:1) diff --git a/models/test/pbm_test.json b/models/test/pbm_test.json new file mode 100644 index 000000000..155b900d7 --- /dev/null +++ b/models/test/pbm_test.json @@ -0,0 +1,3315 @@ +{ + "nodes": [ + { + "source": { + "shape": [ + "3", + "1", + "7", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "subtree_src2" + ] + } + }, + "label": "[3\\1\\7\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "3", + "7", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "osrc" + ] + } + }, + "label": "[3\\7\\1\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "3", + "7", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "subtree_src" + ] + } + }, + "label": "[3\\7\\1\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "7", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "osrc2" + ] + } + }, + "label": "[7\\3\\1\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "3", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "subtree2_src" + ] + } + }, + "label": "[3\\3\\1\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "3", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "subtree2_src2" + ] + } + }, + "label": "[3\\3\\1\\1\\1\\1\\1\\1]" + }, + { + "source": { + "shape": [ + "3", + "3", + "1", + "1", + "1", + "1", + "1", + "1" + ], + "data": "AAAAAAAAAAAA", + "isConst": true + }, + "tags": { + "properties": { + "labels": [ + "subtree2_src3" + ] + } + }, + "label": "[3\\3\\1\\1\\1\\1\\1\\1]" + }, + { + "functor": { + "opname": "neg", + "args": [ + { + "idx": 1, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "neg" + }, + { + "functor": { + "opname": "sin", + "args": [ + { + "idx": 2, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "sin" + }, + { + "functor": { + "opname": "abs", + "args": [ + { + "idx": 4, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "abs" + }, + { + "functor": { + "opname": "exp", + "args": [ + { + "idx": 5, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "exp" + }, + { + "functor": { + "opname": "neg", + "args": [ + { + "idx": 6, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "neg" + }, + { + "functor": { + "opname": "+", + "args": [ + { + "idx": 8, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 2, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "+" + }, + { + "functor": { + "opname": "*", + "args": [ + { + "idx": 9, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 10, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 11, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "*" + }, + { + "functor": { + "opname": "/", + "args": [ + { + "idx": 7, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 12, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "/" + }, + { + "functor": { + "opname": "-", + "args": [ + { + "idx": 4, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 13, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "tags": { + "properties": { + "labels": [ + "subtree2_dest" + ] + } + }, + "label": "-" + }, + { + "functor": { + "opname": "@", + "args": [ + { + "idx": 14, + "coord": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 3, + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "label": "@" + }, + { + "functor": { + "opname": "-", + "args": [ + { + "coord": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "idx": 16, + "coord": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "shaper": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + } + ] + }, + "tags": { + "properties": { + "labels": [ + "subtree_dest" + ] + } + }, + "label": "-" + } + ] +} diff --git a/pbm/data/graph.pb b/models/test/pbm_test.pbx similarity index 95% rename from pbm/data/graph.pb rename to models/test/pbm_test.pbx index 1c62654df..ff101c69d 100644 Binary files a/pbm/data/graph.pb and b/models/test/pbm_test.pbx differ diff --git a/models/test/pbm_test.txt b/models/test/pbm_test.txt new file mode 100644 index 000000000..769dcd3f1 --- /dev/null +++ b/models/test/pbm_test.txt @@ -0,0 +1,20 @@ +(-) + `--(constant:[3\1\7\1\1\1\1\1]) + `--(@) + `--(/) + | `--(neg) + | | `--(constant:[3\7\1\1\1\1\1\1]) + | `--(+) + | `--(sin) + | | `--(constant:[3\7\1\1\1\1\1\1]) + | `--(constant:[3\7\1\1\1\1\1\1]) + `--(constant:[7\3\1\1\1\1\1\1]) +(-) + `--(constant:[3\3\1\1\1\1\1\1]) + `--(*) + `--(abs) + | `--(constant:[3\3\1\1\1\1\1\1]) + `--(exp) + | `--(constant:[3\3\1\1\1\1\1\1]) + `--(neg) + `--(constant:[3\3\1\1\1\1\1\1]) diff --git a/opt/src/parse.cpp b/opt/src/parse.cpp index fb2eb77a7..ccc05bdce 100644 --- a/opt/src/parse.cpp +++ b/opt/src/parse.cpp @@ -99,7 +99,7 @@ static std::string build_intermediate (VoterPool& voters, const ::Subgraph* sg, std::string symbol(sg->val_.any_); if (false == estd::has(ctx.symbols_, symbol)) { - logs::fatalf("undeclared symbol '%s'", symbol.c_str()); + logs::fatalf("undeclared symbol `%s`", symbol.c_str()); } out = symbol; } @@ -206,7 +206,7 @@ OptCtx process_stmts (::PtrList* stmts, const iConverterBuilder& builder) } else if (estd::has(it->second, property_tag)) { - logs::warnf("reassignment of property %s to %s", + logs::warnf("reassignment of property `%s` to `%s`", property_tag.c_str(), label.c_str()); } else diff --git a/opt/test/test_opt.cpp b/opt/test/test_opt.cpp index aef7e2ed6..26fadf351 100644 --- a/opt/test/test_opt.cpp +++ b/opt/test/test_opt.cpp @@ -49,7 +49,7 @@ TEST(OPTIMIZE, CalcConstants) ASSERT_EQ(1, opted.size()); // expect optimized cfunc to be sin(2) EXPECT_GRAPHEQ( - (fmts::sprintf("(%f[1\\1\\1\\1\\1\\1\\1\\1])", std::sin(2))), + (fmts::sprintf("(constant:%f[1\\1\\1\\1\\1\\1\\1\\1])", std::sin(2))), opted[0]); } @@ -66,8 +66,8 @@ TEST(OPTIMIZE, CalcConstants) " `--(ADD[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(SIN[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | `--(variable:special_var[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | `--(%g[1\\1\\1\\1\\1\\1\\1\\1])\n" - " `--(%g[1\\1\\1\\1\\1\\1\\1\\1])", + " | `--(constant:%g[1\\1\\1\\1\\1\\1\\1\\1])\n" + " `--(constant:%g[1\\1\\1\\1\\1\\1\\1\\1])", std::sin(2), std::pow(3, 4))), opted[0]); @@ -78,8 +78,8 @@ TEST(OPTIMIZE, CalcConstants) " `--(ADD[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(SIN[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | `--(variable:special_var[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | `--(%g[1\\1\\1\\1\\1\\1\\1\\1])\n" - " `--(%g[1\\1\\1\\1\\1\\1\\1\\1])", + " | `--(constant:%g[1\\1\\1\\1\\1\\1\\1\\1])\n" + " `--(constant:%g[1\\1\\1\\1\\1\\1\\1\\1])", std::sin(2), std::pow(3, 4))), adv_func->get_tensor()); } @@ -106,10 +106,10 @@ TEST(OPTIMIZE, PruneZeroSingles) }, rules); ASSERT_EQ(2, opted.size()); // expect both optimized wunfunc to be 1 - EXPECT_GRAPHEQ("(1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); + EXPECT_GRAPHEQ("(constant:1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); // expect both optimized zrofunc to be 0 - EXPECT_GRAPHEQ("(0[1\\1\\1\\1\\1\\1\\1\\1])", opted[1]); + EXPECT_GRAPHEQ("(constant:0[1\\1\\1\\1\\1\\1\\1\\1])", opted[1]); } { @@ -135,7 +135,7 @@ TEST(OPTIMIZE, PruneZeroSingles) }, rules); ASSERT_EQ(2, opted.size()); // expect both optimized l and r zeros to be 0 - std::string expect = "(0[1\\1\\1\\1\\1\\1\\1\\1])"; + std::string expect = "(constant:0[1\\1\\1\\1\\1\\1\\1\\1])"; EXPECT_GRAPHEQ(expect, opted[0]); EXPECT_GRAPHEQ(expect, opted[1]); } @@ -163,7 +163,7 @@ TEST(OPTIMIZE, PruneZeroSingles) auto opted = opt::optimize({divz->get_tensor()}, rules); ASSERT_EQ(1, opted.size()); // expect optimized divz to be zero - EXPECT_GRAPHEQ("(0[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); + EXPECT_GRAPHEQ("(constant:0[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } { @@ -173,7 +173,7 @@ TEST(OPTIMIZE, PruneZeroSingles) // expect optimized not_opt to remain the same EXPECT_GRAPHEQ( "(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" - " `--(0[1\\1\\1\\1\\1\\1\\1\\1])\n" + " `--(constant:0[1\\1\\1\\1\\1\\1\\1\\1])\n" " `--(variable:special_var[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } } @@ -211,13 +211,13 @@ TEST(OPTIMIZE, PruneZeroGraph) " | | `--(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | | `--(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | | | `--(variable:var2[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | | | | `--(0[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | | | `--(1[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | | | | `--(constant:0[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | | | `--(constant:1[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | `--(LT[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | `--(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | | `--(variable:var2[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | | | `--(0[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | | `--(1[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | | | `--(constant:0[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | | `--(constant:1[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(DIV[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(variable:var2[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(NEG[1\\1\\1\\1\\1\\1\\1\\1])\n" @@ -227,7 +227,7 @@ TEST(OPTIMIZE, PruneZeroGraph) auto got0 = tenncor::tan(zero); opted = opt::optimize({tenncor::pow(nocascades, got0)->get_tensor()}, rules); ASSERT_EQ(1, opted.size()); - EXPECT_GRAPHEQ("(1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); + EXPECT_GRAPHEQ("(constant:1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } @@ -255,7 +255,7 @@ TEST(OPTIMIZE, PruneOneSingles) opted[0]); // expect optimized wunfunc to be 1 - EXPECT_GRAPHEQ("(1[1\\1\\1\\1\\1\\1\\1\\1])", opted[1]); + EXPECT_GRAPHEQ("(constant:1[1\\1\\1\\1\\1\\1\\1\\1])", opted[1]); } { @@ -286,7 +286,7 @@ TEST(OPTIMIZE, PruneOneSingles) auto opted = opt::optimize({wun->get_tensor()}, rules); ASSERT_EQ(1, opted.size()); // expect optimized wun to be 1 - EXPECT_GRAPHEQ("(1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); + EXPECT_GRAPHEQ("(constant:1[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } { @@ -295,7 +295,7 @@ TEST(OPTIMIZE, PruneOneSingles) // expect optimized no_opt to remain the same EXPECT_GRAPHEQ( "(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" - " `--(1[1\\1\\1\\1\\1\\1\\1\\1])\n" + " `--(constant:1[1\\1\\1\\1\\1\\1\\1\\1])\n" " `--(variable:special_var[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } } @@ -330,13 +330,13 @@ TEST(OPTIMIZE, PruneOneGraph) "(SUB[1\\1\\1\\1\\1\\1\\1\\1])\n" " `--(POW[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(MIN[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | | `--(1[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | | `--(constant:1[1\\1\\1\\1\\1\\1\\1\\1])\n" " | | `--(variable:var[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(DIV[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(variable:var[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(MAX[1\\1\\1\\1\\1\\1\\1\\1])\n" " | `--(variable:var[1\\1\\1\\1\\1\\1\\1\\1])\n" - " | `--(1[1\\1\\1\\1\\1\\1\\1\\1])\n" + " | `--(constant:1[1\\1\\1\\1\\1\\1\\1\\1])\n" " `--(variable:var[1\\1\\1\\1\\1\\1\\1\\1])", opted[0]); } @@ -596,44 +596,44 @@ TEST(OPTIMIZE, ReuseOpGraph) std::list expectlines = { "0:MUL,1:COS,0,white", - "1:COS,2:variable:0,0,white", "0:MUL,3:MAX,1,white", - "3:MAX,4:variable:2,0,white", - "3:MAX,2:variable:0,1,white", - "5:SUB,6:POW,0,white", - "6:POW,7:MIN,0,white", - "7:MIN,8:MIN,0,white", - "8:MIN,3:MAX,0,white", - "8:MIN,1:COS,1,white", - "7:MIN,9:MIN,1,white", - "9:MIN,10:ADD,0,white", - "10:ADD,2:variable:0,0,white", "10:ADD,0:MUL,1,white", - "9:MIN,11:POW,1,white", + "10:ADD,2:0,0,white", "11:POW,12:SUB,0,white", - "12:SUB,4:variable:2,0,white", - "12:SUB,2:variable:0,1,white", - "11:POW,2:variable:0,1,white", - "6:POW,13:DIV,1,white", + "11:POW,2:0,1,white", + "12:SUB,2:0,1,white", + "12:SUB,4:2,0,white", "13:DIV,14:ADD,0,white", - "14:ADD,15:ADD,0,white", - "15:ADD,16:variable:1,0,white", - "15:ADD,2:variable:0,1,white", - "14:ADD,4:variable:2,1,white", "13:DIV,17:SUB,1,white", - "17:SUB,2:variable:0,0,white", - "17:SUB,16:variable:1,1,white", - "5:SUB,12:SUB,1,white", + "14:ADD,15:ADD,0,white", + "14:ADD,4:2,1,white", + "15:ADD,16:1,0,white", + "15:ADD,2:0,1,white", + "17:SUB,16:1,1,white", + "17:SUB,2:0,0,white", "18:MUL,19:MUL,0,white", + "18:MUL,22:MUL,1,white", + "19:MUL,1:COS,1,white", "19:MUL,20:EQ,0,white", + "1:COS,2:0,0,white", + "20:EQ,17:SUB,1,white", "20:EQ,21:DIV,0,white", - "21:DIV,12:SUB,0,white", "21:DIV,0:MUL,1,white", - "20:EQ,17:SUB,1,white", - "19:MUL,1:COS,1,white", - "18:MUL,22:MUL,1,white", - "22:MUL,21:DIV,0,white", + "21:DIV,12:SUB,0,white", "22:MUL,14:ADD,1,white", + "22:MUL,21:DIV,0,white", + "3:MAX,2:0,1,white", + "3:MAX,4:2,0,white", + "5:SUB,12:SUB,1,white", + "5:SUB,6:POW,0,white", + "6:POW,13:DIV,1,white", + "6:POW,7:MIN,0,white", + "7:MIN,8:MIN,0,white", + "7:MIN,9:MIN,1,white", + "8:MIN,1:COS,1,white", + "8:MIN,3:MAX,0,white", + "9:MIN,10:ADD,0,white", + "9:MIN,11:POW,1,white", }; expectlines.sort(); std::list gotlines; diff --git a/pbm/BUILD.bazel b/pbm/BUILD.bazel index 6afc4f1db..5080fe2ea 100644 --- a/pbm/BUILD.bazel +++ b/pbm/BUILD.bazel @@ -49,11 +49,24 @@ cc_library( srcs = glob(["src/*.cpp"]), copts = ["-std=c++17"], deps = [ - "//ade:ade", + "//tag:tag", "//pbm:pbm_cc_proto", ], ) +######### TOOLS ######### + +cc_binary( + name = "inspector", + srcs = glob(["inspector.cpp"]), + copts = ["-std=c++17"], + deps = [ + "//pbm:pbm_cc_proto", + "@com_github_mingkaic_cppkg//estd:estd", + "@com_github_mingkaic_cppkg//flag:flag", + ], +) + ######### TEST ######### cc_test( @@ -67,8 +80,5 @@ cc_test( "@com_github_mingkaic_cppkg//exam:exam", ], copts = ["-std=c++17"], - data = glob([ - "data/*.pb", - "data/*.txt", - ]), + data = ["//:test_models"], ) diff --git a/pbm/data.hpp b/pbm/data.hpp index af33b516a..0ad99c77f 100644 --- a/pbm/data.hpp +++ b/pbm/data.hpp @@ -10,6 +10,8 @@ #include "ade/ade.hpp" +#include "tag/tag.hpp" + #include "pbm/graph.pb.h" #ifndef PBM_COMMON_HPP @@ -26,7 +28,7 @@ using StringsT = std::list; struct iSaver { - virtual std::string save_leaf (bool& is_const, ade::iLeaf* leaf) = 0; + virtual std::string save_leaf (ade::iLeaf* leaf) = 0; virtual std::vector save_shaper (const ade::CoordptrT& mapper) = 0; diff --git a/pbm/data/graph.txt b/pbm/data/graph.txt deleted file mode 100644 index 01a97bd07..000000000 --- a/pbm/data/graph.txt +++ /dev/null @@ -1,20 +0,0 @@ -(-) - `--([3\1\7\1\1\1\1\1]) - `--(@) - `--(/) - | `--(neg) - | | `--([3\7\1\1\1\1\1\1]) - | `--(+) - | `--(sin) - | | `--([3\7\1\1\1\1\1\1]) - | `--([3\7\1\1\1\1\1\1]) - `--([7\3\1\1\1\1\1\1]) -(-) - `--([3\3\1\1\1\1\1\1]) - `--(*) - `--(abs) - | `--([3\3\1\1\1\1\1\1]) - `--(exp) - | `--([3\3\1\1\1\1\1\1]) - `--(neg) - `--([3\3\1\1\1\1\1\1]) diff --git a/pbm/graph.proto b/pbm/graph.proto index f463889be..03ed85d06 100644 --- a/pbm/graph.proto +++ b/pbm/graph.proto @@ -5,14 +5,14 @@ option go_package = "github.com/mingkaic/tenncor/pbm"; package cortenn; message Source { - bytes shape = 1; + repeated uint64 shape = 1 [packed = true]; bytes data = 2; string typelabel = 3; bool is_const = 4; } message NodeArg { - uint32 idx = 1; + uint32 idx = 1; // todo: check if these are redundant repeated double coord = 2 [packed = true]; repeated double shaper = 3 [packed = true]; bool fwd = 4; @@ -24,53 +24,20 @@ message Functor { repeated NodeArg args = 2; } -message Node { +message Tag { repeated string labels = 1; +} + +message Node { + string label = 1; oneof detail { Source source = 2; Functor functor = 3; } + map tags = 4; } message Graph { string label = 1; repeated Node nodes = 2; } - -message ItTrainerState { - uint64 iterations = 1; -} - -message DQTrainerState { - message ExpBatch { - repeated float observation = 1; - - repeated float new_observation = 2; - - uint64 action_idx = 3; - - float reward = 4; - } - - Graph target_graph = 1; - - uint64 actions_executed = 2; - - uint64 trained_iteration = 3; - - uint64 ntrained_called = 4; - - uint64 nstored_called = 5; - - repeated ExpBatch experiences = 6; -} - -message Layer { - Graph graph = 1; - oneof layer_context { - ItTrainerState it_ctx = 19; - - // change to any once we have a lot of contexts - DQTrainerState dqn_ctx = 20; - } -} diff --git a/pbm/inspector.cpp b/pbm/inspector.cpp new file mode 100644 index 000000000..1e0111600 --- /dev/null +++ b/pbm/inspector.cpp @@ -0,0 +1,109 @@ +#include + +#include + +#include "flag/flag.hpp" +#include "fmts/fmts.hpp" +#include "estd/strs.hpp" + +#include "pbm/graph.pb.h" + +const std::string pbx_ext = ".pbx"; + +void write_json (std::string writepath, const std::string& jsonstr) +{ + if (estd::has_affix(writepath, pbx_ext)) + { + std::fstream writestr(writepath, std::ios::out | std::ios::trunc | std::ios::binary); + if (writestr.is_open()) + { + cortenn::Graph graph; + google::protobuf::util::JsonParseOptions options; + options.ignore_unknown_fields = true; + if (google::protobuf::util::Status::OK != + google::protobuf::util::JsonStringToMessage( + jsonstr, &graph, options)) + { + logs::fatal("failed to parse json graph"); + } + if (false == graph.SerializeToOstream(&writestr)) + { + logs::fatalf("failed to serialize protobuf to %s", + writepath.c_str()); + } + writestr.close(); + return; + } + } + else + { + std::ofstream writestr(writepath); + if (writestr.is_open()) + { + writestr << jsonstr; + writestr.flush(); + writestr.close(); + return; + } + } + // write to stdout when all options fail + std::cout << jsonstr << std::endl; +} + +int main (int argc, const char** argv) +{ + std::string readpath; + std::string writepath; + flag::FlagSet flags("inspector"); + flags.add_flags() + ("read", flag::opt::value(&readpath), + "filename of model to inspect") + ("write", flag::opt::value(&writepath), + "filename to write json format"); + + if (false == flags.parse(argc, argv)) + { + return 1; + } + + logs::get_logger().set_log_level(logs::INFO); + + std::ifstream readstr(readpath); + if (readstr.is_open()) + { + std::string jsonstr; + if (estd::has_affix(readpath, pbx_ext)) + { + cortenn::Graph graph; + if (false == graph.ParseFromIstream(&readstr)) + { + logs::fatalf("failed to parse from istream when read file %s", + readpath.c_str()); + } + google::protobuf::util::JsonPrintOptions options; + options.add_whitespace = true; + if (google::protobuf::util::Status::OK != + google::protobuf::util::MessageToJsonString( + graph, &jsonstr, options)) + { + logs::fatal("failed to parse pb graph"); + } + } + else + { + std::stringstream ss; + ss << readstr.rdbuf(); + jsonstr = ss.str(); + } + + write_json(writepath, jsonstr); + + readstr.close(); + } + else + { + logs::warnf("failed to read file `%s`", readpath.c_str()); + } + + return 0; +} diff --git a/pbm/load.hpp b/pbm/load.hpp index 15adccaef..b773ca943 100644 --- a/pbm/load.hpp +++ b/pbm/load.hpp @@ -158,27 +158,17 @@ void load_graph (GraphInfo& out, const cortenn::Graph& in) TensT invec; for (const cortenn::Node& node : nodes) { - auto pb_labels = node.labels(); + ade::TensptrT tens; if (node.has_source()) { - std::string src_label; - if (pb_labels.size() > 0) - { - src_label = *(pb_labels.rbegin()); - } const cortenn::Source& source = node.source(); - std::string sstr = source.shape(); - ade::Shape shape(std::vector(sstr.begin(), sstr.end())); + auto& slist = source.shape(); + ade::Shape shape(std::vector(slist.begin(), slist.end())); std::string data = source.data(); ade::TensptrT leaf = loader.generate_leaf(data.c_str(), - shape, source.typelabel(), src_label, source.is_const()); + shape, source.typelabel(), node.label(), source.is_const()); invec.push_back(leaf); - if (false == pb_labels.empty()) - { - StringsT labels(pb_labels.begin(), pb_labels.end()); - out.tens_.set_labelled(labels.begin(), labels.end(), leaf); - } - out.roots_.emplace(leaf); + tens = leaf; } else { @@ -201,13 +191,20 @@ void load_graph (GraphInfo& out, const cortenn::Graph& in) } ade::TensptrT f = loader.generate_func(opname, args); invec.push_back(f); - if (false == pb_labels.empty()) + tens = f; + } + auto& pb_tags = node.tags(); + for (auto& tagpair : pb_tags) + { + const std::string& tagkey = tagpair.first; + auto& taglabels = tagpair.second.labels(); + auto tagr = tag::get_reg().tagr_by_key(tagkey); + for (std::string taglabel : taglabels) { - StringsT labels(pb_labels.begin(), pb_labels.end()); - out.tens_.set_labelled(labels.begin(), labels.end(), f); + tagr(tens, taglabel); } - out.roots_.emplace(f); } + out.roots_.emplace(tens); } } diff --git a/pbm/save.hpp b/pbm/save.hpp index de3d2dca2..79b146129 100644 --- a/pbm/save.hpp +++ b/pbm/save.hpp @@ -29,6 +29,9 @@ template ::value>::type* = nullptr> struct GraphSaver final : public ade::iTraveler { + GraphSaver (tag::TagRegistry& registry = tag::get_reg()) : + registry_(registry) {} + /// Implementation of iTraveler void visit (ade::iLeaf* leaf) override { @@ -60,12 +63,6 @@ struct GraphSaver final : public ade::iTraveler /// Marshal all equation graphs in roots vector to protobuf object void save (cortenn::Graph& out, PathedMapT labels = PathedMapT()) { - std::unordered_map raw_labels; - for (auto lpair : labels) - { - raw_labels[lpair.first.get()] = lpair.second; - } - // sort functions from the root with the smallest subtree to the largest // this ensures every children of a node appears before the parent, // as is the order of node creations @@ -87,13 +84,8 @@ struct GraphSaver final : public ade::iTraveler ordermap[tens] = i; cortenn::Node* pb_node = out.add_nodes(); - auto it = raw_labels.find(tens); - if (raw_labels.end() != it) - { - google::protobuf::RepeatedPtrField vec( - it->second.begin(), it->second.end()); - pb_node->mutable_labels()->Swap(&vec); - } + pb_node->set_label(tens->to_string()); + tag_node(pb_node, tens, registry_); save_data(*pb_node->mutable_source(), tens); } for (size_t i = 0, n = funcs.size(); i < n; ++i) @@ -102,13 +94,8 @@ struct GraphSaver final : public ade::iTraveler ordermap[f] = nleaves + i; cortenn::Node* pb_node = out.add_nodes(); - auto it = raw_labels.find(f); - if (raw_labels.end() != it) - { - google::protobuf::RepeatedPtrField vec( - it->second.begin(), it->second.end()); - pb_node->mutable_labels()->Swap(&vec); - } + pb_node->set_label(f->to_string()); + tag_node(pb_node, f, registry_); cortenn::Functor* func = pb_node->mutable_functor(); ade::Opcode opcode = f->get_opcode(); func->set_opname(opcode.name_); @@ -149,14 +136,34 @@ struct GraphSaver final : public ade::iTraveler void save_data (cortenn::Source& out, ade::iLeaf* in) { const ade::Shape& shape = in->shape(); - bool is_const = false; - out.set_shape(std::string(shape.begin(), shape.end())); - out.set_data(saver_.save_leaf(is_const, in)); + google::protobuf::RepeatedField slist( + shape.begin(), shape.end()); + out.mutable_shape()->Swap(&slist); + out.set_data(saver_.save_leaf(in)); out.set_typelabel(in->type_label()); - out.set_is_const(is_const); + out.set_is_const(in->is_const()); + } + + void tag_node (cortenn::Node* node, + ade::iTensor* tens, tag::TagRegistry& registry) + { + google::protobuf::Map* tags = + node->mutable_tags(); + tag::TagRepsT reps = registry.get_tags(tens); + for (auto reppair : reps) + { + google::protobuf::RepeatedPtrField labels( + reppair.second.begin(), reppair.second.end()); + google::protobuf::MapPair tagpair( + reppair.first); + tagpair.second.mutable_labels()->Swap(&labels); + tags->insert(tagpair); + } } SAVER saver_; + + tag::TagRegistry& registry_; }; } diff --git a/pbm/test/common.hpp b/pbm/test/common.hpp index b2b203423..7e350517f 100644 --- a/pbm/test/common.hpp +++ b/pbm/test/common.hpp @@ -44,6 +44,11 @@ struct MockTensor final : public ade::iLeaf return 0; } + bool is_const (void) const override + { + return true; + } + ade::Shape shape_; }; diff --git a/pbm/test/test_load.cpp b/pbm/test/test_load.cpp index 4cbc972d7..2736befaf 100644 --- a/pbm/test/test_load.cpp +++ b/pbm/test/test_load.cpp @@ -10,12 +10,14 @@ #include "dbg/stream/ade.hpp" +#include "tag/prop.hpp" + #include "pbm/load.hpp" #include "pbm/test/common.hpp" -const std::string testdir = "pbm/data"; +const std::string testdir = "models/test"; struct TestLoader : public pbm::iLoader @@ -62,7 +64,7 @@ TEST(LOAD, LoadGraph) { cortenn::Graph graph; { - std::fstream inputstr(testdir + "/graph.pb", + std::fstream inputstr(testdir + "/pbm_test.pbx", std::ios::in | std::ios::binary); ASSERT_TRUE(inputstr.is_open()); ASSERT_TRUE(graph.ParseFromIstream(&inputstr)); @@ -70,26 +72,57 @@ TEST(LOAD, LoadGraph) pbm::GraphInfo graphinfo; pbm::load_graph(graphinfo, graph); - EXPECT_EQ(2, graphinfo.roots_.size()); - ASSERT_EQ(3, graphinfo.tens_.children_.size()); - ASSERT_EQ(0, graphinfo.tens_.tens_.size()); - - ASSERT_HAS(graphinfo.tens_.children_, "global"); - ASSERT_HAS(graphinfo.tens_.children_, "subtree"); - ASSERT_HAS(graphinfo.tens_.children_, "subtree2"); - - auto subtree = graphinfo.tens_.children_["subtree"]; - auto subtree2 = graphinfo.tens_.children_["subtree2"]; - ASSERT_EQ(3, subtree->tens_.size()); - ASSERT_EQ(4, subtree2->tens_.size()); + auto& reg = tag::get_reg(); + tag::Query q; - ASSERT_HAS(subtree->tens_, "dest"); - ASSERT_HAS(subtree2->tens_, "dest"); - - ade::TensptrT tree1 = graphinfo.tens_.get_labelled({"subtree", "dest"}); - ade::TensptrT tree2 = graphinfo.tens_.get_labelled({"subtree2", "dest"}); + std::vector root_props; + std::unordered_map propdtens; + for (auto tens : graphinfo.roots_) + { + tens->accept(q); + auto tags = reg.get_tags(tens.get()); + ASSERT_HAS(tags, tag::props_key); + auto& props = tags[tag::props_key]; + ASSERT_EQ(1, props.size()); + propdtens.emplace(props[0], tens); + root_props.insert(root_props.end(), props.begin(), props.end()); + } + EXPECT_ARRHAS(root_props, "subtree_dest"); + EXPECT_ARRHAS(root_props, "subtree2_dest"); + + ASSERT_HAS(q.labels_, tag::props_key); + auto& props = q.labels_[tag::props_key]; + + ASSERT_HAS(props, "subtree_src"); + ASSERT_HAS(props, "subtree_src2"); + ASSERT_HAS(props, "subtree2_src"); + ASSERT_HAS(props, "subtree2_src2"); + ASSERT_HAS(props, "subtree2_src3"); + ASSERT_HAS(props, "osrc"); + ASSERT_HAS(props, "osrc2"); + + auto& sts = props["subtree_src"]; + auto& sts2 = props["subtree_src2"]; + auto& st2s = props["subtree2_src"]; + auto& st2s2 = props["subtree2_src2"]; + auto& st2s3 = props["subtree2_src3"]; + auto& os = props["osrc"]; + auto& os2 = props["osrc2"]; + + ASSERT_EQ(1, sts.size()); + ASSERT_EQ(1, sts2.size()); + ASSERT_EQ(1, st2s.size()); + ASSERT_EQ(1, st2s2.size()); + ASSERT_EQ(1, st2s3.size()); + ASSERT_EQ(1, os.size()); + ASSERT_EQ(1, os2.size()); + + ASSERT_HAS(propdtens, "subtree_dest"); + ASSERT_HAS(propdtens, "subtree2_dest"); + ade::TensptrT tree1 = propdtens["subtree_dest"]; + ade::TensptrT tree2 = propdtens["subtree2_dest"]; ASSERT_NE(nullptr, tree1); ASSERT_NE(nullptr, tree2); @@ -97,7 +130,7 @@ TEST(LOAD, LoadGraph) std::string expect; std::string got; std::string line; - std::ifstream expectstr(testdir + "/graph.txt"); + std::ifstream expectstr(testdir + "/pbm_test.txt"); ASSERT_TRUE(expectstr.is_open()); while (std::getline(expectstr, line)) { diff --git a/pbm/test/test_save.cpp b/pbm/test/test_save.cpp index 0213371cd..a3918fda2 100644 --- a/pbm/test/test_save.cpp +++ b/pbm/test/test_save.cpp @@ -4,21 +4,25 @@ #include +#include + #include "gtest/gtest.h" #include "ade/functor.hpp" #include "pbm/save.hpp" +#include "tag/prop.hpp" + #include "pbm/test/common.hpp" -const std::string testdir = "pbm/data"; +const std::string testdir = "models/test"; struct TestSaver : public pbm::iSaver { - std::string save_leaf (bool& is_const, ade::iLeaf* leaf) override + std::string save_leaf (ade::iLeaf* leaf) override { return std::string(leaf->shape().n_elems(), 0); } @@ -49,113 +53,115 @@ struct TestSaver : public pbm::iSaver TEST(SAVE, SaveGraph) { - std::string expect_pbfile = testdir + "/graph.pb"; - std::string got_pbfile = "got_graph.pb"; - cortenn::Graph graph; - std::vector roots; - - pbm::PathedMapT labels; - // subtree one - ade::Shape shape({3, 7}); - ade::TensptrT osrc(new MockTensor(shape)); - - ade::Shape shape2({7, 3}); - ade::TensptrT osrc2(new MockTensor(shape2)); - - labels[osrc] = {"global", "osrc"}; - labels[osrc2] = {"global", "osrc2"}; + std::string expect_pbfile = testdir + "/pbm_test.pbx"; + std::string got_pbfile = "got_pbm_test.pbx"; { - ade::TensptrT src(new MockTensor(shape)); - - ade::Shape shape3({3, 1, 7}); - ade::TensptrT src2(new MockTensor(shape3)); - - ade::TensptrT dest(ade::Functor::get(ade::Opcode{"-", 0}, { - {src2, ade::identity}, - {ade::TensptrT(ade::Functor::get(ade::Opcode{"@", 1}, { - {ade::TensptrT(ade::Functor::get(ade::Opcode{"/", 2}, { + cortenn::Graph graph; + std::vector roots; + + // subtree one + ade::Shape shape({3, 7}); + ade::TensptrT osrc(new MockTensor(shape)); + + ade::Shape shape2({7, 3}); + ade::TensptrT osrc2(new MockTensor(shape2)); + + auto& preg = tag::get_property_reg(); + preg.property_tag(osrc, "osrc"); + preg.property_tag(osrc2, "osrc2"); + + { + ade::TensptrT src(new MockTensor(shape)); + + ade::Shape shape3({3, 1, 7}); + ade::TensptrT src2(new MockTensor(shape3)); + + ade::TensptrT dest(ade::Functor::get(ade::Opcode{"-", 0}, { + {src2, ade::identity}, + {ade::TensptrT(ade::Functor::get(ade::Opcode{"@", 1}, { + {ade::TensptrT(ade::Functor::get(ade::Opcode{"/", 2}, { + {ade::TensptrT(ade::Functor::get(ade::Opcode{"neg", 3}, { + {osrc, ade::identity}, + })), ade::identity}, + {ade::TensptrT(ade::Functor::get(ade::Opcode{"+", 4}, { + {ade::TensptrT( + ade::Functor::get(ade::Opcode{"sin", 5}, { + {src, ade::identity}})), ade::identity}, + {src, ade::identity}, + })), ade::identity} + })), ade::permute({1, 0})}, + {osrc2, ade::identity} + })), ade::permute({1, 2, 0})}, + })); + roots.push_back(dest); + + preg.property_tag(src, "subtree_src"); + preg.property_tag(src2, "subtree_src2"); + preg.property_tag(dest, "subtree_dest"); + } + + // subtree two + { + ade::Shape mshape({3, 3}); + ade::TensptrT src(new MockTensor(mshape)); + + ade::TensptrT src2(new MockTensor(mshape)); + + ade::TensptrT src3(new MockTensor(mshape)); + + ade::TensptrT dest(ade::Functor::get(ade::Opcode{"-", 0}, { + {src, ade::identity}, + {ade::TensptrT(ade::Functor::get(ade::Opcode{"*", 6}, { + {ade::TensptrT(ade::Functor::get(ade::Opcode{"abs", 7}, { + {src, ade::identity}, + })), ade::identity}, + {ade::TensptrT(ade::Functor::get(ade::Opcode{"exp", 8}, { + {src2, ade::identity}, + })), ade::identity}, {ade::TensptrT(ade::Functor::get(ade::Opcode{"neg", 3}, { - {osrc, ade::identity}, + {src3, ade::identity}, })), ade::identity}, - {ade::TensptrT(ade::Functor::get(ade::Opcode{"+", 4}, { - {ade::TensptrT( - ade::Functor::get(ade::Opcode{"sin", 5}, { - {src, ade::identity}})), ade::identity}, - {src, ade::identity}, - })), ade::identity} - })), ade::permute({1, 0})}, - {osrc2, ade::identity} - })), ade::permute({1, 2, 0})}, - })); - roots.push_back(dest); - - labels[src] = {"subtree", "src"}; - labels[src2] = {"subtree", "src2"}; - labels[dest] = {"subtree", "dest"}; - } - - // subtree two - { - ade::Shape mshape({3, 3}); - ade::TensptrT src(new MockTensor(mshape)); - - ade::TensptrT src2(new MockTensor(mshape)); - - ade::TensptrT src3(new MockTensor(mshape)); - - ade::TensptrT dest(ade::Functor::get(ade::Opcode{"-", 0}, { - {src, ade::identity}, - {ade::TensptrT(ade::Functor::get(ade::Opcode{"*", 6}, { - {ade::TensptrT(ade::Functor::get(ade::Opcode{"abs", 7}, { - {src, ade::identity}, - })), ade::identity}, - {ade::TensptrT(ade::Functor::get(ade::Opcode{"exp", 8}, { - {src2, ade::identity}, })), ade::identity}, - {ade::TensptrT(ade::Functor::get(ade::Opcode{"neg", 3}, { - {src3, ade::identity}, - })), ade::identity}, - })), ade::identity}, - })); - roots.push_back(dest); - - labels[src] = {"subtree2", "src"}; - labels[src2] = {"subtree2", "src2"}; - labels[src3] = {"subtree2", "src3"}; - labels[dest] = {"subtree2", "dest"}; - } + })); + roots.push_back(dest); - pbm::GraphSaver saver; - for (auto& root : roots) - { - root->accept(saver); - } + preg.property_tag(src, "subtree2_src"); + preg.property_tag(src2, "subtree2_src2"); + preg.property_tag(src3, "subtree2_src3"); + preg.property_tag(dest, "subtree2_dest"); + } - saver.save(graph, labels); + pbm::GraphSaver saver; + for (auto& root : roots) + { + root->accept(saver); + } + + pbm::PathedMapT labels; + saver.save(graph, labels); - { std::fstream gotstr(got_pbfile, std::ios::out | std::ios::trunc | std::ios::binary); ASSERT_TRUE(gotstr.is_open()); ASSERT_TRUE(graph.SerializeToOstream(&gotstr)); } - std::fstream expect_ifs(expect_pbfile, std::ios::in | std::ios::binary); - std::fstream got_ifs(got_pbfile, std::ios::in | std::ios::binary); - ASSERT_TRUE(expect_ifs.is_open()); - ASSERT_TRUE(got_ifs.is_open()); - - std::string expect; - std::string got; - // skip the first line (it contains timestamp) - expect_ifs >> expect; - got_ifs >> got; - for (size_t lineno = 1; expect_ifs && got_ifs; ++lineno) { - expect_ifs >> expect; - got_ifs >> got; - EXPECT_STREQ(expect.c_str(), got.c_str()) << "line number " << lineno; + std::fstream expect_ifs(expect_pbfile, std::ios::in | std::ios::binary); + std::fstream got_ifs(got_pbfile, std::ios::in | std::ios::binary); + ASSERT_TRUE(expect_ifs.is_open()); + ASSERT_TRUE(got_ifs.is_open()); + + cortenn::Graph expect_graph; + cortenn::Graph got_graph; + ASSERT_TRUE(expect_graph.ParseFromIstream(&expect_ifs)); + ASSERT_TRUE(got_graph.ParseFromIstream(&got_ifs)); + + google::protobuf::util::MessageDifferencer differ; + std::string report; + differ.ReportDifferencesToString(&report); + EXPECT_TRUE(differ.Compare(expect_graph, got_graph)) << report; } } diff --git a/perf/BUILD.bazel b/perf/BUILD.bazel new file mode 100644 index 000000000..da84e4c4a --- /dev/null +++ b/perf/BUILD.bazel @@ -0,0 +1,45 @@ +licenses(["notice"]) + +filegroup( + name = "srcs", + srcs = glob([ + "*.hpp", + "src/*.cpp", + ]) + ["BUILD.bazel"], + visibility = ["//visibility:public"], +) + +filegroup( + name = "test_srcs", + srcs = glob([ + "test/*.hpp", + "test/*.cpp", + ]), +) + +######### LIBRARY ######### + +cc_library( + name = "perf", + hdrs = glob(["*.hpp"]), + srcs = glob(["src/*.cpp"]), + copts = ["-std=c++17"], + deps = ["@com_github_mingkaic_cppkg//jobs:jobs"], + visibility = ["//visibility:public"], +) + +######### TEST ######### + +cc_test( + name = "test", + srcs = ["//perf:test_srcs"], + copts = ["-std=c++17"], + deps = [ + "//perf:perf", + "//dbg:stream_out", + "@gtest//:gtest", + "@com_github_mingkaic_cppkg//fmts:fmts", + "@com_github_mingkaic_cppkg//exam:exam", + ], + linkstatic = True, +) diff --git a/perf/measure.hpp b/perf/measure.hpp new file mode 100644 index 000000000..560a9d304 --- /dev/null +++ b/perf/measure.hpp @@ -0,0 +1,97 @@ +#include +#include +#include +#include + +#include "jobs/scope_guard.hpp" + +#ifndef PERF_MEASURE_HPP +#define PERF_MEASURE_HPP + +namespace perf +{ + +using TimeT = std::chrono::high_resolution_clock::time_point; + +using DurationT = std::chrono::duration; + +using MeanDurT = std::pair; + +struct PerfRecord final +{ + PerfRecord (void) = default; + + // initialize with some function that is called upon deletion + PerfRecord (std::function term) : term_(term) {} + + ~PerfRecord (void) + { + if (term_) + { + term_(*this); + } + } + + void to_csv (std::ostream& out) const + { + out << "function,mean duration(ns),total duration(ns),n occurrences\n"; + for (const auto& durs : durations_) + { + const auto& meandur = durs.second; + out << durs.first << "," << (meandur.first / meandur.second).count() << "," + << meandur.first.count() << "," << meandur.second << "\n"; + } + } + + void record_duration (std::string fname, DurationT duration) + { + auto it = durations_.find(fname); + if (durations_.end() == it) + { + durations_.emplace(fname, MeanDurT{duration, 1}); + } + else + { + auto& meandur = it->second; + meandur.first += duration; + ++meandur.second; + } + } + + bool empty (void) const + { + return durations_.empty(); + } + +private: + std::unordered_map durations_; + + std::function term_; +}; + +struct MeasureScope final : public jobs::ScopeGuard +{ + MeasureScope (PerfRecord* record, std::string fname) : + jobs::ScopeGuard([this, fname]() + { + this->record_->record_duration(fname, + std::chrono::duration_cast( + std::chrono::high_resolution_clock::now() - + this->measure_start_)); + }), + record_(record), + measure_start_(std::chrono::high_resolution_clock::now()) {} + +private: + PerfRecord* record_; + + TimeT measure_start_; +}; + +PerfRecord& get_global_record (void); + +#define MEASURE(NAME)perf::MeasureScope _defer(&perf::get_global_record(), NAME); + +} + +#endif // PERF_MEASURE_HPP diff --git a/perf/src/measure.cpp b/perf/src/measure.cpp new file mode 100644 index 000000000..a97effd7c --- /dev/null +++ b/perf/src/measure.cpp @@ -0,0 +1,27 @@ +#include + +#include "perf/measure.hpp" + +#ifdef PERF_MEASURE_HPP + +namespace perf +{ + +PerfRecord& get_global_record (void) +{ + static PerfRecord record( + [](PerfRecord& deletion) + { + if (false == deletion.empty()) + { + std::ofstream outf("/tmp/performance.csv"); + deletion.to_csv(outf); + outf.flush(); + } + }); + return record; +} + +} + +#endif diff --git a/perf/test/main.cpp b/perf/test/main.cpp new file mode 100644 index 000000000..6055a2cf3 --- /dev/null +++ b/perf/test/main.cpp @@ -0,0 +1,47 @@ + +#include + +#include "gtest/gtest.h" + +#include "fmts/fmts.hpp" + +#include "perf/measure.hpp" + +int main (int argc, char** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + + +static void mock_measure (perf::PerfRecord& record) +{ + perf::MeasureScope _defer(&record, "f1"); + + std::this_thread::sleep_for( + std::chrono::milliseconds(1000)); +} + + +TEST(PERFORMANCE, Measure) +{ + perf::PerfRecord record; + mock_measure(record); + + std::stringstream ss; + record.to_csv(ss); + auto got = ss.str(); + auto lines = fmts::split(got, "\n"); + EXPECT_EQ(3, lines.size()); + EXPECT_EQ(0, lines[2].size()); + ASSERT_NE(0, lines[1].size()); + ASSERT_NE(0, lines[0].size()); + + auto parts = fmts::split(lines[1], ","); + ASSERT_EQ(4, parts.size()); + EXPECT_STREQ("f1", parts[0].c_str()); + EXPECT_STREQ("1", parts[3].c_str()); + EXPECT_STREQ(parts[1].c_str(), parts[2].c_str()); + EXPECT_EQ(10, parts[1].size()); // expect duration to be in the billions + EXPECT_STREQ("function,mean duration(ns),total duration(ns),n occurrences", lines[0].c_str()); +} diff --git a/pll/BUILD.bazel b/pll/BUILD.bazel new file mode 100644 index 000000000..d5dd5196a --- /dev/null +++ b/pll/BUILD.bazel @@ -0,0 +1,103 @@ +licenses(["notice"]) + +load( + "@com_github_stackb_rules_proto//cpp:cpp_proto_library.bzl", + "cpp_proto_library" +) + +load("//third_party/drake_rules:pybind.bzl", "pybind_library") + +package( + default_visibility = ["//visibility:public"], +) + +filegroup( + name = "srcs", + srcs = glob([ + "*.hpp", + "src/*.cpp", + ]) + ["BUILD.bazel"], +) + +filegroup( + name = "protos", + srcs = glob(["*.proto"]), +) + +filegroup( + name = "test_srcs", + srcs = glob([ + "test/*.hpp", + "test/*.cpp", + ]), + visibility = ["//visibility:private"], +) + +######### LIBRARY ######### + +proto_library( + name = "weight_proto", + srcs = ["//pll:protos"], +) + +cpp_proto_library( + name = "weight_cc_proto", + deps = ["//pll:weight_proto"], +) + +cc_library( + name = "pll", + hdrs = glob(["*.hpp"]), + srcs = glob(["src/*.cpp"]), + copts = ["-std=c++17"], + deps = [ + "//ead:ead", + "@boost//:asio", + ], +) + +pybind_library( + name = "pll_py", + cc_srcs = ["//pll:python/pll.cpp"], + cc_deps = ["//pll:pll"], + py_deps = ["//ead:ead_py"], + visibility = ["//visibility:public"], +) + +######### TOOLS ######### + +cc_binary( + name = "inspector", + srcs = glob(["inspector.cpp"]), + copts = ["-std=c++17"], + deps = [ + "//pll:weight_cc_proto", + "@com_github_mingkaic_cppkg//flag:flag", + ], +) + +cc_binary( + name = "rt_anubis", + srcs = ["rtscale.cpp"], + copts = ["-std=c++17"], + deps = [ + "//ead:ead", + "//pll:weight_cc_proto", + "@com_github_mingkaic_cppkg//flag:flag", + ], +) + +######### TEST ######### + +cc_test( + name = "test", + srcs = ["//pll:test_srcs"], + copts = ["-std=c++17"], + deps = [ + "//dbg:stream_out", + "//pll:pll", + "@gtest//:gtest", + "@com_github_mingkaic_cppkg//exam:exam", + ], + linkstatic = True, +) diff --git a/pll/README_CCE.md b/pll/README_CCE.md new file mode 100644 index 000000000..f2ab69558 --- /dev/null +++ b/pll/README_CCE.md @@ -0,0 +1 @@ +# ConCurrent EAD diff --git a/pll/inspector.cpp b/pll/inspector.cpp new file mode 100644 index 000000000..49d6aa59b --- /dev/null +++ b/pll/inspector.cpp @@ -0,0 +1,67 @@ +#include + +#include + +#include "flag/flag.hpp" +#include "fmts/fmts.hpp" + +#include "pll/weights.pb.h" + +int main (int argc, const char** argv) +{ + std::string readpath; + std::string writepath; + flag::FlagSet flags("inspector"); + flags.add_flags() + ("read", flag::opt::value(&readpath), + "filename of model to inspect") + ("write", flag::opt::value(&writepath), + "filename to write json format"); + + if (false == flags.parse(argc, argv)) + { + return 1; + } + + logs::get_logger().set_log_level(logs::INFO); + + std::ifstream readstr(readpath); + if (readstr.is_open()) + { + weights::OpWeights ops; + if (false == ops.ParseFromIstream(&readstr)) + { + logs::fatalf("failed to parse from istream when read file %s", + readpath.c_str()); + } + std::string jsonstr; + google::protobuf::util::JsonPrintOptions options; + options.add_whitespace = true; + if (google::protobuf::util::Status::OK != + google::protobuf::util::MessageToJsonString( + ops, &jsonstr, options)) + { + logs::fatal("failed to parse op weights"); + } + + std::ofstream writestr(writepath); + if (writestr.is_open()) + { + writestr << jsonstr; + writestr.flush(); + writestr.close(); + } + else + { + std::cout << jsonstr << std::endl; + } + + readstr.close(); + } + else + { + logs::warnf("failed to read file `%s`", readpath.c_str()); + } + + return 0; +} diff --git a/pll/partition.hpp b/pll/partition.hpp new file mode 100644 index 000000000..45c6b2e8a --- /dev/null +++ b/pll/partition.hpp @@ -0,0 +1,17 @@ +#include "ade/traveler.hpp" + +#ifndef CCE_PARTITION_HPP +#define CCE_PARTITION_HPP + +namespace pll +{ + +using PartGroupsT = std::vector>; + +using OpWeightT = std::unordered_map; + +PartGroupsT k_partition (ade::TensT roots, size_t k, OpWeightT weights = OpWeightT()); + +} + +#endif // CCE_PARTITION_HPP diff --git a/pll/python/pll.cpp b/pll/python/pll.cpp new file mode 100644 index 000000000..207b61c18 --- /dev/null +++ b/pll/python/pll.cpp @@ -0,0 +1,35 @@ +#include "pybind11/pybind11.h" +#include "pybind11/numpy.h" +#include "pybind11/stl.h" + +#include "ead/generated/pyapi.hpp" +#include "ead/parse.hpp" + +#include "pll/session.hpp" + +namespace py = pybind11; + +PYBIND11_MODULE(pll, m) +{ + m.doc() = "pll session"; + + // ==== session ==== + auto isess = (py::class_) + py::module::import("ead.ead").attr("iSession"); + py::class_ session(m, "Session", isess); + + py::implicitly_convertible(); + session + .def(py::init(), + py::arg("nthread") = 2, + py::arg("weights") = pll::OpWeightT()) + .def("optimize", + [](py::object self, std::string filename) + { + auto sess = self.cast(); + opt::OptCtx rules = ead::parse_file(filename); + sess->optimize(rules); + }, + py::arg("filename") = "cfg/optimizations.rules", + "Optimize using rules for specified filename"); +} diff --git a/pll/rtscale.cpp b/pll/rtscale.cpp new file mode 100644 index 000000000..069713506 --- /dev/null +++ b/pll/rtscale.cpp @@ -0,0 +1,233 @@ +// Weigh the runtime of each opcode +#include +#include +#include + +#include "flag/flag.hpp" + +#include "ead/generated/api.hpp" +#include "ead/generated/opcode.hpp" +#include "ead/functor.hpp" + +#include "pll/weights.pb.h" + +#define TIME(action)\ +std::chrono::high_resolution_clock::time_point start =\ + std::chrono::high_resolution_clock::now();\ +action;\ +stat = std::chrono::duration_cast(\ + std::chrono::high_resolution_clock::now() - start).count(); + +double softplus (double x) +{ + return std::log(1 + std::exp(x)); +} + +int main (int argc, const char** argv) +{ + std::string writepath; + flag::FlagSet flags("rt_anubis"); + flags.add_flags() + ("target", flag::opt::value(&writepath), + "filename of json to write weights to"); + + if (false == flags.parse(argc, argv)) + { + return 1; + } + + logs::get_logger().set_log_level(logs::INFO); + + std::unordered_map stats; + size_t mean_stat = 0;//, + // max_stat = 0, + // min_stat = std::numeric_limits::max(); + for (size_t i = 0; i < age::_N_GENERATED_OPCODES; ++i) + { + size_t stat; + auto opcode = (age::_GENERATED_OPCODE) i; + ade::Opcode op{age::name_op(opcode), opcode}; + logs::infof("weighing operation %s", op.name_.c_str()); + switch (i) + { + // elementary unary + case age::ABS: + case age::NEG: + case age::SIN: + case age::COS: + case age::TAN: + case age::EXP: + case age::LOG: + case age::SQRT: + case age::ROUND: + case age::SIGMOID: + case age::SIGMOID_GRAD: + case age::TANH: + case age::SQUARE: + case age::CUBE: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::identity_map(var)}); + TIME(f->update()) + } + break; + + // elementary binary + case age::POW: + case age::ADD: + case age::SUB: + case age::MUL: + case age::DIV: + case age::MIN: + case age::MAX: + case age::EQ: + case age::NEQ: + case age::LT: + case age::GT: + case age::RAND_UNIF: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::identity_map(var), ead::identity_map(var)}); + TIME(f->update()) + } + break; + + // reductions + case age::REDUCE_SUM: + case age::REDUCE_PROD: + case age::REDUCE_MIN: + case age::REDUCE_MAX: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::reduce_map(var, 1, 1)}); + TIME(f->update()) + } + break; + + // other stuff + case age::PERMUTE: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::permute_map(var, {2, 0, 1})}); + TIME(f->update()) + } + break; + + case age::EXTEND: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 58})); + auto f = ead::make_functor(op, { + ead::extend_map(var, 2, {57})}); + TIME(f->update()) + } + break; + + case age::SLICE: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::slice_map(var, 2, 2, 2)}); + TIME(f->update()) + } + break; + + case age::MATMUL: + { + auto a = ead::make_constant_scalar( + 0.3, ade::Shape({253, 255})); + auto b = ead::make_constant_scalar( + 0.6, ade::Shape({254, 253})); + auto f = tenncor::matmul(a, b); + TIME(f->update()) + } + break; + + case age::CONV: + { + auto img = ead::make_constant_scalar( + 0.3, ade::Shape({254, 255})); + auto kern = ead::make_constant_scalar( + 0.6, ade::Shape({5, 7})); + auto f = tenncor::convolution(img, kern, {0, 1}); + TIME(f->update()) + } + break; + + case age::PAD: + { + auto var = ead::make_constant_scalar( + 0.5, ade::Shape({56, 57, 58})); + auto f = ead::make_functor(op, { + ead::pad_map(var, {3, 4}, 2)}); + TIME(f->update()) + } + break; + + case age::SELECT: + { + ade::Shape shape({56, 57, 58}); + size_t n = shape.n_elems(); + std::vector data; + data.reserve(n); + for (size_t i = 0; i < n; ++i) + { + data.push_back(i % 2); + } + auto cond = ead::make_constant(data.data(), shape); + auto a = ead::make_constant_scalar(0.3, shape); + auto b = ead::make_constant_scalar(0.6, shape); + auto f = tenncor::if_then_else(cond, a, b); + TIME(f->update()) + } + break; + + case age::CONV_IMG_GRAD: + case age::CONV_KRN_GRAD: + default: + continue; + } + mean_stat += stat; + // max_stat = std::max(max_stat, stat); + // min_stat = std::min(min_stat, stat); + stats.emplace(op.name_, stat); + } + + double mean = (double) mean_stat / stats.size(); + + // normalize stats by mean + weights::OpWeights opweights; + opweights.set_label("ead_weights"); + ::google::protobuf::Map< ::std::string,double>* weights = + opweights.mutable_weights(); + for (auto& op : stats) + { + double value = softplus((op.second - mean) / ( + mean + std::numeric_limits::epsilon())); + weights->insert({op.first, value}); + } + + logs::infof("writing to %s", writepath.c_str()); + std::fstream out(writepath, + std::ios::out | std::ios::trunc | std::ios::binary); + if (out.is_open()) + { + logs::infof("opened %s", writepath.c_str()); + if (opweights.SerializeToOstream(&out)) + { + logs::infof("done writing to %s", writepath.c_str()); + } + out.close(); + } + + return 0; +} diff --git a/pll/session.hpp b/pll/session.hpp new file mode 100644 index 000000000..aaf869515 --- /dev/null +++ b/pll/session.hpp @@ -0,0 +1,223 @@ +#include + +#include +#include + +#include "ead/session.hpp" + +#include "pll/partition.hpp" + +#ifndef CCE_ASESS_HPP +#define CCE_ASESS_HPP + +namespace pll +{ + +using SessReqsT = std::vector>; + +using AtomicFulfilMapT = std::unordered_map< + ade::iOperableFunc*,std::atomic>; + +struct Session final : public ead::iSession +{ + Session (size_t nthreads = 2, OpWeightT weights = OpWeightT()) : + nthreads_(nthreads), weights_(weights) {} + + std::unordered_set tracked_; + + void track (ade::TensT roots) override + { + tracked_.insert(roots.begin(), roots.end()); + + ade::GraphStat stat; + for (auto& trac : tracked_) + { + trac->accept(stat); + } + ade::ParentFinder pfinder; + for (ade::TensptrT& root : roots) + { + root->accept(pfinder); + } + + ade::TensT trackvecs(tracked_.begin(), tracked_.end()); + PartGroupsT groups = k_partition(trackvecs, nthreads_, weights_); + requirements_.clear(); + for (auto& group : groups) + { + SessReqsT reqs; + reqs.reserve(group.size()); + for (ade::iFunctor* func : group) + { + auto& args = func->get_children(); + ead::TensSetT unique_children; + for (const ade::FuncArg& arg : args) + { + auto tens = arg.get_tensor().get(); + if (0 < stat.graphsize_[tens].upper_) // ignore leaves + { + unique_children.emplace(tens); + } + } + reqs.push_back({ + static_cast(func), + unique_children.size() + }); + } + requirements_.push_back(reqs); + } + + for (auto& assocs : pfinder.parents_) + { + for (auto& parent_pair : assocs.second) + { + parents_[assocs.first].emplace( + static_cast(parent_pair.first)); + } + } + + ops_.clear(); + for (auto& tpair : stat.graphsize_) + { + if (tpair.second.upper_ > 0) + { + ops_.emplace(static_cast(tpair.first)); + } + } + } + + // this function is expected to be called repeatedly during runtime + void update (ead::TensSetT updated = {}, ead::TensSetT ignores = {}) override + { + AtomicFulfilMapT fulfilments; + for (auto op : ops_) + { + fulfilments.emplace(op, 0); + } + for (ade::iTensor* unodes : updated) + { + if (dynamic_cast(unodes)) + { + auto& node_parents = parents_[unodes]; + for (auto& node_parent : node_parents) + { + ++fulfilments[node_parent]; + } + } + } + // for each req in requirements distribute to thread + boost::asio::thread_pool pool(nthreads_); + for (auto& req : requirements_) + { + // add thread + boost::asio::post(pool, + [this, &req, &fulfilments, &ignores]() + { + for (auto& op : req) + { + // fulfilled and not ignored + auto& ff = fulfilments.at(op.first); + if (ff++ == op.second && + false == estd::has(ignores, op.first)) + { + op.first->update(); + std::unordered_set op_parents; + if (estd::get(op_parents, + this->parents_, op.first)) + { + for (auto& op_parent : op_parents) + { + ++fulfilments.at(op_parent); + } + } + ++ff; + } + --ff; + } + }); + } + pool.join(); + } + + // this function is expected to be called repeatedly during runtime + void update_target (ead::TensSetT target, ead::TensSetT updated = {}) override + { + ade::OnceTraveler targetted; + for (auto& tens : target) + { + tens->accept(targetted); + } + AtomicFulfilMapT fulfilments; + for (auto op : ops_) + { + fulfilments.emplace(op, 0); + } + for (ade::iTensor* unodes : updated) + { + if (dynamic_cast(unodes)) + { + auto& node_parents = parents_[unodes]; + for (auto& node_parent : node_parents) + { + ++fulfilments[node_parent]; + } + } + } + // for each req in requirements distribute to thread + boost::asio::thread_pool pool(nthreads_); + for (auto& req : requirements_) + { + // make thread + boost::asio::post(pool, + [this, &req, &fulfilments, &targetted]() + { + for (auto& op : req) + { + // is relevant to target, is fulfilled and not ignored + auto& ff = fulfilments.at(op.first); + if (ff++ == op.second && + estd::has(targetted.visited_, op.first)) + { + op.first->update(); + std::unordered_set op_parents; + if (estd::get(op_parents, + this->parents_, op.first)) + { + for (auto& op_parent : op_parents) + { + ++fulfilments.at(op_parent); + } + } + ++ff; + } + --ff; + } + }); + } + pool.join(); + } + + void optimize (const opt::OptCtx& rules) + { + ade::TensT tracked(tracked_.begin(), tracked_.end()); + opt::optimize(tracked, rules); + parents_.clear(); + track(tracked); + } + + std::vector requirements_; + + std::unordered_map> parents_; + +private: + size_t nthreads_; + + OpWeightT weights_; + + std::unordered_set ops_; +}; + +} + +#endif // CCE_ASESS_HPP diff --git a/pll/src/partition.cpp b/pll/src/partition.cpp new file mode 100644 index 000000000..29fe41459 --- /dev/null +++ b/pll/src/partition.cpp @@ -0,0 +1,185 @@ +#include + +#include "ade/iopfunc.hpp" + +#include "pll/partition.hpp" + +#ifdef CCE_PARTITION_HPP + +namespace pll +{ + +struct WeighedGroup final +{ + std::vector reps_; + + std::unordered_set ancestors_; + + double weight_; +}; + +PartGroupsT k_partition (ade::TensT roots, size_t k, OpWeightT weights) +{ + PartGroupsT groups; + + ade::GraphStat stat; + ade::ParentFinder pfinder; + for (auto root : roots) + { + root->accept(stat); + root->accept(pfinder); + } + + // partition by bases (the funcs right above variables) + std::vector bases; + for (auto& gpair : stat.graphsize_) + { + if (gpair.second.upper_ == 1) + { + bases.push_back(static_cast(gpair.first)); + } + } + + // partition bases by number of ancestor + std::unordered_map weight_map; + std::unordered_map> ancestors; + for (auto base : bases) + { + std::queue q; + q.push(base); + while (false == q.empty()) + { + auto tens = q.front(); + if (false == estd::has(weight_map, tens)) + { + double weight = 1; + if (auto op = dynamic_cast(tens)) + { + weight = estd::try_get(weights, op->type_code(), 1); + } + weight_map.emplace(tens, weight); + } + ade::ParentMapT parents; + if (estd::get(parents, pfinder.parents_, tens)) + { + for (auto& ppair : parents) + { + ancestors[base].emplace(ppair.first); + q.push(ppair.first); + } + } + q.pop(); + } + } + + size_t nbases = bases.size(); + if (nbases <= k) + { + groups = PartGroupsT(nbases); + for (size_t i = 0; i < nbases; ++i) + { + auto& ancs = ancestors[bases[i]]; + + auto& group = groups[i]; + group.reserve(ancs.size() + 1); + group.push_back(bases[i]); + for (auto anc : ancs) + { + group.push_back(static_cast(anc)); + } + } + } + else + { + // pick top K groups by minimizing sum weight of unique ancestors + std::vector base_groups; + base_groups.reserve(nbases); + for (auto& base : bases) + { + auto& ancs = ancestors.at(base); + double bweight = weight_map.at(base); + for (auto& anc : ancs) + { + bweight += weight_map.at(anc); + } + base_groups.push_back(WeighedGroup{{base}, ancs, bweight}); + } + auto group_cmp = + [](const WeighedGroup& a, const WeighedGroup& b) + { + return a.weight_ < b.weight_; + }; + auto group_mincmp = + [](const WeighedGroup& a, const WeighedGroup& b) + { + return a.weight_ > b.weight_; + }; + + std::make_heap(base_groups.begin(), base_groups.end(), group_cmp); + std::vector kgroups; + for (size_t i = 0; i < k; ++i) + { + kgroups.push_back(base_groups.front()); + std::push_heap(kgroups.begin(), kgroups.end(), group_mincmp); + + std::pop_heap(base_groups.begin(), base_groups.end(), group_cmp); + base_groups.pop_back(); + } + for (size_t i = k; i < nbases; ++i) + { + auto smallest_kgroup = kgroups.front(); + auto& smallest_bgroup = base_groups.front(); + // join the smallest groups + smallest_kgroup.weight_ += weight_map.at(smallest_bgroup.reps_[0]); + auto& bg_ancs = smallest_bgroup.ancestors_; + for (auto& bg_anc : bg_ancs) + { + if (false == estd::has(smallest_kgroup.ancestors_, bg_anc)) + { + smallest_kgroup.weight_ += weight_map.at(bg_anc); + smallest_kgroup.ancestors_.emplace(bg_anc); + } + } + smallest_kgroup.reps_.push_back(smallest_bgroup.reps_[0]); + + std::pop_heap(kgroups.begin(), kgroups.end(), group_mincmp); + kgroups[k - 1] = smallest_kgroup; + std::push_heap(kgroups.begin(), kgroups.end(), group_mincmp); + + std::pop_heap(base_groups.begin(), base_groups.end(), group_cmp); + base_groups.pop_back(); + } + groups.reserve(nbases); + for (auto& kgroup : kgroups) + { + std::vector group; + group.reserve(kgroup.reps_.size() + kgroup.ancestors_.size()); + for (auto& rep : kgroup.reps_) + { + group.push_back(rep); + } + for (auto& anc : kgroup.ancestors_) + { + group.push_back(static_cast(anc)); + } + groups.push_back(group); + } + } + + // for each group, order by upper height + for (auto& group : groups) + { + std::sort(group.begin(), group.end(), + [&stat](ade::iTensor* a, ade::iTensor* b) + { + return stat.graphsize_[a].upper_ < stat.graphsize_[b].upper_; + }); + } + + return groups; +} + +} + +#endif diff --git a/pll/test/main.cpp b/pll/test/main.cpp new file mode 100644 index 000000000..8f2718233 --- /dev/null +++ b/pll/test/main.cpp @@ -0,0 +1,12 @@ + +#include "gtest/gtest.h" + +#include "exam/exam.hpp" + +int main (int argc, char** argv) +{ + set_logger(std::static_pointer_cast(exam::tlogger)); + + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/pll/test/test_partition.cpp b/pll/test/test_partition.cpp new file mode 100644 index 000000000..0cee64b8e --- /dev/null +++ b/pll/test/test_partition.cpp @@ -0,0 +1,137 @@ + +#ifndef DISABLE_PARTITION_TEST + + +#include + +#include "gtest/gtest.h" + +#include "exam/exam.hpp" + +#include "ead/ead.hpp" + +#include "pll/partition.hpp" + + +TEST(PARTITION, Kpartition) +{ + ade::Shape in_shape({10, 3}); + ade::Shape weight0_shape({9, 10}); + ade::Shape bias0_shape({9}); + ade::Shape weight1_shape({5, 9}); + ade::Shape bias1_shape({5}); + ade::Shape out_shape({5,3}); + + std::vector in_data = { + 0.8575073725, 0.0910915775, 0.9133499042, + 0.0660953837, 0.2419061306, 0.3696410139, + 0.4013100896, 0.5172528430, 0.1323293907, + 0.4278464745, 0.0410668952, 0.1652450001, + 0.4190357348, 0.2008750679, 0.5067047954, + 0.0413809185, 0.3094381994, 0.2199267703, + 0.9221660000, 0.0781527711, 0.4804519704, + 0.1206410099, 0.1630566401, 0.6360934496, + 0.2976741228, 0.0709092288, 0.1560062294, + 0.2497900767, 0.2511943240, 0.5474749688, + }; + std::vector w0_data = { + 0.1613409462, 0.9457144276, 0.9495257985, + 0.2793930966, 0.2723075870, 0.3588235299, + 0.3938297525, 0.3393228095, 0.5716848928, + + 0.6339794570, 0.6139023931, 0.7724697132, + 0.0698909799, 0.6535996814, 0.2244414703, + 0.4194435958, 0.6321126915, 0.2891770970, + + 0.6457218252, 0.3446479912, 0.3171555503, + 0.2252455176, 0.7602351414, 0.9312997376, + 0.1333143817, 0.7155225995, 0.2032897111, + + 0.0224006501, 0.9908721456, 0.0319914474, + 0.9704203846, 0.5274515737, 0.3339836660, + 0.7091134065, 0.5576000673, 0.7501829168, + + 0.2442227058, 0.1842266311, 0.8504773433, + 0.3926588922, 0.2833117224, 0.9620642436, + 0.1147953593, 0.4177183136, 0.2914940248, + + 0.0219832027, 0.4042951820, 0.3837337063, + 0.5981982488, 0.1894350758, 0.6036559792, + 0.1345821880, 0.8417718235, 0.6846826161, + + 0.7122232912, 0.4294986009, 0.6729728379, + 0.4321375967, 0.0759832146, 0.6365364108, + 0.6262763516, 0.7468564758, 0.7312610352, + + 0.9549105342, 0.1993684076, 0.4657970235, + 0.7518583439, 0.2239421519, 0.2273247980, + 0.5971696669, 0.7370904837, 0.9237708470, + + 0.1546511078, 0.6033025992, 0.4691343777, + 0.1600327544, 0.4296355788, 0.6961808304, + 0.2007259045, 0.3526185965, 0.8712730678, + + 0.6285644271, 0.0312853544, 0.7161966751, + 0.1366034209, 0.0015131718, 0.0057481276, + 0.0878447392, 0.4122209597, 0.2014009404, + }; + std::vector b0_data = { + 0.8801580962, 0.5008790402, 0.8270796004, + 0.7715771391, 0.2662051941, 0.5704192232, + 0.5373307027, 0.1856321630, 0.5669738908, + }; + std::vector w1_data = { + 0.4260408543, 0.5722656129, 0.9604073010, 0.2924135371, 0.7859575638, + 0.7289488993, 0.9683322421, 0.3507929923, 0.6774173641, 0.6407122174, + 0.8975668345, 0.4348200381, 0.6121628654, 0.8736230885, 0.0833758337, + 0.8422647036, 0.3981612935, 0.0784194187, 0.7461062031, 0.4919135980, + 0.8157699378, 0.4931650049, 0.6282318830, 0.6176567461, 0.8502403216, + 0.9404269220, 0.6854869637, 0.9051396941, 0.2966845031, 0.2721141527, + 0.2877237941, 0.0590600035, 0.6288776397, 0.1353232608, 0.9594369234, + 0.5920096937, 0.1026460668, 0.9349781326, 0.2640904799, 0.6960341493, + 0.5056684425, 0.6169691389, 0.8741161106, 0.5260663550, 0.8161608103, + }; + std::vector b1_data = { + 0.1993173272, 0.6008457459, 0.3355862244, 0.1906307583, 0.3078908360, + }; + std::vector out_data = { + 0.5301287168, 0.0816631236, 0.4232512930, 0.1983706018, 0.2941365700, + 0.9427764606, 0.0267634765, 0.4367877602, 0.1155584527, 0.6275693090, + 0.4350741570, 0.3949956178, 0.2341486792, 0.1348473539, 0.8681677362, + }; + + ead::NodeptrT in = ead::make_variable(in_data.data(), in_shape); + ead::NodeptrT weight0 = ead::make_variable(w0_data.data(), weight0_shape); + ead::NodeptrT bias0 = ead::make_variable(b0_data.data(), bias0_shape); + ead::NodeptrT weight1 = ead::make_variable(w1_data.data(), weight1_shape); + ead::NodeptrT bias1 = ead::make_variable(b1_data.data(), bias1_shape); + ead::NodeptrT out = ead::make_variable(out_data.data(), out_shape); + + auto layer0 = tenncor::add(tenncor::matmul(in, weight0), tenncor::extend(bias0, 1, {3})); + auto sig0 = tenncor::sigmoid(layer0); + + auto layer1 = tenncor::add(tenncor::matmul(sig0, weight1), tenncor::extend(bias1, 1, {3})); + auto sig1 = tenncor::sigmoid(layer1); + + auto err = tenncor::pow(tenncor::sub(out, sig1), ead::make_constant_scalar(2, out_shape)); + + auto dw0 = ead::derive(err, weight0); + auto db0 = ead::derive(err, bias0); + auto dw1 = ead::derive(err, weight1); + auto db1 = ead::derive(err, bias1); + + auto groups = pll::k_partition({ + dw0->get_tensor(), + db0->get_tensor(), + dw1->get_tensor(), + db1->get_tensor(), + }, 2); + + ASSERT_EQ(2, groups.size()); + long ng0 = groups[0].size(); + long ng1 = groups[1].size(); + EXPECT_LE(1, std::abs(ng0 - ng1)); +} + + +#endif // DISABLE_PARTITION_TEST diff --git a/pll/test/test_session.cpp b/pll/test/test_session.cpp new file mode 100644 index 000000000..c11ddb390 --- /dev/null +++ b/pll/test/test_session.cpp @@ -0,0 +1,230 @@ + +#ifndef DISABLE_SESSION_TEST + + +#include + +#include "gtest/gtest.h" + +#include "exam/exam.hpp" + +#include "ead/ead.hpp" + +#include "pll/session.hpp" + + +TEST(SESSION, Update) +{ + ade::Shape in_shape({10, 3}); + ade::Shape weight0_shape({9, 10}); + ade::Shape bias0_shape({9}); + ade::Shape weight1_shape({5, 9}); + ade::Shape bias1_shape({5}); + ade::Shape out_shape({5,3}); + + std::vector in_data = { + 0.8575073725, 0.0910915775, 0.9133499042, + 0.0660953837, 0.2419061306, 0.3696410139, + 0.4013100896, 0.5172528430, 0.1323293907, + 0.4278464745, 0.0410668952, 0.1652450001, + 0.4190357348, 0.2008750679, 0.5067047954, + 0.0413809185, 0.3094381994, 0.2199267703, + 0.9221660000, 0.0781527711, 0.4804519704, + 0.1206410099, 0.1630566401, 0.6360934496, + 0.2976741228, 0.0709092288, 0.1560062294, + 0.2497900767, 0.2511943240, 0.5474749688, + }; + std::vector w0_data = { + 0.1613409462, 0.9457144276, 0.9495257985, + 0.2793930966, 0.2723075870, 0.3588235299, + 0.3938297525, 0.3393228095, 0.5716848928, + + 0.6339794570, 0.6139023931, 0.7724697132, + 0.0698909799, 0.6535996814, 0.2244414703, + 0.4194435958, 0.6321126915, 0.2891770970, + + 0.6457218252, 0.3446479912, 0.3171555503, + 0.2252455176, 0.7602351414, 0.9312997376, + 0.1333143817, 0.7155225995, 0.2032897111, + + 0.0224006501, 0.9908721456, 0.0319914474, + 0.9704203846, 0.5274515737, 0.3339836660, + 0.7091134065, 0.5576000673, 0.7501829168, + + 0.2442227058, 0.1842266311, 0.8504773433, + 0.3926588922, 0.2833117224, 0.9620642436, + 0.1147953593, 0.4177183136, 0.2914940248, + + 0.0219832027, 0.4042951820, 0.3837337063, + 0.5981982488, 0.1894350758, 0.6036559792, + 0.1345821880, 0.8417718235, 0.6846826161, + + 0.7122232912, 0.4294986009, 0.6729728379, + 0.4321375967, 0.0759832146, 0.6365364108, + 0.6262763516, 0.7468564758, 0.7312610352, + + 0.9549105342, 0.1993684076, 0.4657970235, + 0.7518583439, 0.2239421519, 0.2273247980, + 0.5971696669, 0.7370904837, 0.9237708470, + + 0.1546511078, 0.6033025992, 0.4691343777, + 0.1600327544, 0.4296355788, 0.6961808304, + 0.2007259045, 0.3526185965, 0.8712730678, + + 0.6285644271, 0.0312853544, 0.7161966751, + 0.1366034209, 0.0015131718, 0.0057481276, + 0.0878447392, 0.4122209597, 0.2014009404, + }; + std::vector b0_data = { + 0.8801580962, 0.5008790402, 0.8270796004, + 0.7715771391, 0.2662051941, 0.5704192232, + 0.5373307027, 0.1856321630, 0.5669738908, + }; + std::vector w1_data = { + 0.4260408543, 0.5722656129, 0.9604073010, 0.2924135371, 0.7859575638, + 0.7289488993, 0.9683322421, 0.3507929923, 0.6774173641, 0.6407122174, + 0.8975668345, 0.4348200381, 0.6121628654, 0.8736230885, 0.0833758337, + 0.8422647036, 0.3981612935, 0.0784194187, 0.7461062031, 0.4919135980, + 0.8157699378, 0.4931650049, 0.6282318830, 0.6176567461, 0.8502403216, + 0.9404269220, 0.6854869637, 0.9051396941, 0.2966845031, 0.2721141527, + 0.2877237941, 0.0590600035, 0.6288776397, 0.1353232608, 0.9594369234, + 0.5920096937, 0.1026460668, 0.9349781326, 0.2640904799, 0.6960341493, + 0.5056684425, 0.6169691389, 0.8741161106, 0.5260663550, 0.8161608103, + }; + std::vector b1_data = { + 0.1993173272, 0.6008457459, 0.3355862244, 0.1906307583, 0.3078908360, + }; + std::vector out_data = { + 0.5301287168, 0.0816631236, 0.4232512930, 0.1983706018, 0.2941365700, + 0.9427764606, 0.0267634765, 0.4367877602, 0.1155584527, 0.6275693090, + 0.4350741570, 0.3949956178, 0.2341486792, 0.1348473539, 0.8681677362, + }; + + ead::NodeptrT in = ead::make_variable(in_data.data(), in_shape); + ead::NodeptrT weight0 = ead::make_variable(w0_data.data(), weight0_shape); + ead::NodeptrT bias0 = ead::make_variable(b0_data.data(), bias0_shape); + ead::NodeptrT weight1 = ead::make_variable(w1_data.data(), weight1_shape); + ead::NodeptrT bias1 = ead::make_variable(b1_data.data(), bias1_shape); + ead::NodeptrT out = ead::make_variable(out_data.data(), out_shape); + + auto layer0 = tenncor::add(tenncor::matmul(in, weight0), tenncor::extend(bias0, 1, {3})); + auto sig0 = tenncor::sigmoid(layer0); + + auto layer1 = tenncor::add(tenncor::matmul(sig0, weight1), tenncor::extend(bias1, 1, {3})); + auto sig1 = tenncor::sigmoid(layer1); + + auto err = tenncor::pow(tenncor::sub(out, sig1), ead::make_constant_scalar(2, out_shape)); + + auto dw0 = ead::derive(err, weight0); + auto db0 = ead::derive(err, bias0); + auto dw1 = ead::derive(err, weight1); + auto db1 = ead::derive(err, bias1); + + pll::Session sess(4); + sess.track({ + dw0->get_tensor(), + db0->get_tensor(), + dw1->get_tensor(), + db1->get_tensor(), + }); + sess.update(); + + std::vector expect_gw0 = { + 0.0027019915285570115, 0.0049524065585107684, 0.0025163812594914499, + 0.0038923591714517891, 0.0069661439225563049, 0.0031510414764447736, + 0.0022478768029587262, 0.0022765639443853786, 0.0033410980166779791, + 0.00097522116465253051, 0.001693896620321596, 0.00095117349853452403, + 0.0013105640666332885, 0.0020640852743794621, 0.00092385650660917521, + 0.00066472294682227138, 0.00077684718047769464, 0.0010573870695921599, + 0.0030538233109959514, 0.0059914873371482626, 0.002816933963813279, + 0.0046344494070597901, 0.0074484900533361223, 0.002923178818749005, + 0.0025888494003570082, 0.0024167440905060772, 0.0036775897657920385, + 0.0024904082366803493, 0.0038341910866663683, 0.002500010407779862, + 0.0030142629092504893, 0.0052389646418249634, 0.0027829501832842408, + 0.0014995699089375711, 0.0020951478239990117, 0.002647907962560701, + 0.0027345254951523104, 0.0047865076822633029, 0.0026658727484682914, + 0.0036954188898844099, 0.0057282961097162239, 0.0025178275492600422, + 0.0018635506556079224, 0.0021607566147704336, 0.0029495543716158779, + 0.00085640005061550983, 0.0017314042599025487, 0.00076741704372808913, + 0.0013502530638826596, 0.0023208864089261359, 0.0009271185274612394, + 0.0008027150040004346, 0.00070015113143881663, 0.0011081335206311336, + 0.0019621893481767188, 0.0036606508512356819, 0.00185644674133355, + 0.0028297033136024576, 0.004484638344372795, 0.0018499041696268298, + 0.0015164101514628795, 0.0015527185924082477, 0.0022527047367589602, + 0.0021165392753594199, 0.003915006058678872, 0.0019922410790477645, + 0.0030454607213162344, 0.0050629793776993106, 0.00217522488536227, + 0.0016780267061119055, 0.0017163284163560558, 0.0024973871364443096, + 0.0037214774412162085, 0.0065510651741015865, 0.0036557068873296914, + 0.0050194415379978593, 0.0073000722708336623, 0.0030647941129167272, + 0.0024288766857152181, 0.0028581925623700367, 0.0038626543124159161, + 0.0023858654073475815, 0.0040005201672014658, 0.0023078024962114858, + 0.0031512536042022608, 0.0056436665737315383, 0.0027835035219529766, + 0.0017163829072048768, 0.0020227502089074081, 0.0027598072650753232, + }; + std::vector expect_gb0 = { + 0.0073014851440853963, 0.012795691944764515, 0.0070609853996545418, + 0.0099353821844054037, 0.016126120980560758, 0.0072594252580560938, + 0.0051855631031577599, 0.0058893997089519293, 0.0081361796595888665, + }; + std::vector expect_gw1 = { + 0.0075364033117421396, 0.050253916292103726, 0.012521300175850935, + 0.071258507740799906, 0.011490047203544582, 0.0074889441884519962, + 0.049364053114276017, 0.012400168850027316, 0.070298267826285218, + 0.011199991977589233, 0.0078271335097107944, 0.052010295641316096, + 0.013009172329239052, 0.073906224147165633, 0.011831323397315638, + 0.007474817281334166, 0.049098796177996611, 0.012354849203709242, + 0.069981094983390488, 0.011130069952177708, 0.006659969695296075, + 0.045029505644527811, 0.01116649756842061, 0.063711311399035839, + 0.010289373247410607, 0.0074443608399844983, 0.050801211812765354, + 0.012559014313408341, 0.071776564373706303, 0.011602207271183348, + 0.0070458198331052385, 0.046265739369542938, 0.011635104124310208, + 0.065919115499176104, 0.010502662637079581, 0.0073178590190504517, + 0.048699319909912865, 0.012117165013920111, 0.068991625331410358, + 0.011180624845463449, 0.0076281958672005084, 0.050999158876468637, + 0.012744598043270331, 0.072449921542875759, 0.011571221536496201, + }; + std::vector expect_gb1 = { + 0.0083642760546030238, 0.055794840260732122, 0.013998520595663699, 0.079441131671069379, 0.012580279526871282, + }; + + { + auto gotshape = dw0->shape(); + ASSERT_ARREQ(weight0_shape, gotshape); + } + double* gw0ptr = (double*) dw0->data(); + for (size_t i = 0, n = weight0_shape.n_elems(); i < n; ++i) + { + EXPECT_DOUBLE_EQ(expect_gw0[i], gw0ptr[i]); + } + { + auto gotshape = db0->shape(); + ASSERT_ARREQ(bias0_shape, gotshape); + } + double* gb0ptr = (double*) db0->data(); + for (size_t i = 0, n = bias0_shape.n_elems(); i < n; ++i) + { + EXPECT_DOUBLE_EQ(expect_gb0[i], gb0ptr[i]); + } + { + auto gotshape = dw1->shape(); + ASSERT_ARREQ(weight1_shape, gotshape); + } + + double* gw1ptr = (double*) dw1->data(); + for (size_t i = 0, n = weight1_shape.n_elems(); i < n; ++i) + { + EXPECT_DOUBLE_EQ(expect_gw1[i], gw1ptr[i]); + } + { + auto gotshape = db1->shape(); + ASSERT_ARREQ(bias1_shape, gotshape); + } + double* gb1ptr = (double*) db1->data(); + for (size_t i = 0, n = bias1_shape.n_elems(); i < n; ++i) + { + EXPECT_DOUBLE_EQ(expect_gb1[i], gb1ptr[i]); + } +} + + +#endif // DISABLE_SESSION_TEST diff --git a/pll/weights.proto b/pll/weights.proto new file mode 100644 index 000000000..9e7c7389a --- /dev/null +++ b/pll/weights.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; + +option go_package = "github.com/mingkaic/tenncor/pll"; + +package weights; + +message OpWeights +{ + string label = 1; + map weights = 2; +} diff --git a/rocnnet/BUILD.bazel b/rocnnet/BUILD.bazel index bbf70bd67..9122c8786 100644 --- a/rocnnet/BUILD.bazel +++ b/rocnnet/BUILD.bazel @@ -42,6 +42,13 @@ py_binary( data = ["//cfg:optimizations"], ) +py_binary( + name = "comparison_mlp_grad_pll", + srcs = ["comparison/comparison_mlp_grad_pll.py"], + deps = [":rocnnet_py", "//pll:pll_py"], + data = ["//cfg:optimizations"], +) + ######### DEMOS ######### cc_binary( @@ -53,24 +60,21 @@ cc_binary( "//rocnnet/trainer:trainer", "@com_github_mingkaic_cppkg//flag:flag", ], - data = glob(["pretrained/*"]) + - ["//cfg:optimizations"], + data = ["//:models", "//cfg:optimizations"], ) py_binary( name = "gd_demo", srcs = ["demo/gd_demo.py"], deps = [":rocnnet_py"], - data = glob(["pretrained/*"]) + - ["//cfg:optimizations"], + data = ["//:models", "//cfg:optimizations"], ) py_binary( name = "dqn_demo", srcs = ["demo/dqn_demo.py"], deps = [":rocnnet_py"], - data = glob(["pretrained/*"]) + - ["//cfg:optimizations"], + data = ["//:models", "//cfg:optimizations"], ) py_binary( @@ -81,20 +85,8 @@ py_binary( ":rocnnet_py", "//dbg:grpc_dbg_py", ], - data = glob(["pretrained/*", "demo/MNIST_data/*"]) + - ["//cfg:optimizations"], -) - -py_binary( - name = "raw_rbm_demo", - srcs = glob(["demo/data/*.py"]) + - ["demo/raw_rbm_demo.py"], - deps = [ - ":rocnnet_py", - "//dbg:grpc_dbg_py", - ], - data = glob(["pretrained/*", "demo/MNIST_data/*"]) + - ["//cfg:optimizations"], + data = glob(["demo/MNIST_data/*"]) + + ["//:models", "//cfg:optimizations"], ) # cc_binary( @@ -107,5 +99,5 @@ py_binary( # "@com_github_mingkaic_cppkg//flag:flag", # "//dbg:dbg", # ], -# data = glob(["pretrained/*"]), +# data = glob([]), # ) diff --git a/rocnnet/comparison/comparison_matmul.py b/rocnnet/comparison/comparison_matmul.py index c165a98b4..c88b90fa8 100644 --- a/rocnnet/comparison/comparison_matmul.py +++ b/rocnnet/comparison/comparison_matmul.py @@ -37,7 +37,7 @@ tf_var = tf.Variable(data) tf_var2 = tf.Variable(data2) - tfsess = tf.Session() + tfsess = tf.compat.v1.Session() tfsess.run(tf_var.initializer) tfsess.run(tf_var2.initializer) diff --git a/rocnnet/comparison/comparison_mlp.py b/rocnnet/comparison/comparison_mlp.py index fd0dbe01c..8872cf19c 100644 --- a/rocnnet/comparison/comparison_mlp.py +++ b/rocnnet/comparison/comparison_mlp.py @@ -7,15 +7,23 @@ import ead.tenncor as tc import ead.ead as ead + import rocnnet.rocnnet as rcn matrix_dims = [ - 10, + 24, 50, + 74, 100, + 124, 150, + 174, 200, + 224, 250, + 512, + 1024, + 1500, ] def batch_generate(n, batchsize): @@ -39,22 +47,22 @@ def __init__(self, input_sizes, output_size, scope): self.output_size = output_size self.scope = scope or "Layer" - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): self.Ws = [] for input_idx, input_size in enumerate(input_sizes): W_name = "W_%d" % (input_idx,) W_initializer = tf.random_uniform_initializer( -1.0 / math.sqrt(input_size), 1.0 / math.sqrt(input_size)) - W_var = tf.get_variable(W_name, (input_size, output_size), initializer=W_initializer) + W_var = tf.compat.v1.get_variable(W_name, (input_size, output_size), initializer=W_initializer) self.Ws.append(W_var) - self.b = tf.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) + self.b = tf.compat.v1.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) def __call__(self, xs): if type(xs) != list: xs = [xs] assert len(xs) == len(self.Ws), \ "Expected %d input vectors, got %d" % (len(self.Ws), len(xs)) - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): return sum([tf.matmul(x, W) for x, W in zip(xs, self.Ws)]) + self.b def variables(self): @@ -63,9 +71,9 @@ def variables(self): def copy(self, scope=None): scope = scope or self.scope + "_copy" - with tf.variable_scope(scope) as sc: + with tf.compat.v1.variable_scope(scope) as sc: for v in self.variables(): - tf.get_variable(base_name(v), v.get_shape(), + tf.compat.v1.get_variable(base_name(v), v.get_shape(), initializer=lambda x,dtype=tf.float32,partition_info=None: v.initialized_value()) sc.reuse_variables() return Layer(self.input_sizes, self.output_size, scope=sc) @@ -80,7 +88,7 @@ def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layer assert len(hiddens) == len(nonlinearities), \ "Number of hiddens must be equal to number of nonlinearities" - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): if given_layers is not None: self.input_layer = given_layers[0] self.layers = given_layers[1:] @@ -94,7 +102,7 @@ def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layer def __call__(self, xs): if type(xs) != list: xs = [xs] - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): hidden = self.input_nonlinearity(self.input_layer(xs)) for layer, nonlinearity in zip(self.layers, self.layer_nonlinearities): hidden = nonlinearity(layer(hidden)) @@ -118,34 +126,38 @@ def copy(self, scope=None): for matrix_dim in matrix_dims: n_in = matrix_dim - n_out = n_in / 2 + n_out = int(n_in / 2) batch_size = 1 # regular mlp - nonlins = [tc.sigmoid, tc.sigmoid] - hiddens = [matrix_dim, n_out] - - brain = rcn.get_mlp(n_in, hiddens, 'brain_' + str(matrix_dim)) + brain = rcn.SequentialModel("comparison") + brain.add(rcn.Dense(matrix_dim, n_in, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="0")) + brain.add(rcn.sigmoid()) + brain.add(rcn.Dense(n_out, matrix_dim, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="1")) + brain.add(rcn.sigmoid()) invar = ead.variable(np.zeros([batch_size, n_in], dtype=float), 'in') - out = brain.forward(invar, nonlins) + out = brain.connect(invar) expected_out = ead.variable(np.zeros([batch_size, n_out], dtype=float), 'expected_out') err = tc.square(tc.sub(expected_out, out)) # tensorflow mlp tf_brain = MLP([n_in], [matrix_dim, n_out], [tf.sigmoid, tf.sigmoid], scope='brain_' + str(matrix_dim)) - tf_invar = tf.placeholder(tf.float32, [batch_size, n_in], name='tf_invar') + tf_invar = tf.compat.v1.placeholder(tf.float32, [batch_size, n_in], name='tf_invar') tf_out = tf_brain(tf_invar) - tf_expected_out = tf.placeholder(tf.float32, [batch_size, n_out], name='tf_expected_out') + tf_expected_out = tf.compat.v1.placeholder(tf.float32, [batch_size, n_out], name='tf_expected_out') tf_err = tf.square(tf_expected_out - tf_out) sess = ead.Session() - sess.track(err) - - tfsess = tf.Session() - tfsess.run(tf.global_variables_initializer()) + sess.track([err]) + tfsess = tf.compat.v1.Session() + tfsess.run(tf.compat.v1.global_variables_initializer()) test_batch = batch_generate(n_in, batch_size) test_batch_out = avgevry2(test_batch) diff --git a/rocnnet/comparison/comparison_mlp_grad.py b/rocnnet/comparison/comparison_mlp_grad.py index 8d7283a39..f6504ab46 100644 --- a/rocnnet/comparison/comparison_mlp_grad.py +++ b/rocnnet/comparison/comparison_mlp_grad.py @@ -7,15 +7,23 @@ import ead.tenncor as tc import ead.ead as ead + import rocnnet.rocnnet as rcn matrix_dims = [ - 10, + 24, 50, + 74, 100, + 124, 150, + 174, 200, + 224, 250, + 512, + 1024, + 1500, ] def batch_generate(n, batchsize): @@ -39,22 +47,22 @@ def __init__(self, input_sizes, output_size, scope): self.output_size = output_size self.scope = scope or "Layer" - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): self.Ws = [] for input_idx, input_size in enumerate(input_sizes): W_name = "W_%d" % (input_idx,) W_initializer = tf.random_uniform_initializer( -1.0 / math.sqrt(input_size), 1.0 / math.sqrt(input_size)) - W_var = tf.get_variable(W_name, (input_size, output_size), initializer=W_initializer) + W_var = tf.compat.v1.get_variable(W_name, (input_size, output_size), initializer=W_initializer) self.Ws.append(W_var) - self.b = tf.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) + self.b = tf.compat.v1.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) def __call__(self, xs): if type(xs) != list: xs = [xs] assert len(xs) == len(self.Ws), \ "Expected %d input vectors, got %d" % (len(self.Ws), len(xs)) - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): return sum([tf.matmul(x, W) for x, W in zip(xs, self.Ws)]) + self.b def variables(self): @@ -63,9 +71,9 @@ def variables(self): def copy(self, scope=None): scope = scope or self.scope + "_copy" - with tf.variable_scope(scope) as sc: + with tf.compat.v1.variable_scope(scope) as sc: for v in self.variables(): - tf.get_variable(base_name(v), v.get_shape(), + tf.compat.v1.get_variable(base_name(v), v.get_shape(), initializer=lambda x,dtype=tf.float32,partition_info=None: v.initialized_value()) sc.reuse_variables() return Layer(self.input_sizes, self.output_size, scope=sc) @@ -80,7 +88,7 @@ def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layer assert len(hiddens) == len(nonlinearities), \ "Number of hiddens must be equal to number of nonlinearities" - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): if given_layers is not None: self.input_layer = given_layers[0] self.layers = given_layers[1:] @@ -94,7 +102,7 @@ def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layer def __call__(self, xs): if type(xs) != list: xs = [xs] - with tf.variable_scope(self.scope): + with tf.compat.v1.variable_scope(self.scope): hidden = self.input_nonlinearity(self.input_layer(xs)) for layer, nonlinearity in zip(self.layers, self.layer_nonlinearities): hidden = nonlinearity(layer(hidden)) @@ -119,32 +127,36 @@ def copy(self, scope=None): for matrix_dim in matrix_dims: n_in = matrix_dim - n_out = n_in / 2 + n_out = int(n_in / 2) batch_size = 1 sess = ead.Session() - tfsess = tf.Session() - + tfsess = tf.compat.v1.Session() # regular mlp - nonlins = [tc.sigmoid, tc.sigmoid] - hiddens = [matrix_dim, n_out] - - brain = rcn.get_mlp(n_in, hiddens, 'brain_' + str(matrix_dim)) + brain = rcn.SequentialModel("comparison") + brain.add(rcn.Dense(matrix_dim, n_in, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="0")) + brain.add(rcn.sigmoid()) + brain.add(rcn.Dense(n_out, matrix_dim, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="1")) + brain.add(rcn.sigmoid()) invar = ead.variable(np.zeros([batch_size, n_in], dtype=float), 'in') - out = brain.forward(invar, nonlins) + out = brain.connect(invar) expected_out = ead.variable(np.zeros([batch_size, n_out], dtype=float), 'expected_out') err = tc.square(tc.sub(expected_out, out)) - trainer = rcn.MLPTrainer(brain, nonlins, sess, rcn.get_sgd(learning_rate), batch_size) + trainer = rcn.MLPTrainer(brain, sess, rcn.get_sgd(learning_rate), batch_size) # tensorflow mlp tf_brain = MLP([n_in], [matrix_dim, n_out], [tf.sigmoid, tf.sigmoid], scope='brain_' + str(matrix_dim)) - tf_invar = tf.placeholder(tf.float32, [batch_size, n_in], name='tf_invar') + tf_invar = tf.compat.v1.placeholder(tf.float32, [batch_size, n_in], name='tf_invar') tf_out = tf_brain(tf_invar) - tf_expected_out = tf.placeholder(tf.float32, [batch_size, n_out], name='tf_expected_out') + tf_expected_out = tf.compat.v1.placeholder(tf.float32, [batch_size, n_out], name='tf_expected_out') tf_err = tf.square(tf_expected_out - tf_out) layer0 = tf_brain.input_layer @@ -180,9 +192,8 @@ def calculate_update(batch, batch_out): return out - sess.track(err) - tfsess.run(tf.global_variables_initializer()) - + sess.track([err]) + tfsess.run(tf.compat.v1.global_variables_initializer()) test_batch = batch_generate(n_in, batch_size) test_batch_out = avgevry2(test_batch) diff --git a/rocnnet/comparison/comparison_mlp_grad_pll.py b/rocnnet/comparison/comparison_mlp_grad_pll.py new file mode 100644 index 000000000..3e012e575 --- /dev/null +++ b/rocnnet/comparison/comparison_mlp_grad_pll.py @@ -0,0 +1,221 @@ +import time +import math + +import numpy as np +import matplotlib.pyplot as plt +import tensorflow as tf + +import ead.tenncor as tc +import ead.ead as ead + +import pll.pll as pll + +import rocnnet.rocnnet as rcn + +matrix_dims = [ + 24, + 50, + 74, + 100, + 124, + 150, + 174, + 200, + 224, + 250, + 512, + 1024, + 1500, +] + +def batch_generate(n, batchsize): + total = n * batchsize + return np.random.rand(total) + +def avgevry2(indata): + return (indata[0::2] + indata[1::2]) / 2 + +def base_name(var): + """Extracts value passed to name= when creating a variable""" + return var.name.split('/')[-1].split(':')[0] + +class Layer(object): + def __init__(self, input_sizes, output_size, scope): + """Cretes a neural network layer.""" + if type(input_sizes) != list: + input_sizes = [input_sizes] + + self.input_sizes = input_sizes + self.output_size = output_size + self.scope = scope or "Layer" + + with tf.compat.v1.variable_scope(self.scope): + self.Ws = [] + for input_idx, input_size in enumerate(input_sizes): + W_name = "W_%d" % (input_idx,) + W_initializer = tf.random_uniform_initializer( + -1.0 / math.sqrt(input_size), 1.0 / math.sqrt(input_size)) + W_var = tf.compat.v1.get_variable(W_name, (input_size, output_size), initializer=W_initializer) + self.Ws.append(W_var) + self.b = tf.compat.v1.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) + + def __call__(self, xs): + if type(xs) != list: + xs = [xs] + assert len(xs) == len(self.Ws), \ + "Expected %d input vectors, got %d" % (len(self.Ws), len(xs)) + with tf.compat.v1.variable_scope(self.scope): + return sum([tf.matmul(x, W) for x, W in zip(xs, self.Ws)]) + self.b + + def variables(self): + return [self.b] + self.Ws + + def copy(self, scope=None): + scope = scope or self.scope + "_copy" + + with tf.compat.v1.variable_scope(scope) as sc: + for v in self.variables(): + tf.compat.v1.get_variable(base_name(v), v.get_shape(), + initializer=lambda x,dtype=tf.float32,partition_info=None: v.initialized_value()) + sc.reuse_variables() + return Layer(self.input_sizes, self.output_size, scope=sc) + +class MLP(object): + def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layers=None): + self.input_sizes = input_sizes + self.hiddens = hiddens + self.input_nonlinearity, self.layer_nonlinearities = nonlinearities[0], nonlinearities[1:] + self.scope = scope or "MLP" + + assert len(hiddens) == len(nonlinearities), \ + "Number of hiddens must be equal to number of nonlinearities" + + with tf.compat.v1.variable_scope(self.scope): + if given_layers is not None: + self.input_layer = given_layers[0] + self.layers = given_layers[1:] + else: + self.input_layer = Layer(input_sizes, hiddens[0], scope="input_layer") + self.layers = [] + + for l_idx, (h_from, h_to) in enumerate(zip(hiddens[:-1], hiddens[1:])): + self.layers.append(Layer(h_from, h_to, scope="hidden_layer_%d" % (l_idx,))) + + def __call__(self, xs): + if type(xs) != list: + xs = [xs] + with tf.compat.v1.variable_scope(self.scope): + hidden = self.input_nonlinearity(self.input_layer(xs)) + for layer, nonlinearity in zip(self.layers, self.layer_nonlinearities): + hidden = nonlinearity(layer(hidden)) + return hidden + + def variables(self): + res = self.input_layer.variables() + for layer in self.layers: + res.extend(layer.variables()) + return res + + def copy(self, scope=None): + scope = scope or self.scope + "_copy" + nonlinearities = [self.input_nonlinearity] + self.layer_nonlinearities + given_layers = [self.input_layer.copy()] + [layer.copy() for layer in self.layers] + return MLP(self.input_sizes, self.hiddens, nonlinearities, scope=scope, + given_layers=given_layers) + +ead_durs = [] +tf_durs = [] +learning_rate = 0.9 + +for matrix_dim in matrix_dims: + n_in = matrix_dim + n_out = int(n_in / 2) + batch_size = 1 + + sess = pll.Session(nthread=4) + tfsess = tf.compat.v1.Session() + + # regular mlp + brain = rcn.SequentialModel("comparison") + brain.add(rcn.Dense(matrix_dim, n_in, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="0")) + brain.add(rcn.sigmoid()) + brain.add(rcn.Dense(n_out, matrix_dim, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="1")) + brain.add(rcn.sigmoid()) + + invar = ead.variable(np.zeros([batch_size, n_in], dtype=float), 'in') + out = brain.connect(invar) + expected_out = ead.variable(np.zeros([batch_size, n_out], dtype=float), 'expected_out') + err = tc.square(tc.sub(expected_out, out)) + + trainer = rcn.MLPTrainer(brain, sess, rcn.get_sgd(learning_rate), batch_size) + + # tensorflow mlp + tf_brain = MLP([n_in], [matrix_dim, n_out], [tf.sigmoid, tf.sigmoid], scope='brain_' + str(matrix_dim)) + + tf_invar = tf.compat.v1.placeholder(tf.float32, [batch_size, n_in], name='tf_invar') + tf_out = tf_brain(tf_invar) + tf_expected_out = tf.compat.v1.placeholder(tf.float32, [batch_size, n_out], name='tf_expected_out') + tf_err = tf.square(tf_expected_out - tf_out) + + layer0 = tf_brain.input_layer + layer1 = tf_brain.layers[0] + + tf_w0 = layer0.Ws[0] + tf_b0 = layer0.b + tf_w1 = layer1.Ws[0] + tf_b1 = layer1.b + + tf_dw0, tf_db0, tf_dw1, tf_db1 = tf.gradients(tf_err, [ + tf_w0, + tf_b0, + tf_w1, + tf_b1, + ]) + w0_update = tf_w0.assign_sub(learning_rate * tf_dw0) + b0_update = tf_b0.assign_sub(learning_rate * tf_db0) + w1_update = tf_w1.assign_sub(learning_rate * tf_dw1) + b1_update = tf_b1.assign_sub(learning_rate * tf_db1) + + def calculate_update(batch, batch_out): + out, _, _, _, _ = tfsess.run([ + tf_err, + w0_update, + b0_update, + w1_update, + b1_update, + ], { + tf_invar: batch, + tf_expected_out: batch_out, + }) + + return out + + sess.track([err]) + tfsess.run(tf.compat.v1.global_variables_initializer()) + + test_batch = batch_generate(n_in, batch_size) + test_batch_out = avgevry2(test_batch) + tf_test_batch = test_batch.reshape([batch_size, n_in]) + tf_test_batch_out = test_batch_out.reshape([batch_size, n_out]) + + start = time.time() + trainer.train(test_batch, test_batch_out) + ead_dur = time.time() - start + + start = time.time() + calculate_update(tf_test_batch, tf_test_batch_out) + tf_dur = time.time() - start + + ead_durs.append(ead_dur) + tf_durs.append(tf_dur) + +print('ead durations: ', ead_durs) +print('tf durations: ', tf_durs) +ead_line = plt.plot(matrix_dims, ead_durs, 'r--', label='ead durations') +tf_line = plt.plot(matrix_dims, tf_durs, 'b--', label='tf durations') +plt.legend() +plt.show() diff --git a/rocnnet/demo/MNIST_data/t10k-images-idx3-ubyte.gz b/rocnnet/demo/MNIST_data/t10k-images-idx3-ubyte.gz deleted file mode 100644 index 5ace8ea93..000000000 Binary files a/rocnnet/demo/MNIST_data/t10k-images-idx3-ubyte.gz and /dev/null differ diff --git a/rocnnet/demo/MNIST_data/t10k-labels-idx1-ubyte.gz b/rocnnet/demo/MNIST_data/t10k-labels-idx1-ubyte.gz deleted file mode 100644 index a7e141541..000000000 Binary files a/rocnnet/demo/MNIST_data/t10k-labels-idx1-ubyte.gz and /dev/null differ diff --git a/rocnnet/demo/MNIST_data/train-images-idx3-ubyte.gz b/rocnnet/demo/MNIST_data/train-images-idx3-ubyte.gz deleted file mode 100644 index b50e4b6bc..000000000 Binary files a/rocnnet/demo/MNIST_data/train-images-idx3-ubyte.gz and /dev/null differ diff --git a/rocnnet/demo/MNIST_data/train-labels-idx1-ubyte.gz b/rocnnet/demo/MNIST_data/train-labels-idx1-ubyte.gz deleted file mode 100644 index 707a576bb..000000000 Binary files a/rocnnet/demo/MNIST_data/train-labels-idx1-ubyte.gz and /dev/null differ diff --git a/rocnnet/demo/dqn_demo.py b/rocnnet/demo/dqn_demo.py index 2ede1d3f1..d16646d0c 100644 --- a/rocnnet/demo/dqn_demo.py +++ b/rocnnet/demo/dqn_demo.py @@ -57,8 +57,8 @@ def main(args): help='Number of steps per episodes (default: 100)') parser.add_argument('--save', dest='save', nargs='?', default='', help='Filename to save model (default: )') - parser.add_argument('--load', dest='load', nargs='?', default='rocnnet/pretrained/dqnmodel.pbx', - help='Filename to load pretrained model (default: rocnnet/pretrained/dqnmodel.pbx)') + parser.add_argument('--load', dest='load', nargs='?', default='models/dqnmodel.pbx', + help='Filename to load pretrained model (default: models/dqnmodel.pbx)') args = parser.parse_args(args) episode_count = args.n_episodes @@ -71,18 +71,31 @@ def main(args): n_observations = 10 n_actions = 9 - n_outs = [9, n_actions] - nonlins = [tc.tanh, rcn.identity] - - brain = rcn.get_mlp(n_observations, n_outs, 'brain') - untrained_brain = brain.copy() + model = rcn.SequentialModel("demo") + model.add(rcn.Dense(9, n_observations, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="0")) + model.add(rcn.sigmoid()) + model.add(rcn.Dense(n_actions, 9, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="1")) + model.add(rcn.sigmoid()) + + untrained = model.clone() + try: + print('loading ' + args.load) + trained = rcn.load_file_seqmodel(args.load, "demo") + print('successfully loaded from ' + args.load) + except Exception as e: + print(e) + print('failed to load from "{}"'.format(args.load)) + trained = model.clone() bgd = rcn.get_rms_momentum( learning_rate = 0.1, - discount_factor = 0.5, - gradprocess = lambda x: tc.clip_by_l2norm(x, 5)) - param = rcn.get_dqninfo( + discount_factor = 0.5) + param = rcn.DQNInfo( mini_batch_size = 1, store_interval = 1, discount_rate = 0.99, @@ -90,20 +103,10 @@ def main(args): sess = ead.Session() - untrained_dqn = rcn.DQNTrainer(untrained_brain, nonlins, sess, bgd, param) - trained_dqn = rcn.DQNTrainer(brain, nonlins, sess, bgd, param) - try: - with open(args.load, 'rb') as f: - print('loading') - pretrained_dqn = rcn.load_dqntrainer(f.read(), - nonlins, sess, bgd, param) - print('successfully loaded from ' + args.load) - except Exception as e: - print(e) - print('failed to load from "{}"'.format(args.load)) - pretrained_brain = brain.copy() - pretrained_dqn = rcn.DQNTrainer(pretrained_brain, - nonlins, sess, bgd, param) + untrained_dqn = rcn.DQNTrainer(untrained, sess, bgd, param) + trained_dqn = rcn.DQNTrainer(model, sess, bgd, param, + gradprocess = lambda x: tc.clip_by_l2norm(x, 5)) + pretrained_dqn = rcn.DQNTrainer(trained, sess, bgd, param) sess.optimize("cfg/optimizations.rules") @@ -198,7 +201,7 @@ def main(args): if err_msg is None: try: print('saving') - if trained_dqn.serialize_to_file(args.save): + if model.save_file(args.save): print('successfully saved to {}'.format(args.save)) except Exception as e: print(e) diff --git a/rocnnet/demo/gd_demo.cpp b/rocnnet/demo/gd_demo.cpp index b51337af1..ebd545ae4 100644 --- a/rocnnet/demo/gd_demo.cpp +++ b/rocnnet/demo/gd_demo.cpp @@ -5,8 +5,6 @@ #include #include -#include "pbm/save.hpp" - #include "flag/flag.hpp" #include "ead/ead.hpp" @@ -14,6 +12,9 @@ #include "dbg/grpc/session.hpp" +#include "rocnnet/modl/model.hpp" +#include "rocnnet/modl/activations.hpp" + #include "rocnnet/trainer/mlp_trainer.hpp" static std::vector batch_generate (size_t n, size_t batchsize) @@ -68,7 +69,7 @@ int main (int argc, const char** argv) ("save", flag::opt::value(&savepath)->default_value(""), "filename to save model") ("load", flag::opt::value(&loadpath)->default_value( - "rocnnet/pretrained/gdmodel.pbx"), "filename to load pretrained model"); + "models/gdmodel.pbx"), "filename to load pretrained model"); int exit_status = 0; std::clock_t start; @@ -88,62 +89,51 @@ int main (int argc, const char** argv) uint8_t n_in = 10; uint8_t n_out = n_in / 2; std::vector n_outs = {9, n_out}; - modl::NonLinearsT nonlins = {tenncor::sigmoid, tenncor::sigmoid}; - auto brain = std::make_shared(n_in, n_outs, "brain"); - auto untrained_brain = std::make_shared(*brain); - modl::MLPptrT pretrained_brain; + modl::SequentialModel model("demo"); + model.push_back(std::make_shared(9, n_in, + eqns::unif_xavier_init(1), eqns::zero_init(), "0")); + model.push_back(modl::sigmoid()); + model.push_back(std::make_shared(n_out, 9, + eqns::unif_xavier_init(1), eqns::zero_init(), "1")); + model.push_back(modl::sigmoid()); + + modl::SequentialModel untrained_model(model); + modl::SeqModelptrT trained_model = nullptr; + std::ifstream loadstr(loadpath); if (loadstr.is_open()) { - cortenn::Layer layer; - layer.ParseFromIstream(&loadstr); - - // load graph to target - const cortenn::Graph& graph = layer.graph(); - pbm::GraphInfo info; - pbm::load_graph(info, graph); - - pretrained_brain = std::make_shared(info, "pretrained"); - - logs::infof("model successfully loaded from file '%s'", loadpath.c_str()); - if (cortenn::Layer::kItCtx != layer.layer_context_case()) - { - logs::warn("missing training context"); - } - else - { - auto& ctx = layer.it_ctx(); - logs::infof("loaded model trained for %d iterations", - ctx.iterations()); - } - + ade::TensT trained_roots; + trained_model = std::static_pointer_cast( + modl::load_layer(loadstr, trained_roots, modl::seq_model_key, "demo")); + logs::infof("model successfully loaded from file `%s`", loadpath.c_str()); loadstr.close(); } else { - logs::warnf("model failed to loaded from file '%s'", loadpath.c_str()); - pretrained_brain = std::make_shared(*brain); + logs::warnf("model failed to loaded from file `%s`", loadpath.c_str()); + trained_model = std::make_shared(model); } uint8_t n_batch = 3; size_t show_every_n = 500; - eqns::ApproxF approx = [](ead::NodeptrT& root, eqns::VariablesT leaves) + eqns::ApproxF approx = [](const eqns::VarErrsT& leaves) { - return eqns::sgd(root, leaves, 0.9); // learning rate = 0.9 + return eqns::sgd(leaves, 0.9); // learning rate = 0.9 }; dbg::InteractiveSession sess("localhost:50051"); - trainer::MLPTrainer trainer(brain, nonlins, sess, approx, n_batch); + trainer::MLPTrainer trainer(model, sess, approx, n_batch); ead::VarptrT testin = ead::make_variable_scalar( 0, ade::Shape({n_in}), "testin"); - auto untrained_out = (*untrained_brain)(testin, nonlins); - auto trained_out = (*brain)(testin, nonlins); - auto pretrained_out = (*pretrained_brain)(testin, nonlins); + auto untrained_out = untrained_model.connect(testin); + auto out = model.connect(testin); + auto trained_out = trained_model->connect(testin); sess.track({ untrained_out->get_tensor(), + out->get_tensor(), trained_out->get_tensor(), - pretrained_out->get_tensor(), }); opt::OptCtx rules = ead::parse_file("cfg/optimizations.rules"); @@ -175,8 +165,8 @@ int main (int argc, const char** argv) float pretrained_err = 0; float* untrained_res = untrained_out->data(); - float* trained_res = trained_out->data(); - float* pretrained_res = pretrained_out->data(); + float* trained_res = out->data(); + float* pretrained_res = trained_out->data(); for (size_t i = 0; i < n_test; i++) { if (i % show_every_n == show_every_n - 1) @@ -214,15 +204,15 @@ int main (int argc, const char** argv) std::ofstream savestr(savepath); if (savestr.is_open()) { - if (trainer.save(savestr)) + if (modl::save_layer(savestr, model, {})) { - logs::infof("successfully saved model to '%s'", savepath.c_str()); + logs::infof("successfully saved model to `%s`", savepath.c_str()); } savestr.close(); } else { - logs::warnf("failed to save model to '%s'", savepath.c_str()); + logs::warnf("failed to save model to `%s`", savepath.c_str()); } } diff --git a/rocnnet/demo/gd_demo.py b/rocnnet/demo/gd_demo.py index bb396c939..b111b86b4 100644 --- a/rocnnet/demo/gd_demo.py +++ b/rocnnet/demo/gd_demo.py @@ -44,8 +44,8 @@ def main(args): help='Number of times to test (default: 500)') parser.add_argument('--save', dest='save', nargs='?', default='', help='Filename to save model (default: )') - parser.add_argument('--load', dest='load', nargs='?', default='rocnnet/pretrained/gdmodel.pbx', - help='Filename to load pretrained model (default: rocnnet/pretrained/gdmodel.pbx)') + parser.add_argument('--load', dest='load', nargs='?', default='models/gdmodel.pbx', + help='Filename to load pretrained model (default: models/gdmodel.pbx)') args = parser.parse_args(args) if args.seed: @@ -54,33 +54,38 @@ def main(args): np.random.seed(args.seedval) n_in = 10 - n_out = n_in / 2 - n_outs = [9, n_out] - - nonlins = [tc.sigmoid, tc.sigmoid] - - brain = rcn.get_mlp(n_in, n_outs, 'brain') - untrained_brain = brain.copy() + n_out = int(n_in / 2) + + model = rcn.SequentialModel("demo") + model.add(rcn.Dense(9, n_in, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="0")) + model.add(rcn.sigmoid()) + model.add(rcn.Dense(n_out, 9, + weight_init=rcn.unif_xavier_init(), + bias_init=rcn.zero_init(), label="1")) + model.add(rcn.sigmoid()) + + untrained = model.clone() try: - with open(args.load, 'rb') as f: - print('loading') - pretrained_brain = brain.parse_from_string(f.read()) - print('successfully loaded from ' + args.load) + print('loading ' + args.load) + trained = rcn.load_file_seqmodel(args.load, "demo") + print('successfully loaded from ' + args.load) except Exception as e: print(e) print('failed to load from "{}"'.format(args.load)) - pretrained_brain = brain.copy() + trained = model.clone() sess = ead.Session() n_batch = args.n_batch show_every_n = 500 - trainer = rcn.MLPTrainer(brain, nonlins, sess, + trainer = rcn.MLPTrainer(model, sess, rcn.get_sgd(0.9), n_batch) testin = ead.variable(np.zeros([n_in], dtype=float), 'testin') - untrained_out = untrained_brain.forward(testin, nonlins) - trained_out = brain.forward(testin, nonlins) - pretrained_out = pretrained_brain.forward(testin, nonlins) + untrained_out = untrained.connect(testin) + trained_out = model.connect(testin) + pretrained_out = trained.connect(testin) sess.track([ untrained_out, trained_out, @@ -130,7 +135,7 @@ def main(args): try: print('saving') - if trainer.serialize_to_file(args.save): + if model.save_file(args.save): print('successfully saved to {}'.format(args.save)) except Exception as e: print(e) diff --git a/rocnnet/demo/raw_rbm_demo.py b/rocnnet/demo/raw_rbm_demo.py deleted file mode 100644 index 4c590b92a..000000000 --- a/rocnnet/demo/raw_rbm_demo.py +++ /dev/null @@ -1,319 +0,0 @@ -from __future__ import print_function - -import sys - -import matplotlib.pyplot as plt -import numpy as np -from tensorflow.examples.tutorials.mnist import input_data - -import ead.tenncor as tf -import ead.ead as ead -import rocnnet.rocnnet as rcn - - -def sample_bernoulli(probs): - return tf.random.rand_binom_one(probs) - -# def sample_gaussian(x, sigma): -# return x + tf.random_normal(tf.shape(x), mean=0.0, stddev=sigma, dtype=tf.float32) - - -# def cosine_errfunc(x, compute_visible): -# x1_norm = tf.nn.l2_normalize(x, 1) -# x2_norm = tf.nn.l2_normalize(compute_visible, 1) -# cos_val = tf.reduce_mean(tf.reduce_sum(tf.mul(x1_norm, x2_norm), 1)) -# return tf.acos(cos_val) / tf.constant(np.pi) - -def mse_errfunc(x, compute_visible): - return tf.reduce_mean(tf.square(tf.sub(x, compute_visible))) - - -class RBMConfig: - def __init__(self, - n_visible, - n_hidden, - learning_rate=0.01, - momentum=0.95, - xavier_const=1.0, - err_function=mse_errfunc, - tqdm=None): - if not 0.0 <= momentum <= 1.0: - raise ValueError('momentum should be in range [0, 1]') - - self.n_visible = n_visible - self.n_hidden = n_hidden - self.learning_rate=learning_rate - self.momentum=momentum - self.xavier_const=xavier_const - self.err_function=err_function - self.tqdm=tqdm - -class RBMInput: - def __init__(self, n_visible, n_hidden, n_batch): - self.x = ead.scalar_variable(0, [n_batch, n_visible]) - self.y = ead.scalar_variable(0, [n_batch, n_hidden]) - -class RBMStorage: - def __init__(self, config): - self.w = rcn.variable_from_init( - rcn.unif_xavier_init(config.xavier_const), - [config.n_visible, config.n_hidden]) - self.visible_bias = ead.scalar_variable(0, [config.n_visible]) - self.hidden_bias = ead.scalar_variable(0, [config.n_hidden]) - - self.delta_w = ead.scalar_variable(0, [config.n_visible, config.n_hidden]) - self.delta_visible_bias = ead.scalar_variable(0, [config.n_visible]) - self.delta_hidden_bias = ead.scalar_variable(0, [config.n_hidden]) - -class RBMOutput: - def __init__(self, update_weights, update_deltas, compute_hidden, compute_visible, compute_visible_from_hidden, compute_err): - self.update_weights = update_weights - self.update_deltas = update_deltas - self.compute_hidden = compute_hidden - self.compute_visible = compute_visible - self.compute_visible_from_hidden = compute_visible_from_hidden - self.compute_err = compute_err - assert self.update_weights is not None - assert self.update_deltas is not None - assert self.compute_hidden is not None - assert self.compute_visible is not None - assert self.compute_visible_from_hidden is not None - assert self.compute_err is not None - -def bb_init(rbm_in, rbm_storage, config): - # hidden = sigmoid(X @ W + hB) - # visible_rec = sigmoid(sample_bernoulli(hidden) @ W^T + vB) - # hidden_rec = sigmoid(visible_rec @ W + hB) - hidden_p = tf.sigmoid(tf.nn.fully_connect( - [rbm_in.x], [rbm_storage.w], - rbm_storage.hidden_bias)) - visible_recon_p = tf.sigmoid(tf.nn.fully_connect( - [sample_bernoulli(hidden_p)], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)) - hidden_recon_p = tf.sigmoid(tf.nn.fully_connect( - [visible_recon_p], [rbm_storage.w], - rbm_storage.hidden_bias)) - - # X^T @ sigmoid(X @ W + hB) - sigmoid(sample_bernoulli(sigmoid(X @ W + hB)) @ W^T + vB)^T @ sigmoid(sigmoid(sample_bernoulli(hidden) @ W^T + vB) @ W + hB) - grad = tf.sub( - tf.matmul( - tf.transpose(rbm_in.x), - hidden_p), - tf.matmul( - tf.transpose(visible_recon_p), - hidden_recon_p)) - # grad is derivative of ? with respect to rbm_in.w - - def f(x_old, x_new): - return tf.add( - tf.mul( - ead.scalar_constant(config.momentum, x_old.shape()), - x_old), - tf.prod([ - ead.scalar_constant(config.learning_rate, x_new.shape()), - x_new, - ead.scalar_constant((1 - config.momentum) / x_new.shape()[0], x_new.shape()) - ])) - - # momentum - delta_w_new = f(rbm_storage.delta_w, grad) - delta_visible_bias_new = f(rbm_storage.delta_visible_bias, tf.reduce_mean_1d(tf.sub(rbm_in.x, visible_recon_p), 1)) - delta_hidden_bias_new = f(rbm_storage.delta_hidden_bias, tf.reduce_mean_1d(tf.sub(hidden_p, hidden_recon_p), 1)) - - update_delta_w = (rbm_storage.delta_w, delta_w_new) - update_delta_visible_bias = (rbm_storage.delta_visible_bias, delta_visible_bias_new) - update_delta_hidden_bias = (rbm_storage.delta_hidden_bias, delta_hidden_bias_new) - - update_w = (rbm_storage.w, tf.add(rbm_storage.w, delta_w_new)) - update_visible_bias = (rbm_storage.visible_bias, - tf.add(rbm_storage.visible_bias, delta_visible_bias_new)) - update_hidden_bias = (rbm_storage.hidden_bias, - tf.add(rbm_storage.hidden_bias, delta_hidden_bias_new)) - - compute_hidden = tf.sigmoid(tf.nn.fully_connect( - [rbm_in.x], [rbm_storage.w], - rbm_storage.hidden_bias)) - compute_visible = tf.sigmoid(tf.nn.fully_connect( - [compute_hidden], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)) - return RBMOutput( - update_deltas=[update_delta_w, update_delta_visible_bias, update_delta_hidden_bias], - update_weights=[update_w, update_visible_bias, update_hidden_bias], - compute_hidden=compute_hidden, - compute_visible=compute_visible, - compute_visible_from_hidden=tf.sigmoid(tf.nn.fully_connect( - [rbm_in.y], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)), - compute_err=config.err_function(rbm_in.x, compute_visible)) - -# def gr_init(rbm_in, rbm_storage, config, sample_visible=False, sigma=1): -# hidden_p = tf.nn.sigmoid(tf.matmul(rbm_in.x, rbm_storage.w) + rbm_storage.hidden_bias) -# visible_recon_p = tf.matmul(sample_bernoulli(hidden_p), tf.transpose(rbm_storage.w)) + rbm_storage.visible_bias - -# if sample_visible: -# visible_recon_p = sample_gaussian(visible_recon_p, sigma) - -# hidden_recon_p = tf.nn.sigmoid(tf.matmul(visible_recon_p, rbm_storage.w) + rbm_storage.hidden_bias) - -# positive_grad = tf.matmul(tf.transpose(rbm_in.x), hidden_p) -# negative_grad = tf.matmul(tf.transpose(visible_recon_p), hidden_recon_p) - -# def f(x_old, x_new): -# return config.momentum * x_old +\ -# config.learning_rate * x_new * (1 - config.momentum) / tf.to_float(tf.shape(x_new)[0]) - -# delta_w_new = f(rbm_storage.delta_w, positive_grad - negative_grad) -# delta_visible_bias_new = f(rbm_storage.delta_visible_bias, tf.reduce_mean(rbm_in.x - visible_recon_p, 0)) -# delta_hidden_bias_new = f(rbm_storage.delta_hidden_bias, tf.reduce_mean(hidden_p - hidden_recon_p, 0)) - -# update_delta_w = rbm_storage.delta_w.assign(delta_w_new) -# update_delta_visible_bias = rbm_storage.delta_visible_bias.assign(delta_visible_bias_new) -# update_delta_hidden_bias = rbm_storage.delta_hidden_bias.assign(delta_hidden_bias_new) - -# update_w = rbm_storage.w.assign(rbm_storage.w + delta_w_new) -# update_visible_bias = rbm_storage.visible_bias.assign(rbm_storage.visible_bias + delta_visible_bias_new) -# update_hidden_bias = rbm_storage.hidden_bias.assign(rbm_storage.hidden_bias + delta_hidden_bias_new) - -# compute_hidden = tf.nn.sigmoid(tf.matmul(rbm_in.x, rbm_storage.w) + rbm_storage.hidden_bias) -# compute_visible = tf.matmul(compute_hidden, tf.transpose(rbm_storage.w)) + rbm_storage.visible_bias -# return RBMOutput( -# update_deltas=[update_delta_w, update_delta_visible_bias, update_delta_hidden_bias], -# update_weights=[update_w, update_visible_bias, update_hidden_bias], -# compute_hidden=compute_hidden, -# compute_visible=compute_visible, -# compute_visible_from_hidden=tf.matmul(rbm_in.y, tf.transpose(rbm_storage.w)) + rbm_storage.visible_bias, -# compute_err=config.err_function(rbm_in.x, compute_visible)) - -class RBM: - def __init__(self, config, initialize): - self.config = config - self.initialize = initialize - self.storage = RBMStorage(config) - - def __call__(self, inputs): - return self.initialize(inputs, self.storage, self.config) - -class RBMTrainee: - def __init__(self, rbm, n_batch, sess): - self.rbm = rbm - self.n_batch = n_batch - self.input = RBMInput(config.n_visible, config.n_hidden, n_batch=n_batch) - self.output = rbm(self.input) - self.sess = sess - - assigns = self.output.update_weights + self.output.update_deltas - sess.track([ - self.output.compute_visible, - self.output.compute_hidden, - self.output.compute_err] + [src for _, src in assigns]) - - def fit(self, - data_x, - n_epoches=10, - shuffle=True, - verbose=True): - assert n_epoches > 0 - - n_data = data_x.shape[0] - - if self.n_batch > 0: - n_batches = n_data // self.n_batch + (0 if n_data % self.n_batch == 0 else 1) - else: - n_batches = 1 - - if shuffle: - data_x_cpy = data_x.copy() - inds = np.arange(n_data) - else: - data_x_cpy = data_x - - errs = [] - assigns = self.output.update_weights + self.output.update_deltas - - for e in range(n_epoches): - epoch_errs = np.zeros((n_batches,)) - epoch_errs_ptr = 0 - - if shuffle: - np.random.shuffle(inds) - data_x_cpy = data_x_cpy[inds] - - r_batches = range(n_batches) - - if verbose: - if self.rbm.config.tqdm is not None: - r_batches = self.rbm.config.tqdm(r_batches, - desc='Epoch: {:d}'.format(e), - ascii=True, - file=sys.stdout) - else: - print('Epoch: {:d}'.format(e)) - - for b in r_batches: - batch_x = data_x_cpy[b * self.n_batch:(b + 1) * self.n_batch] - - self.input.x.assign(batch_x) - - self.sess.update_target([src for _, src in assigns], [self.input.x]) - for dest, src in assigns: - dest.assign(src.get()) - self.sess.update_target([self.output.compute_err], [dest for dest, _ in assigns]) - batch_err = self.output.compute_err.get() - - epoch_errs[epoch_errs_ptr] = batch_err - epoch_errs_ptr += 1 - - if verbose: - err_mean = epoch_errs.mean() - if self.rbm.config.tqdm is not None: - self.rbm.config.tqdm.write('Train error: {:.4f}'.format(err_mean)) - self.rbm.config.tqdm.write('') - else: - print('Train error: {:.4f}'.format(err_mean)) - print('') - sys.stdout.flush() - - errs = np.hstack([errs, epoch_errs]) - - return errs - -# ==================== demo ======================= -from tqdm import tqdm -mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) -mnist_images = mnist.train.images - -IMAGE = 1 - -config = RBMConfig( - n_visible=784, - n_hidden=64, - learning_rate=0.01, - momentum=0.95, - tqdm=tqdm) - -rbm = RBM(config, bb_init) -sess = ead.Session() - -padewan = RBMTrainee(rbm=rbm, n_batch=10, sess=sess) - -master_inputs = RBMInput(config.n_visible, config.n_hidden, n_batch=1) -master = rbm(master_inputs) -image = mnist_images[IMAGE] -sess.track([master.compute_visible]) - -sess.optimize("cfg/optimizations.rules") - -errs = padewan.fit(mnist_images, n_epoches=30) -plt.plot(errs) -plt.show() - -def show_digit(x): - plt.imshow(x.reshape((28, 28)), cmap=plt.cm.gray) - plt.show() - -master_inputs.x.assign(image.reshape(1,-1)) -sess.update_target([master.compute_visible], [master_inputs.x]) -image_rec = master.compute_visible.get() - -show_digit(image) -show_digit(image_rec) diff --git a/rocnnet/demo/rbm_demo.py b/rocnnet/demo/rbm_demo.py index 31dec4005..edc497616 100644 --- a/rocnnet/demo/rbm_demo.py +++ b/rocnnet/demo/rbm_demo.py @@ -1,267 +1,191 @@ -from __future__ import print_function - import sys +import time +import random +import argparse +from tensorflow.examples.tutorials.mnist import input_data import matplotlib.pyplot as plt import numpy as np -from tensorflow.examples.tutorials.mnist import input_data -import ead.tenncor as tf +import ead.tenncor as tc import ead.ead as ead import rocnnet.rocnnet as rcn +prog_description = 'Demo rbm_trainer' -def mse_errfunc(x, compute_visible): - return tf.reduce_mean(tf.square(tf.sub(x, compute_visible))) - -class RBMConfig: - def __init__(self, - n_visible, - n_hidden, - learning_rate=0.01, - momentum=0.95, - xavier_const=1.0, - err_function=mse_errfunc, - tqdm=None): - if not 0.0 <= momentum <= 1.0: - raise ValueError('momentum should be in range [0, 1]') - - self.n_visible = n_visible - self.n_hidden = n_hidden - self.learning_rate=learning_rate - self.momentum=momentum - self.xavier_const=xavier_const - self.err_function=err_function - self.tqdm=tqdm - -class RBMInput: - def __init__(self, n_visible, n_hidden, n_batch): - self.x = ead.scalar_variable(0, [n_batch, n_visible]) - self.y = ead.scalar_variable(0, [n_batch, n_hidden]) - -class RBMStorage: - def __init__(self, config): - self.w = rcn.variable_from_init( - rcn.unif_xavier_init(config.xavier_const), - [config.n_visible, config.n_hidden]) - self.visible_bias = ead.scalar_variable(0, [config.n_visible]) - self.hidden_bias = ead.scalar_variable(0, [config.n_hidden]) - - self.delta_w = ead.scalar_variable(0, [config.n_visible, config.n_hidden]) - self.delta_visible_bias = ead.scalar_variable(0, [config.n_visible]) - self.delta_hidden_bias = ead.scalar_variable(0, [config.n_hidden]) - -class RBMOutput: - def __init__(self, update_weights, update_deltas, compute_hidden, compute_visible, compute_visible_from_hidden, compute_err): - self.update_weights = update_weights - self.update_deltas = update_deltas - self.compute_hidden = compute_hidden - self.compute_visible = compute_visible - self.compute_visible_from_hidden = compute_visible_from_hidden - self.compute_err = compute_err - assert self.update_weights is not None - assert self.update_deltas is not None - assert self.compute_hidden is not None - assert self.compute_visible is not None - assert self.compute_visible_from_hidden is not None - assert self.compute_err is not None - -def bb_init(rbm_in, rbm_storage, config): - # hidden = sigmoid(X @ W + hB) - # visible_rec = sigmoid(tf.random.rand_binom_one(hidden) @ W^T + vB) - # hidden_rec = sigmoid(visible_rec @ W + hB) - hidden_p = tf.sigmoid(tf.nn.fully_connect( - [rbm_in.x], [rbm_storage.w], - rbm_storage.hidden_bias)) - visible_recon_p = tf.sigmoid(tf.nn.fully_connect( - [tf.random.rand_binom_one(hidden_p)], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)) - hidden_recon_p = tf.sigmoid(tf.nn.fully_connect( - [visible_recon_p], [rbm_storage.w], - rbm_storage.hidden_bias)) - - # X^T @ sigmoid(X @ W + hB) - sigmoid(tf.random.rand_binom_one(sigmoid(X @ W + hB)) @ W^T + vB)^T @ sigmoid(sigmoid(tf.random.rand_binom_one(hidden) @ W^T + vB) @ W + hB) - grad = tf.sub( - tf.matmul( - tf.transpose(rbm_in.x), - hidden_p), - tf.matmul( - tf.transpose(visible_recon_p), - hidden_recon_p)) - # grad is derivative of ? with respect to rbm_in.w - - def f(x_old, x_new): - return tf.add( - tf.mul( - ead.scalar_constant(config.momentum, x_old.shape()), - x_old), - tf.prod([ - ead.scalar_constant(config.learning_rate, x_new.shape()), - x_new, - ead.scalar_constant((1 - config.momentum) / x_new.shape()[0], x_new.shape()) - ])) - - # momentum - delta_w_new = f(rbm_storage.delta_w, grad) - delta_visible_bias_new = f(rbm_storage.delta_visible_bias, tf.reduce_mean_1d(tf.sub(rbm_in.x, visible_recon_p), 1)) - delta_hidden_bias_new = f(rbm_storage.delta_hidden_bias, tf.reduce_mean_1d(tf.sub(hidden_p, hidden_recon_p), 1)) - - update_delta_w = (rbm_storage.delta_w, delta_w_new) - update_delta_visible_bias = (rbm_storage.delta_visible_bias, delta_visible_bias_new) - update_delta_hidden_bias = (rbm_storage.delta_hidden_bias, delta_hidden_bias_new) - - update_w = (rbm_storage.w, tf.add(rbm_storage.w, delta_w_new)) - update_visible_bias = (rbm_storage.visible_bias, - tf.add(rbm_storage.visible_bias, delta_visible_bias_new)) - update_hidden_bias = (rbm_storage.hidden_bias, - tf.add(rbm_storage.hidden_bias, delta_hidden_bias_new)) - - compute_hidden = tf.sigmoid(tf.nn.fully_connect( - [rbm_in.x], [rbm_storage.w], - rbm_storage.hidden_bias)) - compute_visible = tf.sigmoid(tf.nn.fully_connect( - [compute_hidden], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)) - return RBMOutput( - update_deltas=[update_delta_w, update_delta_visible_bias, update_delta_hidden_bias], - update_weights=[update_w, update_visible_bias, update_hidden_bias], - compute_hidden=compute_hidden, - compute_visible=compute_visible, - compute_visible_from_hidden=tf.sigmoid(tf.nn.fully_connect( - [rbm_in.y], [tf.transpose(rbm_storage.w)], - rbm_storage.visible_bias)), - compute_err=config.err_function(rbm_in.x, compute_visible)) - -class RBM: - def __init__(self, config, initialize): - self.config = config - self.initialize = initialize - self.storage = RBMStorage(config) - - def __call__(self, inputs): - return self.initialize(inputs, self.storage, self.config) - -class RBMTrainee: - def __init__(self, rbm, n_batch, sess): - self.rbm = rbm - self.n_batch = n_batch - self.input = RBMInput(config.n_visible, config.n_hidden, n_batch=n_batch) - self.output = rbm(self.input) - self.sess = sess - - assigns = self.output.update_weights + self.output.update_deltas - sess.track([ - self.output.compute_visible, - self.output.compute_hidden, - self.output.compute_err] + [src for _, src in assigns]) - - def fit(self, - data_x, - n_epoches=10, - shuffle=True, - verbose=True): - assert n_epoches > 0 - - n_data = data_x.shape[0] - - if self.n_batch > 0: - n_batches = n_data // self.n_batch + (0 if n_data % self.n_batch == 0 else 1) - else: - n_batches = 1 - - if shuffle: - data_x_cpy = data_x.copy() - inds = np.arange(n_data) - else: - data_x_cpy = data_x - - errs = [] - assigns = self.output.update_weights + self.output.update_deltas - - for e in range(n_epoches): - epoch_errs = np.zeros((n_batches,)) - epoch_errs_ptr = 0 - - if shuffle: - np.random.shuffle(inds) - data_x_cpy = data_x_cpy[inds] - - r_batches = range(n_batches) - - if verbose: - if self.rbm.config.tqdm is not None: - r_batches = self.rbm.config.tqdm(r_batches, - desc='Epoch: {:d}'.format(e), - ascii=True, - file=sys.stdout) - else: - print('Epoch: {:d}'.format(e)) - - for b in r_batches: - batch_x = data_x_cpy[b * self.n_batch:(b + 1) * self.n_batch] - - self.input.x.assign(batch_x) - - self.sess.update_target([src for _, src in assigns], [self.input.x]) - for dest, src in assigns: - dest.assign(src.get()) - self.sess.update_target([self.output.compute_err], [dest for dest, _ in assigns]) - batch_err = self.output.compute_err.get() - - epoch_errs[epoch_errs_ptr] = batch_err - epoch_errs_ptr += 1 - - if verbose: - err_mean = epoch_errs.mean() - if self.rbm.config.tqdm is not None: - self.rbm.config.tqdm.write('Train error: {:.4f}'.format(err_mean)) - self.rbm.config.tqdm.write('') - else: - print('Train error: {:.4f}'.format(err_mean)) - print('') - sys.stdout.flush() - - errs = np.hstack([errs, epoch_errs]) - - return errs - -# ==================== demo ======================= -from tqdm import tqdm mnist = input_data.read_data_sets('MNIST_data/', one_hot=True) -mnist_images = mnist.train.images - -IMAGE = 1 - -config = RBMConfig( - n_visible=784, - n_hidden=64, - learning_rate=0.01, - momentum=0.95, - tqdm=tqdm) -rbm = RBM(config, bb_init) -sess = ead.Session() +def mse_errfunc(x, visible_sample_): + return tc.reduce_mean(tc.square(tc.sub(x, visible_sample_))) -padewan = RBMTrainee(rbm=rbm, n_batch=10, sess=sess) - -master_inputs = RBMInput(config.n_visible, config.n_hidden, n_batch=1) -master = rbm(master_inputs) -image = mnist_images[IMAGE] -sess.track([master.compute_visible]) - -sess.optimize("cfg/optimizations.rules") - -errs = padewan.fit(mnist_images, n_epoches=30) -plt.plot(errs) -plt.show() - -def show_digit(x): +def show_digit(x, plt): plt.imshow(x.reshape((28, 28)), cmap=plt.cm.gray) plt.show() -master_inputs.x.assign(image.reshape(1,-1)) -sess.update_target([master.compute_visible], [master_inputs.x]) -image_rec = master.compute_visible.get() +def str2bool(opt): + optstr = opt.lower() + if optstr in ('yes', 'true', 't', 'y', '1'): + return True + elif optstr in ('no', 'false', 'f', 'n', '0'): + return False + else: + raise argparse.ArgumentTypeError('Boolean value expected.') + +def main(args): + + default_ts = time.time() + + parser = argparse.ArgumentParser(description=prog_description) + parser.add_argument('--seed', dest='seed', + type=str2bool, nargs='?', const=False, default=True, + help='Whether to seed or not (default: True)') + parser.add_argument('--seedval', dest='seedval', type=int, nargs='?', default=int(default_ts), + help='Random seed value (default: )') + parser.add_argument('--init_const', dest='xavier_const', type=float, nargs='?', default=1.0, + help='Xavier constant for initializing weight (default: 1.0)') + parser.add_argument('--use_tqdm', dest='use_tqdm', + type=str2bool, nargs='?', const=False, default=True, + help='Whether to use tqdm (default: 100)') + parser.add_argument('--save', dest='save', nargs='?', default='', + help='Filename to save model (default: )') + parser.add_argument('--load', dest='load', nargs='?', default='models/rbmmodel.pbx', + help='Filename to load pretrained model (default: models/rbmmodel.pbx)') + args = parser.parse_args(args) + + if args.seed: + print('seeding {}'.format(args.seedval)) + ead.seed(args.seedval) + np.random.seed(args.seedval) + + if args.use_tqdm: + from tqdm import tqdm + tq = tqdm + else: + tq = None + + mnist_images = mnist.train.images + + n_visible = 784 + n_hidden = 64 + learning_rate = 0.01 + momentum = 0.95 + + model = rcn.RBM(n_hidden, n_visible, + weight_init=rcn.unif_xavier_init(args.xavier_const), + bias_init=rcn.zero_init(), + label="demo") + + untrained = model.clone() + try: + print('loading ' + args.load) + trained = rcn.load_file_rbmmodel(args.load, "demo") + print('successfully loaded from ' + args.load) + except Exception as e: + print(e) + print('failed to load from "{}"'.format(args.load)) + trained = model.clone() + + sess = ead.Session() + batch_size = 10 + + trainer = rcn.BernoulliRBMTrainer( + model=model, + sess=sess, + batch_size=batch_size, + learning_rate=learning_rate, + discount_factor=momentum, + err_func=mse_errfunc) + + x = ead.scalar_variable(0, [1, n_visible]) + genx = model.backward_connect( + tc.random.rand_binom_one(model.connect(x))) + + untrained_genx = untrained.backward_connect( + tc.random.rand_binom_one(untrained.connect(x))) + + trained_genx = trained.backward_connect( + tc.random.rand_binom_one(trained.connect(x))) + + image = random.choice(mnist_images) + sess.track([genx, trained_genx, untrained_genx]) + + sess.optimize("cfg/optimizations.rules") + + n_epoches = 30 + shuffle = True + verbose = True + n_data = mnist_images.shape[0] + + if batch_size > 0: + n_batches = n_data // batch_size + (0 if n_data % batch_size == 0 else 1) + else: + n_batches = 1 + + if shuffle: + data_x_cpy = mnist_images.copy() + inds = np.arange(n_data) + else: + data_x_cpy = mnist_images + + errs = [] + for e in range(n_epoches): + epoch_errs = np.zeros((n_batches,)) + epoch_errs_ptr = 0 + + if shuffle: + np.random.shuffle(inds) + data_x_cpy = data_x_cpy[inds] + + r_batches = range(n_batches) + + if verbose: + if tq is not None: + r_batches = tq(r_batches, + desc='Epoch: {:d}'.format(e), + ascii=True, + file=sys.stdout) + else: + print('Epoch: {:d}'.format(e)) + + for b in r_batches: + batch_x = data_x_cpy[b * batch_size:(b + 1) * batch_size] + + epoch_errs[epoch_errs_ptr] = trainer.train(batch_x) + epoch_errs_ptr += 1 + + if verbose: + err_mean = epoch_errs.mean() + if tq is not None: + tq.write('Train error: {:.4f}'.format(err_mean)) + tq.write('') + else: + print('Train error: {:.4f}'.format(err_mean)) + print('') + sys.stdout.flush() + + errs = np.hstack([errs, epoch_errs]) + + plt.plot(errs) + plt.show() -show_digit(image) -show_digit(image_rec) + x.assign(image.reshape(1,-1)) + sess.update_target([genx, trained_genx, untrained_genx], [x]) + image_rec = genx.get() + image_rec_trained = trained_genx.get() + image_rec_untrained = untrained_genx.get() + + show_digit(image, plt) + show_digit(image_rec, plt) + show_digit(image_rec_trained, plt) + show_digit(image_rec_untrained, plt) + + try: + print('saving') + if model.save_file(args.save): + print('successfully saved to {}'.format(args.save)) + except Exception as e: + print(e) + print('failed to write to "{}"'.format(args.save)) + +if '__main__' == __name__: + main(sys.argv[1:]) diff --git a/rocnnet/demo/tf_gd_demo.py b/rocnnet/demo/tf_gd_demo.py deleted file mode 100644 index 9d254552a..000000000 --- a/rocnnet/demo/tf_gd_demo.py +++ /dev/null @@ -1,229 +0,0 @@ -import sys -import time -import argparse -import math - -import numpy as np - -import tensorflow as tf - -prog_description = 'Demo mlp_trainer using sgd' - -def batch_generate(n, batchsize): - total = n * batchsize - return np.random.rand(total) - -def avgevry2(indata): - return (indata[0::2] + indata[1::2]) / 2 - -def str2bool(opt): - optstr = opt.lower() - if optstr in ('yes', 'true', 't', 'y', '1'): - return True - elif optstr in ('no', 'false', 'f', 'n', '0'): - return False - else: - raise argparse.ArgumentTypeError('Boolean value expected.') - -def base_name(var): - """Extracts value passed to name= when creating a variable""" - return var.name.split('/')[-1].split(':')[0] - -class Layer(object): - def __init__(self, input_sizes, output_size, scope): - """Cretes a neural network layer.""" - if type(input_sizes) != list: - input_sizes = [input_sizes] - - self.input_sizes = input_sizes - self.output_size = output_size - self.scope = scope or "Layer" - - with tf.variable_scope(self.scope): - self.Ws = [] - for input_idx, input_size in enumerate(input_sizes): - W_name = "W_%d" % (input_idx,) - W_initializer = tf.random_uniform_initializer( - -1.0 / math.sqrt(input_size), 1.0 / math.sqrt(input_size)) - W_var = tf.get_variable(W_name, (input_size, output_size), initializer=W_initializer) - self.Ws.append(W_var) - self.b = tf.get_variable("b", (output_size,), initializer=tf.constant_initializer(0)) - - def __call__(self, xs): - if type(xs) != list: - xs = [xs] - assert len(xs) == len(self.Ws), \ - "Expected %d input vectors, got %d" % (len(self.Ws), len(xs)) - with tf.variable_scope(self.scope): - return sum([tf.matmul(x, W) for x, W in zip(xs, self.Ws)]) + self.b - - def variables(self): - return [self.b] + self.Ws - - def copy(self, scope=None): - scope = scope or self.scope + "_copy" - - with tf.variable_scope(scope) as sc: - for v in self.variables(): - tf.get_variable(base_name(v), v.get_shape(), - initializer=lambda x,dtype=tf.float32,partition_info=None: v.initialized_value()) - sc.reuse_variables() - return Layer(self.input_sizes, self.output_size, scope=sc) - -class MLP(object): - def __init__(self, input_sizes, hiddens, nonlinearities, scope=None, given_layers=None): - self.input_sizes = input_sizes - self.hiddens = hiddens - self.input_nonlinearity, self.layer_nonlinearities = nonlinearities[0], nonlinearities[1:] - self.scope = scope or "MLP" - - assert len(hiddens) == len(nonlinearities), \ - "Number of hiddens must be equal to number of nonlinearities" - - with tf.variable_scope(self.scope): - if given_layers is not None: - self.input_layer = given_layers[0] - self.layers = given_layers[1:] - else: - self.input_layer = Layer(input_sizes, hiddens[0], scope="input_layer") - self.layers = [] - - for l_idx, (h_from, h_to) in enumerate(zip(hiddens[:-1], hiddens[1:])): - self.layers.append(Layer(h_from, h_to, scope="hidden_layer_%d" % (l_idx,))) - - def __call__(self, xs): - if type(xs) != list: - xs = [xs] - with tf.variable_scope(self.scope): - hidden = self.input_nonlinearity(self.input_layer(xs)) - for layer, nonlinearity in zip(self.layers, self.layer_nonlinearities): - hidden = nonlinearity(layer(hidden)) - return hidden - - def variables(self): - res = self.input_layer.variables() - for layer in self.layers: - res.extend(layer.variables()) - return res - - def copy(self, scope=None): - scope = scope or self.scope + "_copy" - nonlinearities = [self.input_nonlinearity] + self.layer_nonlinearities - given_layers = [self.input_layer.copy()] + [layer.copy() for layer in self.layers] - return MLP(self.input_sizes, self.hiddens, nonlinearities, scope=scope, - given_layers=given_layers) - -def main(args): - - default_ts = time.time() - - parser = argparse.ArgumentParser(description=prog_description) - parser.add_argument('--seed', dest='seed', - type=str2bool, nargs='?', const=False, default=True, - help='Whether to seed or not (default: True)') - parser.add_argument('--seedval', dest='seedval', type=int, nargs='?', default=int(default_ts), - help='Random seed value (default: )') - parser.add_argument('--n_batch', dest='n_batch', type=int, nargs='?', default=3, - help='Batch size when training (default: 3)') - parser.add_argument('--n_train', dest='n_train', type=int, nargs='?', default=3000, - help='Number of times to train (default: 3000)') - parser.add_argument('--n_test', dest='n_test', type=int, nargs='?', default=500, - help='Number of times to test (default: 500)') - args = parser.parse_args(args) - - if args.seed: - print('seeding {}'.format(args.seedval)) - np.random.seed(args.seedval) - - learning_rate = 0.9 - - n_in = 10 - n_out = n_in / 2 - - brain = MLP([n_in], [9, n_out], [tf.sigmoid, tf.sigmoid]) - - sess = tf.Session() - n_batch = args.n_batch - show_every_n = 500 - - trained_in = tf.placeholder(tf.float32, [None, n_in], name='trained_in') - trained_out = brain(trained_in) - expected_out = tf.placeholder(tf.float32, [n_batch, n_out], name='expected_out') - - error = tf.square(expected_out - trained_out) - - layer0 = brain.input_layer - layer1 = brain.layers[0] - - w0 = layer0.Ws[0] - b0 = layer0.b - w1 = layer1.Ws[0] - b1 = layer1.b - - dw0, db0, dw1, db1 = tf.gradients(error, [w0, b0, w1, b1]) - - w0_update = w0.assign_sub(learning_rate * dw0) - b0_update = b0.assign_sub(learning_rate * db0) - w1_update = w1.assign_sub(learning_rate * dw1) - b1_update = b1.assign_sub(learning_rate * db1) - - def calculate_update(batch, batch_out): - out, _, _, _, _ = sess.run([ - error, - w0_update, - b0_update, - w1_update, - b1_update, - ], { - trained_in: batch, - expected_out: batch_out, - }) - - return out - - # optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) - # gradients = optimizer.compute_gradients(error) - # train_op = optimizer.apply_gradients(gradients) - - sess.run(tf.global_variables_initializer()) - start = time.time() - for i in range(args.n_train): - batch = batch_generate(n_in, n_batch) - batch_out = avgevry2(batch) - batch = batch.reshape([n_batch, n_in]) - batch_out = batch_out.reshape([n_batch, n_out]) - # trained_derr, _ = sess.run([ - # error, - # train_op, - # ], { - # trained_in: batch, - # expected_out: batch_out - # }) - trained_derr = calculate_update(batch, batch_out) - if i % show_every_n == show_every_n - 1: - print('training {}\ntraining error:\n{}' - .format(i + 1, trained_derr)) - - print('training time: {} seconds'.format(time.time() - start)) - - trained_err = 0 - for i in range(args.n_test): - if i % show_every_n == show_every_n - 1: - print('testing {}'.format(i + 1)) - - test_batch = batch_generate(n_in, 1) - test_batch_out = avgevry2(test_batch) - test_batch = test_batch.reshape([1, n_in]) - test_batch_out = test_batch_out.reshape([1, n_out]) - - trained_data = sess.run(trained_out, { - trained_in: test_batch - }) - - trained_err += np.mean(abs(trained_data - test_batch_out)) - - trained_err /= args.n_test - print('trained mlp error rate: {}%'.format(trained_err * 100)) - -if '__main__' == __name__: - main(sys.argv[1:]) diff --git a/rocnnet/eqns/err_approx.hpp b/rocnnet/eqns/err_approx.hpp index 1bd25ec13..1166d7f68 100644 --- a/rocnnet/eqns/err_approx.hpp +++ b/rocnnet/eqns/err_approx.hpp @@ -12,7 +12,7 @@ namespace eqns { -using VariablesT = std::vector>; +using VarErrsT = std::vector,ead::NodeptrT>>; struct VarAssign { @@ -28,26 +28,32 @@ using AssignsT = std::list; using AssignGroupsT = std::list; // approximate error of sources given error of root -using ApproxF = std::function&,VariablesT)>; +using ApproxF = std::function; -using UpdateStepF = std::function&)>; +using UpdateStepF = std::function; using NodeUnarF = std::function(ead::NodeptrT)>; ead::NodeptrT identity (ead::NodeptrT node); // Stochastic Gradient Descent Approximation -AssignGroupsT sgd (ead::NodeptrT& root, VariablesT leaves, - PybindT learning_rate = 0.5, - NodeUnarF gradprocess = identity, - std::string root_label = ""); +// for each (x, err) in leaves +// x_next ~ x_curr - η * err, +// +// where η is the learning rate +AssignGroupsT sgd (const VarErrsT& leaves, + PybindT learning_rate = 0.5, std::string root_label = ""); // Momentum-based Root Mean Square Approximation -AssignGroupsT rms_momentum (ead::NodeptrT& root, VariablesT leaves, - PybindT learning_rate = 0.5, - PybindT discount_factor = 0.99, +// for each (x, err) in leaves +// momentum_next ~ χ * momentum_cur + (1 - χ) * err ^ 2 +// x_next ~ x_curr - (η * err) / (sqrt(ε + momentum_next)) +// +// where η is the learning rate, ε is epsilon, +// and χ is discount_factor +AssignGroupsT rms_momentum (const VarErrsT& leaves, + PybindT learning_rate = 0.5, PybindT discount_factor = 0.99, PybindT epsilon = std::numeric_limits::epsilon(), - NodeUnarF gradprocess = identity, std::string root_label = ""); void assign_groups (AssignGroupsT& groups, UpdateStepF update_step); diff --git a/rocnnet/eqns/init.hpp b/rocnnet/eqns/init.hpp index bbdd6fd08..bd759dc28 100644 --- a/rocnnet/eqns/init.hpp +++ b/rocnnet/eqns/init.hpp @@ -58,6 +58,16 @@ void truncated_normal (std::vector& out, ade::Shape shape, T mean, T stdev) } } +template +InitF zero_init (void) +{ + return + [](ade::Shape shape, std::string label) + { + return ead::make_variable_scalar(0, shape, label); + }; +} + template InitF variance_scaling_init (T factor, ShapeFactorF sfactor=fanavg) { diff --git a/rocnnet/eqns/src/err_approx.cpp b/rocnnet/eqns/src/err_approx.cpp index df3965853..f374942f7 100755 --- a/rocnnet/eqns/src/err_approx.cpp +++ b/rocnnet/eqns/src/err_approx.cpp @@ -1,7 +1,5 @@ #include "ead/generated/api.hpp" -#include "ead/grader.hpp" - #include "rocnnet/eqns/err_approx.hpp" #ifdef EQNS_ERR_APPROX_HPP @@ -14,71 +12,64 @@ ead::NodeptrT identity (ead::NodeptrT node) return node; } -AssignGroupsT sgd (ead::NodeptrT& root, VariablesT leaves, - PybindT learning_rate, NodeUnarF gradprocess, std::string root_label) +AssignGroupsT sgd (const VarErrsT& leaves, + PybindT learning_rate, std::string root_label) { AssignsT assignments; for (size_t i = 0, nleaves = leaves.size(); i < nleaves; ++i) { - auto leaf_node = ead::convert_to_node(leaves[i]); - auto grad = ead::derive(root, leaf_node); - // given root = f, err(x) ~ x - η * df(x), where η is the learning rate - ade::Shape gshape = grad->shape(); + auto leaf_node = ead::convert_to_node(leaves[i].first); + auto err = leaves[i].second; + ade::Shape eshape = err->shape(); auto next = tenncor::sub(leaf_node, - tenncor::mul(gradprocess(grad), - ead::make_constant_scalar(learning_rate, gshape))); + tenncor::mul(err, + ead::make_constant_scalar(learning_rate, eshape))); assignments.push_back(VarAssign{ fmts::sprintf("sgd::%s_grad_%s", - root_label.c_str(), leaves[i]->get_label().c_str()), - leaves[i], next}); + root_label.c_str(), leaves[i].first->get_label().c_str()), + leaves[i].first, next}); } return {assignments}; } -AssignGroupsT rms_momentum (ead::NodeptrT& root, VariablesT leaves, - PybindT learning_rate, PybindT discount_factor, PybindT epsilon, - NodeUnarF gradprocess, std::string root_label) +AssignGroupsT rms_momentum (const VarErrsT& leaves, PybindT learning_rate, + PybindT discount_factor, PybindT epsilon, std::string root_label) { // assign momentums before leaves AssignsT momentum_assigns; AssignsT leaf_assigns; for (size_t i = 0, nleaves = leaves.size(); i < nleaves; ++i) { - auto leaf_node = ead::convert_to_node(leaves[i]); - auto grad = ead::derive(root, leaf_node); - // next_x ~ x - (η * df(x)) / (sqrt(ε + momentum_next)) - // momentum_next ~ χ * momentum_prev + (1 - χ) * df(x) ^ 2 - // - // where root = f, η is the learning rate, ε is epsilon, - // and χ is discount_factor - ade::Shape gshape = grad->shape(); + auto leaf_node = ead::convert_to_node(leaves[i].first); + auto err = leaves[i].second; + ade::Shape eshape = err->shape(); ead::VarptrT momentum = - ead::make_variable_scalar(1, gshape, "momentum"); + ead::make_variable_scalar(1, eshape, "momentum"); auto momentum_node = ead::convert_to_node(momentum); ead::NodeptrT discount_node = - ead::make_constant_scalar(discount_factor, gshape); + ead::make_constant_scalar(discount_factor, eshape); ead::NodeptrT datcount_node = - ead::make_constant_scalar(1.0 - discount_factor, gshape); + ead::make_constant_scalar(1.0 - discount_factor, eshape); auto momentum_next = tenncor::add( tenncor::mul(discount_node, momentum_node), - tenncor::mul(datcount_node, tenncor::square(grad)) + tenncor::mul(datcount_node, tenncor::square(err)) ); auto leaf_next = tenncor::sub(leaf_node, tenncor::div( - tenncor::mul(gradprocess(grad), - ead::make_constant_scalar(learning_rate, gshape)), + tenncor::mul(err, + ead::make_constant_scalar(learning_rate, eshape)), tenncor::add(tenncor::sqrt(momentum_node), - ead::make_constant_scalar(epsilon, gshape)) + ead::make_constant_scalar(epsilon, eshape)) )); momentum_assigns.push_back(VarAssign{ fmts::sprintf("rms_momentum::%s_momentum_%s", - root_label.c_str(), leaves[i]->get_label().c_str()), + root_label.c_str(), leaves[i].first->get_label().c_str()), momentum, momentum_next}); leaf_assigns.push_back(VarAssign{ fmts::sprintf("rms_momentum::%s_grad_%s", - root_label.c_str(), leaves[i]->get_label().c_str()), - leaves[i], leaf_next}); + root_label.c_str(), leaves[i].first->get_label().c_str()), + leaves[i].first, leaf_next}); } return {momentum_assigns, leaf_assigns}; } @@ -87,7 +78,7 @@ void assign_groups (AssignGroupsT& groups, UpdateStepF update_step) { for (AssignsT& group : groups) { - std::unordered_set updated_var; + ead::TensSetT updated_var; for (eqns::VarAssign& assign : group) { updated_var.emplace(assign.target_->get_tensor().get()); diff --git a/rocnnet/modl/BUILD.bazel b/rocnnet/modl/BUILD.bazel index 1df71d5ff..abc815a37 100644 --- a/rocnnet/modl/BUILD.bazel +++ b/rocnnet/modl/BUILD.bazel @@ -19,5 +19,5 @@ cc_library( hdrs = glob(["*.hpp"]), srcs = glob(["src/*.cpp"]), copts = ["-std=c++17"], - deps = ["//ead:ead"], + deps = ["//ead:ead","//rocnnet/eqns:eqns"], ) diff --git a/rocnnet/modl/activations.hpp b/rocnnet/modl/activations.hpp new file mode 100644 index 000000000..66bd242fe --- /dev/null +++ b/rocnnet/modl/activations.hpp @@ -0,0 +1,147 @@ +#include "ead/generated/api.hpp" + +#include "rocnnet/modl/layer.hpp" + +#ifndef MODL_ACTIVATIONS_HPP +#define MODL_ACTIVATIONS_HPP + +namespace modl +{ + +struct ActivationBuilder final : public iLayerBuilder +{ + ActivationBuilder (std::string act_type, std::string label) : + act_type_(act_type), label_(label) {} + + void set_tensor (ade::TensptrT tens, std::string target) override {} + + void set_sublayer (LayerptrT layer) override {} // activation has no sublayer + + LayerptrT build (void) const override; + +private: + std::string act_type_; + + std::string label_; +}; + +const std::string sigmoid_layer_key = +get_layer_reg().register_tagr(layers_key_prefix + "sigmoid", +[](ade::TensrefT ref, std::string label) +{ + get_layer_reg().layer_tag(ref, sigmoid_layer_key, label); +}, +[](std::string label) -> LBuilderptrT +{ + return std::make_shared(sigmoid_layer_key, label); +}); + +const std::string tanh_layer_key = +get_layer_reg().register_tagr(layers_key_prefix + "tanh", +[](ade::TensrefT ref, std::string label) +{ + get_layer_reg().layer_tag(ref, tanh_layer_key, label); +}, +[](std::string label) -> LBuilderptrT +{ + return std::make_shared(tanh_layer_key, label); +}); + +const std::unordered_map activations = +{ + {sigmoid_layer_key, tenncor::sigmoid}, + {tanh_layer_key, tenncor::tanh}, +}; + +struct Activation final : public iLayer +{ + Activation (const std::string& label, const std::string& act_type) : + label_(label), + act_type_(act_type), + activation_(estd::must_getf(activations, act_type, + "failed to find activation `%s`", act_type.c_str())), + placeholder_(ead::make_constant_scalar(0, {})) + { + tag(placeholder_->get_tensor(), LayerId()); + } + + Activation (const Activation& other, + std::string label_prefix = "") : + label_(label_prefix + other.get_label()), + act_type_(other.act_type_), + activation_(other.activation_), + placeholder_(ead::make_constant_scalar(0, {})) + { + tag(placeholder_->get_tensor(), LayerId()); + } + + Activation& operator = (const Activation& other) = default; + + Activation (Activation&& other) = default; + + Activation& operator = (Activation&& other) = default; + + + Activation* clone (std::string label_prefix = "") const + { + return static_cast(this->clone_impl(label_prefix)); + } + + size_t get_ninput (void) const override + { + return 0; + } + + size_t get_noutput (void) const override + { + return 0; + } + + std::string get_ltype (void) const override + { + return act_type_; + } + + std::string get_label (void) const override + { + return label_; + } + + ead::NodeptrT connect (ead::NodeptrT input) const override + { + auto out = activation_(input); + recursive_tag(out->get_tensor(), { + input->get_tensor().get(), + }, LayerId()); + return out; + } + + ade::TensT get_contents (void) const override + { + return {placeholder_->get_tensor()}; + } + +private: + iLayer* clone_impl (std::string label_prefix) const override + { + return new Activation(*this, label_prefix); + } + + std::string label_; + + std::string act_type_; + + NonLinearF activation_; + + ead::NodeptrT placeholder_; +}; + +using ActivationptrT = std::shared_ptr; + +LayerptrT sigmoid (std::string label = "sigmoid"); + +LayerptrT tanh (std::string label = "tanh"); + +} + +#endif // MODL_ACTIVATIONS_HPP diff --git a/rocnnet/modl/dense.hpp b/rocnnet/modl/dense.hpp new file mode 100644 index 000000000..0aa018c24 --- /dev/null +++ b/rocnnet/modl/dense.hpp @@ -0,0 +1,192 @@ +#include "ead/generated/api.hpp" + +#include "rocnnet/eqns/init.hpp" + +#include "rocnnet/modl/layer.hpp" + +#ifndef MODL_DENSE_HPP +#define MODL_DENSE_HPP + +namespace modl +{ + +const std::string weight_key = "weight"; + +const std::string bias_key = "bias"; + +struct DenseBuilder final : public iLayerBuilder +{ + DenseBuilder (std::string label) : label_(label) {} + + void set_tensor (ade::TensptrT tens, std::string target) override + { + if (target == weight_key) + { + weight_ = ead::NodeConverters::to_node(tens); + return; + } + else if (target == bias_key) + { + bias_ = ead::NodeConverters::to_node(tens); + return; + } + logs::warnf("attempt to create dense layer " + "with unknown tensor `%s` with label `%s`", + tens->to_string().c_str(), target.c_str()); + } + + void set_sublayer (LayerptrT layer) override {} // dense has no sublayer + + LayerptrT build (void) const override; + +private: + ead::NodeptrT weight_ = nullptr; + + ead::NodeptrT bias_ = nullptr; + + std::string label_; +}; + +const std::string dense_layer_key = +get_layer_reg().register_tagr(layers_key_prefix + "dense", +[](ade::TensrefT ref, std::string label) +{ + get_layer_reg().layer_tag(ref, dense_layer_key, label); +}, +[](std::string label) -> LBuilderptrT +{ + return std::make_shared(label); +}); + +struct Dense final : public iLayer +{ + Dense (ade::DimT nunits, ade::DimT indim, + eqns::InitF weight_init, + eqns::InitF bias_init, + const std::string& label) : + label_(label), + weight_(weight_init(ade::Shape({nunits, indim}), weight_key)) + { + tag(weight_->get_tensor(), LayerId(weight_key)); + if (bias_init) + { + bias_ = bias_init(ade::Shape({nunits}), bias_key); + tag(bias_->get_tensor(), LayerId(bias_key)); + } + } + + Dense (ead::NodeptrT weight, + ead::NodeptrT bias, + std::string label) : + label_(label), + weight_(weight), + bias_(bias) + { + tag(weight_->get_tensor(), LayerId(weight_key)); + if (bias) + { + tag(bias_->get_tensor(), LayerId(bias_key)); + } + } + + Dense (const Dense& other, + std::string label_prefix = "") + { + copy_helper(other, label_prefix); + } + + Dense& operator = (const Dense& other) + { + if (this != &other) + { + copy_helper(other); + } + return *this; + } + + Dense (Dense&& other) = default; + + Dense& operator = (Dense&& other) = default; + + Dense* clone (std::string label_prefix = "") const + { + return static_cast(this->clone_impl(label_prefix)); + } + + size_t get_ninput (void) const override + { + return weight_->shape().at(1); + } + + size_t get_noutput (void) const override + { + return weight_->shape().at(0); + } + + std::string get_ltype (void) const override + { + return dense_layer_key; + } + + std::string get_label (void) const override + { + return label_; + } + + ead::NodeptrT connect (ead::NodeptrT input) const override + { + auto out = tenncor::nn::fully_connect({input}, {weight_}, bias_); + recursive_tag(out->get_tensor(), { + input->get_tensor().get(), + weight_->get_tensor().get(), + bias_->get_tensor().get(), + }, LayerId()); + return out; + } + + ade::TensT get_contents (void) const override + { + return { + weight_->get_tensor(), + nullptr == bias_ ? nullptr : bias_->get_tensor(), + }; + } + +private: + iLayer* clone_impl (std::string label_prefix) const override + { + return new Dense(*this, label_prefix); + } + + void copy_helper (const Dense& other, std::string label_prefix = "") + { + label_ = label_prefix + other.label_; + weight_ = std::make_shared>( + std::shared_ptr>( + ead::Variable::get( + *static_cast*>( + other.weight_->get_tensor().get())))); + tag(weight_->get_tensor(), LayerId(weight_key)); + if (other.bias_) + { + bias_ = std::make_shared>( + std::shared_ptr>( + ead::Variable::get( + *static_cast*>( + other.bias_->get_tensor().get())))); + tag(bias_->get_tensor(), LayerId(bias_key)); + } + } + + std::string label_; + + ead::NodeptrT weight_; + + ead::NodeptrT bias_; +}; + +using DenseptrT = std::shared_ptr; + +} + +#endif // MODL_DENSE_HPP diff --git a/rocnnet/modl/layer.hpp b/rocnnet/modl/layer.hpp new file mode 100644 index 000000000..0c80f7c93 --- /dev/null +++ b/rocnnet/modl/layer.hpp @@ -0,0 +1,196 @@ +#include "estd/estd.hpp" + +#include "tag/tag.hpp" + +#include "ead/constant.hpp" +#include "ead/variable.hpp" + +#include "ead/generated/pyapi.hpp" + +#ifndef MODL_LAYER_HPP +#define MODL_LAYER_HPP + +namespace modl +{ + +using NonLinearF = std::function(ead::NodeptrT)>; + +const std::string layers_key_prefix = "layer_"; + +const char llabel_sep = ':'; + +void validate_label (const std::string& label); + +struct LayerId final +{ + LayerId (void) = default; + + LayerId (std::string label) : label_(label) {} + + LayerId (std::string type, std::string label, size_t index) : + type_(type), label_(label), index_(index) {} + + std::string to_string (std::string label) const + { + return fmts::sprintf("%s%c%s%c%s%c%d", + label.c_str(), llabel_sep, + type_.c_str(), llabel_sep, + label_.c_str(), llabel_sep, + index_); + } + + std::string type_; + + std::string label_; + + size_t index_ = 0; +}; + +using LayerIdsT = std::vector; + +std::string layer_label_fmt (std::string label, LayerId subid); + +std::unordered_map unpack_labels ( + const std::vector& labels); + +struct LayerTag final : public tag::iTag +{ + LayerTag (std::string layer_type, std::string name) : + reps_({{layer_type, {name}}}) {} + + size_t tag_id (void) const override + { + return tag_id_; + } + + void absorb (tag::TagptrT&& other) override + { + LayersT& oreps = + static_cast(other.get())->reps_; + for (auto& reppair : oreps) + { + auto& names = reps_[reppair.first]; + names.insert(reppair.second.begin(), reppair.second.end()); + } + } + + tag::TagRepsT get_tags (void) const override + { + tag::TagRepsT out; + for (auto& layer : reps_) + { + out.emplace(layer.first, std::vector( + layer.second.begin(), layer.second.end())); + } + return out; + } + +private: + using LayersT = std::map>; + + LayersT reps_; + + static size_t tag_id_; +}; + +struct iLayer +{ + virtual ~iLayer (void) = default; + + iLayer* clone (std::string label_prefix = "") const + { + return this->clone_impl(label_prefix); + } + + virtual size_t get_ninput (void) const = 0; + + virtual size_t get_noutput (void) const = 0; + + virtual std::string get_ltype (void) const = 0; + + virtual std::string get_label (void) const = 0; + + virtual ead::NodeptrT connect ( + ead::NodeptrT input) const = 0; + + virtual ade::TensT get_contents (void) const = 0; + +protected: + virtual iLayer* clone_impl (std::string label_prefix) const = 0; + + void tag (ade::TensptrT tensor, LayerId subs) const; + + void recursive_tag (ade::TensptrT root, + std::unordered_set ignores, LayerId subs) const; +}; + +using LayerptrT = std::shared_ptr; + +struct iLayerBuilder +{ + virtual ~iLayerBuilder (void) = default; + + virtual void set_tensor (ade::TensptrT tens, std::string target) = 0; + + virtual void set_sublayer (LayerptrT layer) = 0; + + virtual LayerptrT build (void) const = 0; +}; + +using LBuilderptrT = std::shared_ptr; + +using LayerBuildF = std::function; + +struct LayerRegistry final +{ + LayerRegistry (tag::TagRegistry& registry = tag::get_reg()) : tag_reg_(registry) {} + + void layer_tag (ade::TensrefT tens, std::string layer_type, std::string name) + { + tag_reg_.add_tag(tens, tag::TagptrT(new LayerTag(layer_type, name))); + } + + std::string register_tagr (std::string key, tag::TagrF tagr, LayerBuildF builder) + { + lbuilders_.emplace(key, builder); + + return tag_reg_.register_tagr(key, + [this, key](ade::TensrefT ref, std::string label) + { + this->layer_tag(ref, key, label); + }); + } + + LayerBuildF get_builder (std::string layer_type) + { + return estd::must_getf(lbuilders_, layer_type, + "failed to find registered layer `%s`", layer_type.c_str()); + } + + tag::TagRegistry& get_tag_registry (void) + { + return tag_reg_; + } + +private: + std::unordered_map lbuilders_; + + tag::TagRegistry& tag_reg_; +}; + +LayerRegistry& get_layer_reg (void); + +void recursive_layer_tag (ade::TensptrT tens, std::string layer_type, + std::string name, std::unordered_set stops, + LayerRegistry& registry = get_layer_reg()); + +LayerptrT load_layer (std::istream& ins, ade::TensT& roots, + std::string ltype, std::string label, + LayerRegistry& registry = get_layer_reg()); + +bool save_layer (std::ostream& outs, const iLayer& layer, ade::TensT roots, + LayerRegistry& registry = get_layer_reg()); + +} + +#endif // MODL_LAYER_HPP diff --git a/rocnnet/modl/marshal.hpp b/rocnnet/modl/marshal.hpp deleted file mode 100644 index 7a1f33bef..000000000 --- a/rocnnet/modl/marshal.hpp +++ /dev/null @@ -1,227 +0,0 @@ -#include - -#include "pbm/save.hpp" -#include "pbm/load.hpp" - -#include "ead/constant.hpp" -#include "ead/variable.hpp" - -#include "ead/serialize.hpp" - -#include "ead/generated/pyapi.hpp" - -#ifndef MODL_MARSHAL_HPP -#define MODL_MARSHAL_HPP - -namespace modl -{ - -// iMarshaler is an interface for models to label -// and serialize variables -struct iMarshaler -{ - virtual ~iMarshaler (void) = default; - - iMarshaler* clone (void) const - { - return clone_impl(); - } - - virtual std::string get_label (void) const = 0; - - virtual pbm::PathedMapT list_bases (void) const = 0; - - /// Return all variables labelled specific to this model - virtual pbm::PathedTens* get_variables (void) const = 0; - - /// Set all the variables associated with this label in storage - virtual void set_variables (pbm::PathedTens* storage) = 0; - -protected: - virtual iMarshaler* clone_impl (void) const = 0; -}; - -using MarsptrT = std::shared_ptr; - -using MarsarrT = std::vector; - -struct iMarshalSet : public iMarshaler -{ - iMarshalSet (std::string label) : label_(label) {} - - iMarshalSet (const iMarshalSet& other) = default; - - iMarshalSet& operator = (const iMarshalSet& other) = default; - - iMarshalSet (iMarshalSet&& other) = default; - - iMarshalSet& operator = (iMarshalSet&& other) = default; - - virtual ~iMarshalSet (void) = default; - - std::string get_label (void) const override - { - return label_; - } - - pbm::PathedMapT list_bases (void) const override - { - pbm::PathedMapT out; - auto marshalers = get_subs(); - for (MarsptrT& marshal : marshalers) - { - auto temp = marshal->list_bases(); - for (auto& bpairs : temp) - { - bpairs.second.push_front(marshal->get_label()); - } - out.insert(temp.begin(), temp.end()); - } - return out; - } - - pbm::PathedTens* get_variables (void) const override - { - auto out = new pbm::PathedTens(); - auto marshalers = get_subs(); - for (MarsptrT& marshal : marshalers) - { - std::string child_label = marshal->get_label(); - auto child = marshal->get_variables(); - auto it = out->children_.find(child_label); - if (out->children_.end() != it) - { - it->second->join(child); - delete child; - } - else - { - out->children_.emplace(child_label, child); - } - } - return out; - } - - void set_variables (pbm::PathedTens* storage) override - { - auto marshalers = get_subs(); - for (MarsptrT& marshal : marshalers) - { - std::string child_label = marshal->get_label(); - auto it = storage->children_.find(child_label); - if (storage->children_.end() == it) - { - logs::warnf("label %s not found", child_label.c_str()); - continue; - } - marshal->set_variables(it->second); - } - } - - virtual MarsarrT get_subs (void) const = 0; - - std::string label_; -}; - -struct MarshalVar final : public iMarshaler -{ - MarshalVar (ead::VarptrT var) : var_(var) {} - - MarshalVar (const MarshalVar& other) - { - copy_helper(other); - } - - MarshalVar& operator = (const MarshalVar& other) - { - if (this != &other) - { - copy_helper(other); - } - return *this; - } - - MarshalVar (MarshalVar&& other) = default; - - MarshalVar& operator = (MarshalVar&& other) = default; - - std::string get_label (void) const override - { - return var_->get_label(); - } - - pbm::PathedMapT list_bases (void) const override - { - auto var = var_->get_tensor(); - return pbm::PathedMapT{ - std::pair{ - var, - pbm::StringsT{var_->get_label()} - } - }; - } - - pbm::PathedTens* get_variables (void) const override - { - auto out = new pbm::PathedTens(); - out->tens_.emplace(var_->get_label(), var_->get_tensor()); - return out; - } - - void set_variables (pbm::PathedTens* storage) override - { - auto it = storage->tens_.find(var_->get_label()); - if (storage->tens_.end() == it) - { - logs::warnf("variable %s not found", var_->get_tensor()->to_string().c_str()); - } - else - { - var_->assign(ead::NodeConverters::to_node(it->second)->data(), it->second->shape()); - } - } - - ead::VarptrT var_; - -private: - void copy_helper (const MarshalVar& other) - { - auto ov = static_cast*>( - other.var_->get_tensor().get()); - var_ = std::make_shared>( - std::shared_ptr>( - ead::Variable::get(*ov))); - } - - iMarshaler* clone_impl (void) const override - { - return new MarshalVar(*this); - } -}; - -// iTrainingContext is an interface describing how a model is trained -// (e.g.: how many iterations/how large the batch is) -struct iTrainingContext -{ - virtual ~iTrainingContext (void) = default; - - virtual void marshal_layer (cortenn::Layer& out_layer) const = 0; - - virtual void unmarshal_layer (const cortenn::Layer& in_layer) = 0; -}; - -using MarVarsptrT = std::shared_ptr; - -bool save (std::ostream& outs, ade::TensptrT source, - iMarshaler* source_graph, iTrainingContext* tctx = nullptr); - -void load (std::istream& ins, iMarshaler* target, - iTrainingContext* tctx = nullptr); - -using NonLinearF = std::function(ead::NodeptrT)>; - -using NonLinearsT = std::vector; - -} - -#endif // MODL_MARSHAL_HPP diff --git a/rocnnet/modl/mlp.hpp b/rocnnet/modl/mlp.hpp deleted file mode 100644 index 54851168d..000000000 --- a/rocnnet/modl/mlp.hpp +++ /dev/null @@ -1,205 +0,0 @@ -#include "ead/generated/api.hpp" - -#include "rocnnet/modl/marshal.hpp" - -#ifndef MODL_MLP_HPP -#define MODL_MLP_HPP - -namespace modl -{ - -static const std::string weight_fmt = "weight_%d"; - -static const std::string bias_fmt = "bias_%d"; - -struct MLP final : public iMarshalSet -{ - MLP (ade::DimT n_input, - std::vector layer_outs, std::string label) : - iMarshalSet(label) - { - if (layer_outs.empty()) - { - logs::fatal("cannot create MLP with no layers specified"); - } - - for (size_t i = 0, n = layer_outs.size(); i < n; ++i) - { - ade::DimT n_output = layer_outs[i]; - ade::Shape weight_shape({n_output, n_input}); - ade::NElemT nweight = weight_shape.n_elems(); - - PybindT bound = 1.0 / std::sqrt(n_input); - std::uniform_real_distribution dist(-bound, bound); - auto gen = [&dist]() - { - return dist(ead::get_engine()); - }; - std::vector wdata(nweight); - std::generate(wdata.begin(), wdata.end(), gen); - - ead::VarptrT weight = ead::make_variable( - wdata.data(), weight_shape, fmts::sprintf(weight_fmt, i)); - - ead::VarptrT bias = ead::make_variable_scalar( - 0.0, ade::Shape({n_output}), fmts::sprintf(bias_fmt, i)); - - layers_.push_back(HiddenLayer{ - std::make_shared(weight), - std::make_shared(bias) - }); - n_input = n_output; - } - } - - MLP (const pbm::GraphInfo& graph, std::string label) : - iMarshalSet(label) - { - const auto& children = graph.tens_.children_; - size_t nlayers = children.size() / 2; - if (nlayers == 0) - { - logs::fatal("expecting at least one layer"); - } - for (size_t i = 0; i < nlayers; ++i) - { - std::string weight_label = fmts::sprintf(weight_fmt, i); - auto wmarsh_it = children.find(weight_label); - if (children.end() == wmarsh_it) - { - logs::fatalf("cannot find weight_%d variable marshaller", i); - } - auto weight_it = wmarsh_it->second->tens_.find(weight_label); - if (wmarsh_it->second->tens_.end() == weight_it) - { - logs::fatalf("cannot find weight_%d variable", i); - } - std::string bias_label = fmts::sprintf(bias_fmt, i); - auto bmarsh_it = children.find(bias_label); - if (children.end() == bmarsh_it) - { - logs::fatalf("cannot find bias_%d variable marshaller", i); - } - auto bias_it = bmarsh_it->second->tens_.find(bias_label); - if (bmarsh_it->second->tens_.end() == bias_it) - { - logs::fatalf("cannot find bias_%d variable", i); - } - layers_.push_back(HiddenLayer{ - std::make_shared( - std::static_pointer_cast>( - ead::NodeConverters::to_node(weight_it->second))), - std::make_shared( - std::static_pointer_cast>( - ead::NodeConverters::to_node(bias_it->second))), - }); - } - } - - MLP (const MLP& other) : iMarshalSet(other) - { - copy_helper(other); - } - - MLP& operator = (const MLP& other) - { - if (this != &other) - { - iMarshalSet::operator = (other); - copy_helper(other); - } - return *this; - } - - MLP (MLP&& other) = default; - - MLP& operator = (MLP&& other) = default; - - - ead::NodeptrT operator () (ead::NodeptrT input, - NonLinearsT nonlinearities) - { - // sanity check - const ade::Shape& in_shape = input->shape(); - uint8_t ninput = get_ninput(); - if (in_shape.at(0) != ninput) - { - logs::fatalf("cannot generate mlp with input shape %s against n_input %d", - in_shape.to_string().c_str(), ninput); - } - - size_t nlayers = layers_.size(); - size_t nnlin = nonlinearities.size(); - if (nnlin != nlayers) - { - logs::fatalf( - "cannot generate mlp of %d layers with %d nonlinearities", - nlayers, nnlin); - } - - ead::NodeptrT out = input; - for (size_t i = 0; i < nlayers; ++i) - { - auto hypothesis = tenncor::nn::fully_connect({out}, - {ead::convert_to_node(layers_[i].weight_->var_)}, - ead::convert_to_node(layers_[i].bias_->var_)); - out = nonlinearities[i](hypothesis); - } - return out; - } - - ade::DimT get_ninput (void) const - { - return layers_.front().weight_->var_->shape().at(1); - } - - ade::DimT get_noutput (void) const - { - return layers_.back().weight_->var_->shape().at(0); - } - - MarsarrT get_subs (void) const override - { - MarsarrT out; - out.reserve(2 * layers_.size()); - for (const HiddenLayer& layer : layers_) - { - out.push_back(layer.weight_); - out.push_back(layer.bias_); - } - return out; - } - - struct HiddenLayer - { - MarVarsptrT weight_; - - MarVarsptrT bias_; - }; - - std::vector layers_; - -private: - void copy_helper (const MLP& other) - { - layers_.clear(); - for (const HiddenLayer& olayer : other.layers_) - { - layers_.push_back(HiddenLayer{ - std::make_shared(*olayer.weight_), - std::make_shared(*olayer.bias_), - }); - } - } - - iMarshaler* clone_impl (void) const override - { - return new MLP(*this); - } -}; - -using MLPptrT = std::shared_ptr; - -} - -#endif // MODL_MLP_HPP diff --git a/rocnnet/modl/model.hpp b/rocnnet/modl/model.hpp new file mode 100644 index 000000000..9eaec3900 --- /dev/null +++ b/rocnnet/modl/model.hpp @@ -0,0 +1,166 @@ +#include "rocnnet/modl/dense.hpp" + +#ifndef MODL_MODEL_HPP +#define MODL_MODEL_HPP + +namespace modl +{ + +struct SeqModelBuilder final : public iLayerBuilder +{ + SeqModelBuilder (std::string label) : label_(label) {} + + void set_tensor (ade::TensptrT tens, std::string target) override {} // seqmodel has no tensor + + void set_sublayer (LayerptrT layer) override + { + layers_.push_back(layer); + } + + LayerptrT build (void) const override; + +private: + std::string label_; + + std::vector layers_; +}; + +const std::string seq_model_key = +get_layer_reg().register_tagr(layers_key_prefix + "seqmodel", +[](ade::TensrefT ref, std::string label) +{ + get_layer_reg().layer_tag(ref, seq_model_key, label); +}, +[](std::string label) -> LBuilderptrT +{ + return std::make_shared(label); +}); + +struct SequentialModel final : public iLayer +{ + SequentialModel (const std::string& label) : + label_(label) {} + + SequentialModel (const SequentialModel& other, + std::string label_prefix = "") + { + copy_helper(other, label_prefix); + } + + SequentialModel& operator = (const SequentialModel& other) + { + if (this != &other) + { + copy_helper(other); + } + return *this; + } + + SequentialModel (SequentialModel&& other) = default; + + SequentialModel& operator = (SequentialModel&& other) = default; + + SequentialModel* clone (std::string label_prefix = "") const + { + return static_cast(this->clone_impl(label_prefix)); + } + + size_t get_ninput (void) const override + { + size_t input = 0; + for (auto it = layers_.begin(), et = layers_.end(); + it != et && 0 == input; ++it) + { + input = (*it)->get_ninput(); + } + return input; + } + + size_t get_noutput (void) const override + { + size_t output = 0; + for (auto it = layers_.rbegin(), et = layers_.rend(); + it != et && 0 == output; ++it) + { + output = (*it)->get_noutput(); + } + return output; + } + + std::string get_ltype (void) const override + { + return seq_model_key; + } + + std::string get_label (void) const override + { + return label_; + } + + ead::NodeptrT connect (ead::NodeptrT input) const override + { + ead::NodeptrT out; + for (size_t i = 0, n = layers_.size(); i < n; ++i) + { + auto& layer = layers_[i]; + out = layer->connect(input); + input = out; + recursive_tag(out->get_tensor(), { + input->get_tensor().get(), + }, LayerId(layer->get_ltype(), layer->get_label(), i)); + } + return out; + } + + ade::TensT get_contents (void) const override + { + ade::TensT out; + out.reserve(layers_.size()); + for (auto& layer : layers_) + { + auto tmp = layer->get_contents(); + out.insert(out.end(), tmp.begin(), tmp.end()); + } + return out; + } + + void push_back (LayerptrT layer) + { + // label layer content + auto subs = layer->get_contents(); + for (auto& sub : subs) + { + tag(sub, LayerId(layer->get_ltype(), + layer->get_label(), layers_.size())); + } + + layers_.push_back(layer); + } + +private: + iLayer* clone_impl (std::string label_prefix) const override + { + return new SequentialModel(*this, label_prefix); + } + + void copy_helper (const SequentialModel& other, std::string label_prefix = "") + { + label_ = label_prefix + other.label_; + layers_.clear(); + layers_.reserve(other.layers_.size()); + for (LayerptrT olayer : other.layers_) + { + push_back(LayerptrT(olayer->clone(label_prefix))); + } + } + + std::string label_; + + std::vector layers_; +}; + +using SeqModelptrT = std::shared_ptr; + +} + +#endif // MODL_MODEL_HPP diff --git a/rocnnet/modl/rbm.hpp b/rocnnet/modl/rbm.hpp index d68b57d19..520947426 100644 --- a/rocnnet/modl/rbm.hpp +++ b/rocnnet/modl/rbm.hpp @@ -1,6 +1,5 @@ -#include "ead/generated/api.hpp" - -#include "rocnnet/modl/marshal.hpp" +#include "rocnnet/modl/dense.hpp" +#include "rocnnet/modl/activations.hpp" #ifndef MODL_RBM_HPP #define MODL_RBM_HPP @@ -8,60 +7,86 @@ namespace modl { -struct RBM final : public iMarshalSet +const std::string hidden_key = "hidden"; + +const std::string visible_key = "visible"; + +struct RBMBuilder final : public iLayerBuilder { - RBM (ade::DimT n_input, - std::vector layer_outs, std::string label) : - iMarshalSet(label) + RBMBuilder (std::string label) : label_(label) {} + + void set_tensor (ade::TensptrT tens, std::string target) override {} // rbm has no tensor + + void set_sublayer (LayerptrT layer) override { - if (layer_outs.empty()) - { - logs::fatal("cannot create RBM with no layers specified"); - } + layers_.push_back(layer); + } + + LayerptrT build (void) const override; + +private: + std::vector layers_; + + std::string label_; +}; + +const std::string rbm_layer_key = +get_layer_reg().register_tagr(layers_key_prefix + "rbm", +[](ade::TensrefT ref, std::string label) +{ + get_layer_reg().layer_tag(ref, rbm_layer_key, label); +}, +[](std::string label) -> LBuilderptrT +{ + return std::make_shared(label); +}); - for (size_t i = 0, n = layer_outs.size(); i < n; ++i) +struct RBM final : public iLayer +{ + RBM (ade::DimT nhidden, ade::DimT nvisible, + ActivationptrT activation, + eqns::InitF weight_init, + eqns::InitF bias_init, + const std::string& label) : + label_(label), + hidden_(std::make_shared( + nhidden, nvisible, weight_init, bias_init, hidden_key)), + activation_(activation) + { + auto hidden_contents = hidden_->get_contents(); + auto weight = hidden_contents[0]; + auto hbias = hidden_contents[1]; + ead::NodeptrT vbias = nullptr; + + if (bias_init) { - ade::DimT n_output = layer_outs[i]; - ade::Shape weight_shape({n_output, n_input}); - ade::NElemT nweight = weight_shape.n_elems(); - - PybindT bound = 4 * std::sqrt(6.0 / (n_output + n_input)); - std::uniform_real_distribution dist(-bound, bound); - auto gen = [&dist]() - { - return dist(ead::get_engine()); - }; - std::vector wdata(nweight); - std::generate(wdata.begin(), wdata.end(), gen); - - ead::VarptrT weight = ead::make_variable( - wdata.data(), weight_shape, fmts::sprintf("weight_%d", i)); - - ead::VarptrT hbias = ead::make_variable_scalar( - 0.0, ade::Shape({n_output}), fmts::sprintf("hbias_%d", i)); - - ead::VarptrT vbias = ead::make_variable_scalar( - 0.0, ade::Shape({n_input}), fmts::sprintf("vbias_%d", i)); - - layers_.push_back(HiddenLayer{ - std::make_shared(weight), - std::make_shared(hbias), - std::make_shared(vbias), - }); - n_input = n_output; + vbias = bias_init(ade::Shape({nvisible}), bias_key); } + visible_ = std::make_shared(tenncor::transpose( + ead::NodeConverters::to_node(weight)), vbias, visible_key); + tag_sublayers(); + } + + RBM (DenseptrT hidden, DenseptrT visible, + ActivationptrT activation, std::string label) : + label_(label), + hidden_(hidden), + visible_(visible), + activation_(activation) + { + tag_sublayers(); } - RBM (const RBM& other) : iMarshalSet(other) + RBM (const RBM& other, + std::string label_prefix = "") { - copy_helper(other); + copy_helper(other, label_prefix); } RBM& operator = (const RBM& other) { if (this != &other) { - iMarshalSet::operator = (other); copy_helper(other); } return *this; @@ -71,136 +96,108 @@ struct RBM final : public iMarshalSet RBM& operator = (RBM&& other) = default; - - // input of shape - // propagate upwards (towards visibleness) - ead::NodeptrT operator () (ead::NodeptrT input, - NonLinearsT nonlinearities) + RBM* clone (std::string label_prefix = "") const { - // sanity check - const ade::Shape& in_shape = input->shape(); - uint8_t ninput = get_ninput(); - if (in_shape.at(0) != ninput) - { - logs::fatalf( - "cannot generate rbm with input shape %s against n_input %d", - in_shape.to_string().c_str(), ninput); - } - - size_t nlayers = layers_.size(); - size_t nnlin = nonlinearities.size(); - if (nnlin != nlayers) - { - logs::fatalf( - "cannot generate rbm of %d layers with %d nonlinearities", - nlayers, nnlin); - } - - ead::NodeptrT out = input; - for (size_t i = 0; i < nlayers; ++i) - { - // weight is - // in is - // out = in @ weight, so out is - auto hypothesis = tenncor::nn::fully_connect({out}, - {ead::convert_to_node(layers_[i].weight_->var_)}, - ead::convert_to_node(layers_[i].hbias_->var_)); - out = nonlinearities[i](hypothesis); - } - return out; + return static_cast(this->clone_impl(label_prefix)); } - // input of shape - ead::NodeptrT prop_down (ead::NodeptrT hidden, - NonLinearsT nonlinearities) + size_t get_ninput (void) const override { - // sanity check - const ade::Shape& out_shape = hidden->shape(); - uint8_t noutput = get_noutput(); - if (out_shape.at(0) != noutput) - { - logs::fatalf( - "cannot prop down rbm with output shape %s against n_output %d", - out_shape.to_string().c_str(), noutput); - } + return hidden_->get_ninput(); + } - size_t nlayers = layers_.size(); - size_t nnlin = nonlinearities.size(); - if (nnlin != nlayers) - { - logs::fatalf( - "cannot generate rbm of %d layers with %d nonlinearities", - nlayers, nnlin); - } + size_t get_noutput (void) const override + { + return hidden_->get_noutput(); + } - ead::NodeptrT out = hidden; - for (size_t i = 0; i < nlayers; ++i) - { - size_t index = nlayers - i - 1; - // weight is - // in is - // out = in @ weight.T, so out is - auto hypothesis = tenncor::nn::fully_connect({out}, - {tenncor::transpose( - ead::convert_to_node(layers_[index].weight_->var_))}, - ead::convert_to_node(layers_[index].vbias_->var_)); - out = nonlinearities[index](hypothesis); - } - return out; + std::string get_ltype (void) const override + { + return rbm_layer_key; } - uint8_t get_ninput (void) const + std::string get_label (void) const override { - return layers_.front().weight_->var_->shape().at(1); + return label_; } - uint8_t get_noutput (void) const + ead::NodeptrT connect (ead::NodeptrT visible) const override { - return layers_.back().weight_->var_->shape().at(0); + return activation_->connect(hidden_->connect(visible)); } - MarsarrT get_subs (void) const override + ade::TensT get_contents (void) const override { - MarsarrT out; - out.reserve(3 * layers_.size()); - for (const HiddenLayer& layer : layers_) - { - out.push_back(layer.weight_); - out.push_back(layer.hbias_); - out.push_back(layer.vbias_); - } + auto out = hidden_->get_contents(); + auto vis_contents = visible_->get_contents(); + auto act_contents = activation_->get_contents(); + out.insert(out.end(), vis_contents.begin(), vis_contents.end()); + out.insert(out.end(), act_contents.begin(), act_contents.end()); return out; } - struct HiddenLayer + ead::NodeptrT backward_connect (ead::NodeptrT hidden) const { - MarVarsptrT weight_; + return activation_->connect(visible_->connect(hidden)); + } - MarVarsptrT hbias_; +private: + iLayer* clone_impl (std::string label_prefix) const override + { + return new RBM(*this, label_prefix); + } - MarVarsptrT vbias_; - }; + void tag_sublayers (void) + { + auto hidden_subs = hidden_->get_contents(); + for (auto& sub : hidden_subs) + { + tag(sub, LayerId(hidden_->get_ltype(), + hidden_->get_label(), 0)); + } - std::vector layers_; + auto visible_subs = visible_->get_contents(); + for (auto& sub : visible_subs) + { + tag(sub, LayerId(visible_->get_ltype(), + visible_->get_label(), 1)); + } -private: - void copy_helper (const RBM& other) - { - layers_.clear(); - for (const HiddenLayer& olayer : other.layers_) + auto activation_subs = activation_->get_contents(); + for (auto& sub : activation_subs) { - layers_.push_back(HiddenLayer{ - std::make_shared(*olayer.weight_), - std::make_shared(*olayer.hbias_), - std::make_shared(*olayer.vbias_), - }); + tag(sub, LayerId(activation_->get_ltype(), + activation_->get_label(), 2)); } } - iMarshaler* clone_impl (void) const override + void copy_helper (const RBM& other, std::string label_prefix = "") { - return new RBM(*this); + label_ = label_prefix + other.label_; + hidden_ = DenseptrT(other.hidden_->clone(label_prefix)); + auto hidden_contents = hidden_->get_contents(); + auto vbias = other.visible_->get_contents()[1]; + if (nullptr != vbias) + { + vbias = ade::TensptrT(ead::Variable::get( + *static_cast*>(vbias.get()))); + } + visible_ = std::make_shared(tenncor::transpose( + ead::NodeConverters::to_node(hidden_contents[0])), + ead::NodeConverters::to_node(vbias), + label_prefix + visible_key); + + activation_ = ActivationptrT(other.activation_->clone(label_prefix)); + tag_sublayers(); } + + std::string label_; + + DenseptrT hidden_; + + DenseptrT visible_; + + ActivationptrT activation_; }; using RBMptrT = std::shared_ptr; diff --git a/rocnnet/modl/src/activations.cpp b/rocnnet/modl/src/activations.cpp new file mode 100644 index 000000000..5489f737a --- /dev/null +++ b/rocnnet/modl/src/activations.cpp @@ -0,0 +1,25 @@ +#include "rocnnet/modl/activations.hpp" + +#ifdef MODL_ACTIVATIONS_HPP + +namespace modl +{ + +LayerptrT ActivationBuilder::build (void) const +{ + return std::make_shared(label_, act_type_); +} + +LayerptrT sigmoid (std::string label) +{ + return std::make_shared(label, sigmoid_layer_key); +} + +LayerptrT tanh (std::string label) +{ + return std::make_shared(label, tanh_layer_key); +} + +} + +#endif diff --git a/rocnnet/modl/src/dense.cpp b/rocnnet/modl/src/dense.cpp new file mode 100644 index 000000000..1f092ecdc --- /dev/null +++ b/rocnnet/modl/src/dense.cpp @@ -0,0 +1,19 @@ +#include "rocnnet/modl/dense.hpp" + +#ifdef MODL_DENSE_HPP + +namespace modl +{ + +LayerptrT DenseBuilder::build (void) const +{ + if (nullptr == weight_) + { + logs::fatal("cannot build dense with null weight"); + } + return std::make_shared(weight_, bias_, label_); +} + +} + +#endif diff --git a/rocnnet/modl/src/layer.cpp b/rocnnet/modl/src/layer.cpp new file mode 100644 index 000000000..ff27d1c67 --- /dev/null +++ b/rocnnet/modl/src/layer.cpp @@ -0,0 +1,290 @@ +#include "pbm/save.hpp" +#include "pbm/load.hpp" + +#include "ead/serialize.hpp" + +#include "rocnnet/modl/layer.hpp" + +#ifdef MODL_LAYER_HPP + +namespace modl +{ + +size_t LayerTag::tag_id_ = typeid(LayerTag).hash_code(); + +void validate_label (const std::string& label) +{ + if (std::string::npos != label.find(llabel_sep)) + { + logs::fatalf("label `%s` cannot have reserved separator '%c'", + label.c_str(), llabel_sep); + } +} + +std::unordered_map unpack_labels ( + const std::vector& labels) +{ + std::unordered_map out; + for (std::string label : labels) + { + auto parts = fmts::split(label, std::string(&llabel_sep, 1)); + if (parts.size() < 4) + { + logs::errorf("invalid layer label %s", label.c_str()); + continue; + } + out[parts[0]].push_back(LayerId(parts[1], parts[2], std::stoul(parts[3]))); + } + return out; +} + +void iLayer::tag (ade::TensptrT tensor, LayerId subs) const +{ + get_layer_reg().layer_tag(tensor, get_ltype(), + subs.to_string(get_label())); +} + +void iLayer::recursive_tag (ade::TensptrT root, + std::unordered_set ignores, LayerId subs) const +{ + recursive_layer_tag(root, get_ltype(), + subs.to_string(get_label()), ignores); +} + +LayerRegistry& get_layer_reg (void) +{ + static LayerRegistry registry; + return registry; +} + +void recursive_layer_tag (ade::TensptrT tens, std::string layer_type, + std::string name, std::unordered_set stops, + LayerRegistry& registry) +{ + tag::recursive_tag(tens, stops, + [&](ade::TensrefT ref) + { + registry.layer_tag(ref, layer_type, name); + }); +} + +struct LayerNode; + +using LNodeptrT = std::shared_ptr; + +using LMatchesT = std::list>; + +struct LayerNode final +{ + LayerNode (const std::string& type, const std::string& label) : + type_(type), label_(label) {} + + // Return generated leaves after adding branches to the subtree from tag reps + LMatchesT match_layer (const tag::TagRepsT& reps) + { + LMatchesT matches; + std::vector labels; + if (estd::get(labels, reps, type_)) + { + auto layer_info = unpack_labels(labels); + LayerIdsT subids; + if (estd::get(subids, layer_info, label_)) + { + for (LayerId subid : subids) + { + if (subid.type_.empty()) + { + matches.push_back({this, subid.label_}); + } + else + { + size_t n = subs_.size(); + if (subid.index_ >= n) + { + subs_.insert(subs_.end(), + subid.index_ - n + 1, LNodeptrT()); + } + auto& sub = subs_[subid.index_]; + if (nullptr == sub) + { + sub = std::make_shared( + subid.type_, subid.label_); + } + auto tmp = sub->match_layer(reps); + matches.insert(matches.end(), tmp.begin(), tmp.end()); + } + } + } + } + return matches; + } + + std::string type_; + + std::string label_; + + std::vector subs_; +}; + +using SublayersT = std::unordered_map; + +using TensLablT = std::unordered_map; + +using TensLayerMapT = std::unordered_map; + +struct LayerDeserializer final : public ade::OnceTraveler +{ + LayerDeserializer (std::string key, std::string val) : + base_(std::make_shared(key, val)) {} + + /// Implementation of OnceTraveler + void visit_leaf (ade::iLeaf* leaf) override + { + tag::TagRepsT reps = + tag::get_reg().get_tags(leaf); + LMatchesT matches = base_->match_layer(reps); + if (false == matches.empty()) + { + sublayers_.emplace(leaf, matches); + roots_.emplace(leaf); + } + } + + /// Implementation of OnceTraveler + void visit_func (ade::iFunctor* func) override + { + auto& children = func->get_children(); + for (auto child : children) + { + child.get_tensor()->accept(*this); + } + + tag::TagRepsT reps = + tag::get_reg().get_tags(func); + LMatchesT matches = base_->match_layer(reps); + if (false == matches.empty()) + { + sublayers_.emplace(func, matches); + for (auto child : children) + { + roots_.erase(child.get_tensor().get()); + } + roots_.emplace(func); + } + } + + LayerptrT build_layer ( + LayerRegistry& registry, ade::OwnerMapT& owners) const + { + TensLayerMapT layer_tens; + for (auto& sublayer : sublayers_) + { + auto& tens = sublayer.first; + auto& matches = sublayer.second; + for (auto& match : matches) + { + layer_tens[match.first].emplace( + owners.at(tens).lock(), match.second); + } + } + return build_layer_helper(registry, layer_tens, base_.get()); + } + + std::unordered_set roots_; + +private: + LayerptrT build_layer_helper (LayerRegistry& registry, + const TensLayerMapT& layer_tens, LayerNode* lroot) const + { + if (nullptr == lroot) + { + logs::fatal("cannot builder layer from null layer node"); + } + auto builder = registry.get_builder(lroot->type_)(lroot->label_); + for (const LNodeptrT& sub : lroot->subs_) + { + builder->set_sublayer(build_layer_helper( + registry, layer_tens, sub.get())); + } + TensLablT tenslabels; + if (estd::get(tenslabels, layer_tens, lroot)) + { + for (auto& tenslabel : tenslabels) + { + builder->set_tensor(tenslabel.first, tenslabel.second); + } + } + return builder->build(); + } + + SublayersT sublayers_; + + LNodeptrT base_; +}; + +LayerptrT load_layer (std::istream& ins, ade::TensT& roots, + std::string ltype, std::string label, + LayerRegistry& registry) +{ + cortenn::Graph graph; + if (false == graph.ParseFromIstream(&ins)) + { + logs::fatalf("failed to parse from istream when loading %s", + ltype.c_str()); + } + pbm::GraphInfo info; + pbm::load_graph(info, graph); + + ade::OwnerMapT owners = ade::track_owners( + ade::TensT(info.roots_.begin(), info.roots_.end())); + + LayerDeserializer layd(ltype, label); + // get all layer labelled nodes in graph + for (ade::TensptrT tens : info.roots_) + { + tens->accept(layd); + } + + roots.reserve(layd.roots_.size()); + for (ade::iTensor* root : layd.roots_) + { + roots.push_back(owners.at(root).lock()); + } + + return layd.build_layer(registry, owners); +} + +bool save_layer (std::ostream& outs, const iLayer& layer, ade::TensT roots, + LayerRegistry& registry) +{ + pbm::GraphSaver saver(registry.get_tag_registry()); + for (auto& root : roots) + { + root->accept(saver); + } + + auto contents = layer.get_contents(); + auto owners = ade::track_owners(contents); + for (auto tens : contents) + { + tens->accept(saver); + } + + pbm::PathedMapT labels; + for (ade::iLeaf* leaf : saver.leaves_) + { + if (false == leaf->is_const()) + { + labels.emplace(owners.at(leaf).lock(), pbm::StringsT{leaf->to_string()}); + } + } + + // save graph from source + cortenn::Graph graph; + saver.save(graph, labels); + return graph.SerializeToOstream(&outs); +} + +} + +#endif // MODL_LAYER_HPP diff --git a/rocnnet/modl/src/marshal.cpp b/rocnnet/modl/src/marshal.cpp deleted file mode 100755 index 74eed3166..000000000 --- a/rocnnet/modl/src/marshal.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "rocnnet/modl/marshal.hpp" - -#ifdef MODL_MARSHAL_HPP - -namespace modl -{ - -bool save (std::ostream& outs, ade::TensptrT source, - iMarshaler* source_graph, iTrainingContext* tctx) -{ - pbm::GraphSaver saver; - source->accept(saver); - - cortenn::Layer layer; - - // save graph from source - cortenn::Graph* graph = layer.mutable_graph(); - saver.save(*graph, source_graph->list_bases()); - - // save context if we have context - if (nullptr != tctx) - { - tctx->marshal_layer(layer); - } - - return layer.SerializeToOstream(&outs); -} - -void load (std::istream& ins, iMarshaler* target, - iTrainingContext* tctx) -{ - cortenn::Layer layer; - layer.ParseFromIstream(&ins); - - // load graph to target - const cortenn::Graph& graph = layer.graph(); - pbm::GraphInfo info; - pbm::load_graph(info, graph); - target->set_variables(&info.tens_); - - // load context to target - bool has_ctx = cortenn::Layer::LAYER_CONTEXT_NOT_SET != - layer.layer_context_case(); - bool has_training_ctx = nullptr != tctx; - if (has_ctx != has_training_ctx) - { - logs::warn("either missing training context or " - "missing layer context from protobuf"); - } - if (has_training_ctx) - { - tctx->unmarshal_layer(layer); - } -} - -} - -#endif diff --git a/rocnnet/modl/src/model.cpp b/rocnnet/modl/src/model.cpp new file mode 100644 index 000000000..de5610c2b --- /dev/null +++ b/rocnnet/modl/src/model.cpp @@ -0,0 +1,20 @@ +#include "rocnnet/modl/model.hpp" + +#ifdef MODL_MODEL_HPP + +namespace modl +{ + +LayerptrT SeqModelBuilder::build (void) const +{ + auto model = std::make_shared(label_); + for (auto& layer : layers_) + { + model->push_back(layer); + } + return model; +} + +} + +#endif diff --git a/rocnnet/modl/src/rbm.cpp b/rocnnet/modl/src/rbm.cpp new file mode 100644 index 000000000..aa1469f4c --- /dev/null +++ b/rocnnet/modl/src/rbm.cpp @@ -0,0 +1,25 @@ +#include "rocnnet/modl/rbm.hpp" + +#ifdef MODL_RBM_HPP + +namespace modl +{ + +LayerptrT RBMBuilder::build (void) const +{ + if (3 != layers_.size()) + { + logs::fatalf("cannot make rbm without hidden, visible, " + "and activation layer, got %d layers", + layers_.size()); + } + return std::make_shared( + std::static_pointer_cast(layers_[0]), + std::static_pointer_cast(layers_[1]), + std::static_pointer_cast(layers_[2]), + label_); +} + +} + +#endif diff --git a/rocnnet/notebooks/ead/__init__.py b/rocnnet/notebooks/ead/__init__.py index 1642e3625..1e99eb777 100644 --- a/rocnnet/notebooks/ead/__init__.py +++ b/rocnnet/notebooks/ead/__init__.py @@ -1,2 +1 @@ -import age import ead diff --git a/rocnnet/notebooks/karpathy_game.ipynb b/rocnnet/notebooks/karpathy_game.ipynb index 3f664851a..2f10000cb 100644 --- a/rocnnet/notebooks/karpathy_game.ipynb +++ b/rocnnet/notebooks/karpathy_game.ipynb @@ -22,7 +22,7 @@ "import numpy as np\n", "import tempfile\n", "\n", - "import ead.age as age\n", + "import ead.tenncor as tc\n", "import ead.ead as ead\n", "import rocnnet.rocnnet as rcn\n", "\n", @@ -40,7 +40,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/var/folders/fs/cfs_ql391csfpxfsdxhmktw00000gn/T/tmpEGIKU9\n" + "/var/folders/fs/cfs_ql391csfpxfsdxhmktw00000gn/T/tmpqmlst5rx\n" ] } ], @@ -134,8 +134,8 @@ " # Here it is a done using a multi layer perceptron with 2 hidden\n", " # layers\n", " hiddens = [200, 200, g.num_actions]\n", - " nonlins = [age.tanh, age.tanh, rcn.identity]\n", - " brain = rcn.get_mlp(g.observation_size, hiddens, 'brain')\n", + " nonlins = [tc.tanh, tc.tanh, rcn.identity]\n", + " brain = rcn.get_mlp(g.observation_size, hiddens, rcn.unif_xavier_init(), 'brain')\n", "\n", " learning_rate = 0.001\n", " bgd = rcn.get_rms_momentum(\n", @@ -151,7 +151,8 @@ " train_interval = 4)\n", " \n", " sess = ead.Session()\n", - " current_controller = DQNControllerWrapper(rcn.DQNTrainer(brain, nonlins, sess, bgd, param))" + " current_controller = DQNControllerWrapper(rcn.DQNTrainer(brain, nonlins, sess, bgd, param))\n", + " sess.optimize(\"cfg/optimizations.rules\")" ] }, { @@ -176,283 +177,283 @@ "\n", " width=\"700\" style=\"fill:none;\" />\n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + "\n", + " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + "\n", + " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", - "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", - "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", " \n", "\n", - " fps = 2.9\n", + " fps = 0.9\n", "\n", " \n", "\n", " \n", "\n", - " nearest wall = 79.8\n", + " nearest wall = 54.7\n", "\n", " \n", "\n", @@ -464,7 +465,7 @@ "\n", " \n", "\n", - " objects eaten => enemy: 225, friend: 309\n", + " objects eaten => friend: 512, enemy: 324\n", "\n", " \n", "\n", @@ -472,7 +473,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -546,7 +547,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -584,27 +585,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[1.00 0.39 1.00 0.94 -0.67]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 0.56 1.00 -0.29 0.25]\n", - " [1.00 0.61 1.00 -0.29 0.25]\n", + "[[1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", + " [1.00 0.58 1.00 -0.52 -0.56]\n", + " [1.00 1.00 0.65 0.00 0.00]\n", + " [1.00 1.00 0.55 0.00 0.00]\n", + " [1.00 1.00 0.50 0.00 0.00]\n", + " [1.00 1.00 0.47 0.00 0.00]\n", + " [1.00 1.00 0.46 0.00 0.00]\n", + " [1.00 1.00 0.47 0.00 0.00]\n", + " [1.00 1.00 0.50 0.00 0.00]\n", + " [1.00 1.00 0.55 0.00 0.00]\n", + " [1.00 1.00 0.65 0.00 0.00]\n", + " [1.00 1.00 0.83 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", + " [0.38 1.00 1.00 -0.10 0.32]\n", " [1.00 1.00 1.00 0.00 0.00]\n", - " [0.59 1.00 1.00 0.73 -0.52]\n", " [1.00 1.00 1.00 0.00 0.00]\n", - " [0.55 1.00 1.00 0.37 0.82]\n", " [1.00 1.00 1.00 0.00 0.00]\n", - " [0.40 1.00 1.00 0.70 0.95]\n", - " [0.36 1.00 1.00 0.70 0.95]\n", " [1.00 1.00 1.00 0.00 0.00]\n", + " [1.00 0.71 1.00 0.64 0.36]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", @@ -612,11 +616,8 @@ " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [1.00 1.00 1.00 0.00 0.00]\n", - " [0.91 1.00 1.00 -0.63 0.11]\n", - " [1.00 0.41 1.00 0.94 -0.67]]\n", - "[0.12 1.87 -0.60 0.52]\n" + " [1.00 1.00 1.00 0.00 0.00]]\n", + "[-1.26 -0.57 -0.02 0.78]\n" ] }, { @@ -634,289 +635,289 @@ "\n", " width=\"700\" style=\"fill:none;\" />\n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + "\n", + " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", - "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + " style=\"fill:green;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", - "\n", - " \n", "\n", - " \n", + " style=\"fill:red;\" />\n", "\n", - " \n", "\n", - " \n", "\n", - " \n", "\n", - " \n", + "\n", + " \n", "\n", " \n", "\n", - " nearest wall = 109.7\n", + " nearest wall = 45.2\n", "\n", " \n", "\n", " \n", "\n", - " reward = 0.0\n", + " reward = -0.0\n", "\n", " \n", "\n", " \n", "\n", - " objects eaten => enemy: 225, friend: 309\n", + " objects eaten => friend: 512, enemy: 325\n", "\n", " \n", "\n", @@ -924,7 +925,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 11, @@ -952,21 +953,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.16" + "pygments_lexer": "ipython3", + "version": "3.7.3" } }, "nbformat": 4, diff --git a/rocnnet/notebooks/karpathy_model.pbx b/rocnnet/notebooks/karpathy_model.pbx index 01bc012fd..1519e255e 100644 Binary files a/rocnnet/notebooks/karpathy_model.pbx and b/rocnnet/notebooks/karpathy_model.pbx differ diff --git a/rocnnet/pretrained/dqnmodel.pbx b/rocnnet/pretrained/dqnmodel.pbx deleted file mode 100644 index 3ca7fb30d..000000000 Binary files a/rocnnet/pretrained/dqnmodel.pbx and /dev/null differ diff --git a/rocnnet/pretrained/gdmodel.pbx b/rocnnet/pretrained/gdmodel.pbx deleted file mode 100644 index f64fbbc13..000000000 Binary files a/rocnnet/pretrained/gdmodel.pbx and /dev/null differ diff --git a/rocnnet/pretrained/rbmcache.pbx b/rocnnet/pretrained/rbmcache.pbx deleted file mode 100644 index a8372ddd5..000000000 Binary files a/rocnnet/pretrained/rbmcache.pbx and /dev/null differ diff --git a/rocnnet/python/rocnnet.cpp b/rocnnet/python/rocnnet.cpp index 394f0a44d..534ef5fd4 100644 --- a/rocnnet/python/rocnnet.cpp +++ b/rocnnet/python/rocnnet.cpp @@ -2,6 +2,7 @@ #include #include "pybind11/pybind11.h" +#include "pybind11/numpy.h" #include "pybind11/stl.h" #include "pybind11/functional.h" @@ -9,8 +10,10 @@ #include "rocnnet/eqns/init.hpp" -#include "rocnnet/modl/mlp.hpp" +#include "rocnnet/modl/activations.hpp" +#include "rocnnet/modl/dense.hpp" #include "rocnnet/modl/rbm.hpp" +#include "rocnnet/modl/model.hpp" // #include "rocnnet/modl/dbn.hpp" // #include "rocnnet/modl/conv.hpp" @@ -30,37 +33,71 @@ ade::Shape p2cshape (std::vector& pyshape) pyshape.rbegin(), pyshape.rend())); } -trainer::DQNInfo dqninfo_init (size_t train_interval = 5, - PybindT rand_action_prob = 0.05, - PybindT discount_rate = 0.95, - PybindT target_update_rate = 0.01, - PybindT exploration_period = 1000, - size_t store_interval = 5, - uint8_t mini_batch_size = 32, - size_t max_exp = 30000) +std::vector arr2vec (ade::Shape& outshape, py::array data) { - return trainer::DQNInfo{ - train_interval, - rand_action_prob, - discount_rate, - target_update_rate, - exploration_period, - store_interval, - mini_batch_size, - max_exp, - }; -} - -modl::MLPptrT mlp_init (size_t n_input, std::vector nouts, - std::string label) -{ - return std::make_shared(n_input, nouts, label); -} - -modl::RBMptrT rbm_init (size_t n_input, std::vector nouts, - std::string label) -{ - return std::make_shared(n_input, nouts, label); + py::buffer_info info = data.request(); + outshape = p2cshape(info.shape); + size_t n = outshape.n_elems(); + auto dtype = data.dtype(); + char kind = dtype.kind(); + py::ssize_t tbytes = dtype.itemsize(); + std::vector vec; + switch (kind) + { + case 'f': + switch (tbytes) + { + case 4: // float32 + { + float* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + case 8: // float64 + { + double* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + default: + logs::fatalf("unsupported float type with %d bytes", tbytes); + } + break; + case 'i': + switch (tbytes) + { + case 1: // int8 + { + int8_t* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + case 2: // int16 + { + int16_t* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + case 4: // int32 + { + int32_t* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + case 8: // int64 + { + int64_t* dptr = static_cast(info.ptr); + vec = std::vector(dptr, dptr + n); + } + break; + default: + logs::fatalf("unsupported integer type with %d bytes", tbytes); + } + break; + default: + logs::fatalf("unknown dtype %c", kind); + } + return vec; } // modl::DBNptrT dbn_init (size_t n_input, std::vector n_hiddens, @@ -70,21 +107,21 @@ modl::RBMptrT rbm_init (size_t n_input, std::vector nouts, // std::vector(n_hiddens.begin(), n_hiddens.end()), label); // } -eqns::ApproxF get_sgd (PybindT learning_rate, eqns::NodeUnarF gradprocess) +eqns::ApproxF get_sgd (PybindT learning_rate) { - return [=](ead::NodeptrT& root, eqns::VariablesT leaves) + return [=](const eqns::VarErrsT& leaves) { - return eqns::sgd(root, leaves, learning_rate, gradprocess); + return eqns::sgd(leaves, learning_rate); }; } eqns::ApproxF get_rms_momentum (PybindT learning_rate, - PybindT discount_factor, PybindT epsilon, eqns::NodeUnarF gradprocess) + PybindT discount_factor, PybindT epsilon) { - return [=](ead::NodeptrT& root, eqns::VariablesT leaves) + return [=](const eqns::VarErrsT& leaves) { - return eqns::rms_momentum(root, leaves, learning_rate, - discount_factor, epsilon, gradprocess); + return eqns::rms_momentum(leaves, learning_rate, + discount_factor, epsilon); }; } @@ -96,112 +133,129 @@ PYBIND11_MODULE(rocnnet, m) py::class_ shape(m, "Shape"); - // common parent - py::class_ marshaler(m, "Marshaler"); + // layers + py::class_ layer(m, "Layer"); + py::class_ activation(m, "Activation"); + py::class_ dense(m, "Dense"); + py::class_ rbm(m, "RBM"); + py::class_ seqmodel(m, "SequentialModel"); - // models - py::class_ mlp(m, "MLP"); - py::class_ rbm(m, "RBM"); - // py::class_ dbn(m, "DBN"); + // trainers + py::class_ mlptrainer(m, "MLPTrainer"); + py::class_ dqntrainer(m, "DQNTrainer"); + py::class_ brbmtrainer(m, "BernoulliRBMTrainer"); - // support classes + // supports py::class_ assigns(m, "VarAssign"); - py::class_ dqninfo(m, "DQNInfo"); - py::class_ mlptrainer(m, "MLPTrainer"); - py::class_ dqntrainer(m, "DQNTrainer"); - py::class_ rbmtrainer(m, "RBMTrainer"); + py::class_ trainingctx(m, "TrainingContext"); + py::class_ dqntrainingctx(m, "DQNTrainingContext"); - // marshaler - marshaler - .def("serialize_to_file", [](py::object self, ead::NodeptrT source, - std::string filename) - { - std::fstream output(filename, - std::ios::out | std::ios::trunc | std::ios::binary); - if (false == modl::save(output, source->get_tensor(), - self.cast())) + shape.def(py::init>()); + + // layer + layer + .def("connect", &modl::iLayer::connect) + .def("get_contents", + [](py::object self) -> ead::NodesT { - logs::errorf("cannot save to file %s", filename.c_str()); - return false; - } - return true; - }, "load a version of this instance from a data") - .def("serialize_to_string", [](py::object self, ead::NodeptrT source) - { - std::stringstream savestr; - modl::save(savestr, source->get_tensor(), - self.cast()); - return savestr.str(); - }, "load a version of this instance from a data") - .def("parse_from_string", [](py::object self, std::string data) - { - modl::MarsptrT out(self.cast()->clone()); - std::stringstream loadstr; - loadstr << data; - modl::load(loadstr, out.get()); - return out; - }, "load a version of this instance from a data") - .def("get_variables", [](py::object self) - { - std::unordered_map> out; - pbm::PathedMapT bases = self.cast()->list_bases(); - for (auto bpair : bases) + ade::TensT contents = self.cast()->get_contents(); + ead::NodesT nodes; + nodes.reserve(contents.size()); + std::transform(contents.begin(), contents.end(), + std::back_inserter(nodes), + ead::NodeConverters::to_node); + return nodes; + }) + .def("save_file", + [](py::object self, std::string filename) -> bool { - if (auto var = std::dynamic_pointer_cast< - ead::Variable>(bpair.first)) + modl::iLayer& me = *self.cast(); + std::fstream output(filename, + std::ios::out | std::ios::trunc | std::ios::binary); + if (false == modl::save_layer(output, me, me.get_contents())) { - std::string key = fmts::join("::", - bpair.second.begin(), bpair.second.end()); - out.emplace(key, - std::make_shared>(var)); + logs::errorf("cannot save to file %s", filename.c_str()); + return false; } - } - return out; - }, "return variables dict in this marshaler"); - - // mlp - m.def("get_mlp", &pyrocnnet::mlp_init); - mlp - .def("copy", [](py::object self) - { - return std::make_shared(*self.cast()); - }, "deep copy this instance") - .def("forward", [](py::object self, ead::NodeptrT input, - modl::NonLinearsT nonlins) + return true; + }) + .def("save_string", + [](py::object self) -> std::string + { + modl::iLayer& me = *self.cast(); + std::stringstream savestr; + modl::save_layer(savestr, me, me.get_contents()); + return savestr.str(); + }) + .def("get_ninput", &modl::iLayer::get_ninput) + .def("get_noutput", &modl::iLayer::get_noutput); + + // activation + activation + .def(py::init(), + py::arg("label"), + py::arg("activation_type") = "sigmoid") + .def("clone", &modl::Activation::clone, py::arg("prefix") = ""); + + // dense + m.def("create_dense", + [](ead::NodeptrT weight, + ead::NodeptrT bias, + std::string label) { - return (*self.cast())(input, nonlins); - }, "forward input tensor and returned connected output"); + return std::make_shared(weight, bias, label); + }, + py::arg("weight"), + py::arg("bias") = nullptr, + py::arg("label")); + dense + .def(py::init, + eqns::InitF, + const std::string&>(), + py::arg("nunits"), + py::arg("indim"), + py::arg("weight_init") = eqns::unif_xavier_init(1), + py::arg("bias_init") = eqns::zero_init(), + py::arg("label")) + .def("clone", &modl::Dense::clone, py::arg("prefix") = ""); // rbm - m.def("get_rbm", &pyrocnnet::rbm_init); - rbm - .def("copy", [](py::object self) - { - return std::make_shared(*self.cast()); - }, "deep copy this instance") - .def("forward", [](py::object self, ead::NodeptrT input, - modl::NonLinearsT nonlins) + m.def("create_rbm", + [](modl::DenseptrT hidden, + modl::DenseptrT visible, + modl::ActivationptrT activation, + std::string label) { - return (*self.cast())(input, nonlins); - }, "forward input tensor and returned connected output") - .def("backward", [](py::object self, ead::NodeptrT hidden, - modl::NonLinearsT nonlins) - { - return self.cast()->prop_down(hidden, nonlins); - }, "backward hidden tensor and returned connected output") - .def("reconstruct_visible", [](py::object self, - ead::NodeptrT input, modl::NonLinearsT nonlins) - { - return trainer::reconstruct_visible( - *self.cast(), input, nonlins); - }, "reconstruct input") - .def("reconstruct_hidden", [](py::object self, - ead::NodeptrT hidden, modl::NonLinearsT nonlins) - { - return trainer::reconstruct_hidden( - *self.cast(), hidden, nonlins); - }, "reconstruct output"); + return std::make_shared( + hidden, visible, activation, label); + }, + py::arg("hidden"), + py::arg("visible") = nullptr, + py::arg("activation") = nullptr, + py::arg("label")); + rbm + .def(py::init, + eqns::InitF, + const std::string&>(), + py::arg("nhidden"), + py::arg("nvisible"), + py::arg("activation") = modl::sigmoid(), + py::arg("weight_init") = eqns::unif_xavier_init(1), + py::arg("bias_init") = eqns::zero_init(), + py::arg("label")) + .def("clone", &modl::RBM::clone, py::arg("prefix") = "") + .def("backward_connect", &modl::RBM::backward_connect); + + // seqmodel + seqmodel + .def(py::init(), + py::arg("label")) + .def("clone", &modl::SequentialModel::clone, py::arg("prefix") = "") + .def("add", &modl::SequentialModel::push_back); // // dbn // m.def("get_dbn", &pyrocnnet::dbn_init); @@ -215,220 +269,157 @@ PYBIND11_MODULE(rocnnet, m) // return (*self.cast())(input); // }, "forward input tensor and returned connected output"); - // mlptrainer mlptrainer - .def(py::init()) + .def(py::init(), + py::arg("model"), py::arg("sess"), + py::arg("update"), py::arg("batch_size"), + py::arg("gradprocess") = eqns::NodeUnarF(eqns::identity), + py::arg("ctx") = trainer::TrainingContext()) .def("train", &trainer::MLPTrainer::train, "train internal variables") - .def("serialize_to_file", [](py::object self, std::string filename) - { - std::fstream output(filename, - std::ios::out | std::ios::trunc | std::ios::binary); - if (false == self.cast()->save(output)) + .def("train_in", + [](py::object self) { - logs::errorf("cannot save to file %s", filename.c_str()); - return false; - } - return true; - }, "load a version of this instance from a data") - .def("serialize_to_string", [](py::object self, - ead::NodeptrT source) -> std::string - { - std::stringstream savestr; - if (self.cast()->save(savestr)) + return self.cast()->train_in_; + }, + "get train_in variable") + .def("expected_out", + [](py::object self) { - return savestr.str(); - } - return ""; - }, "load a version of this instance from a data") - .def("train_in", [](py::object self) - { - return self.cast()->train_in_; - }, "get train_in variable") - .def("expected_out", [](py::object self) - { - return self.cast()->expected_out_; - }, "get expected_out variable") - .def("train_out", [](py::object self) - { - return self.cast()->train_out_; - }, "get training node") - .def("error", [](py::object self) - { - return self.cast()->error_; - }, "get error node") - .def("brain", [](py::object self) - { - return self.cast()->brain_; - }, "get mlp"); - m.def("load_mlptrainer", [](std::string data, modl::NonLinearsT nonlins, - ead::iSession& sess, eqns::ApproxF update, - uint8_t batch_size) -> trainer::MLPTrainer - { - cortenn::Layer layer; - if (false == layer.ParseFromString(data)) - { - logs::fatal("failed to parse string when loading mlptrainer"); - } - - // load graph to target - const cortenn::Graph& graph = layer.graph(); - pbm::GraphInfo info; - pbm::load_graph(info, graph); - - auto pretrained = std::make_shared(info, "pretrained"); - - if (cortenn::Layer::kItCtx != layer.layer_context_case()) - { - logs::fatal("missing training context"); - } - trainer::TrainingContext ctx; - ctx.unmarshal_layer(layer); - return trainer::MLPTrainer(pretrained, nonlins, - sess, update, batch_size, ctx); - }); + return self.cast()->expected_out_; + }, + "get expected_out variable") + .def("train_out", + [](py::object self) + { + return self.cast()->train_out_; + }, + "get training node") + .def("error", + [](py::object self) + { + return self.cast()->error_; + }, + "get error node"); // dqntrainer - m.def("get_dqninfo", &pyrocnnet::dqninfo_init, - py::arg("train_interval") = 5, - py::arg("rand_action_prob") = 0.05, - py::arg("discount_rate") = 0.95, - py::arg("target_update_rate") = 0.01, - py::arg("exploration_period") = 1000, - py::arg("store_interval") = 5, - py::arg("mini_batch_size") = 32, - py::arg("max_exp") = 30000); + dqninfo + .def(py::init(), + py::arg("train_interval") = 5, + py::arg("rand_action_prob") = 0.05, + py::arg("discount_rate") = 0.95, + py::arg("target_update_rate") = 0.01, + py::arg("exploration_period") = 1000, + py::arg("store_interval") = 5, + py::arg("mini_batch_size") = 32, + py::arg("max_exp") = 30000); dqntrainer - .def(py::init()) + .def(py::init(), + py::arg("model"), py::arg("sess"), + py::arg("update"), py::arg("param"), + py::arg("gradprocess") = eqns::NodeUnarF(eqns::identity), + py::arg("ctx") = trainer::DQNTrainingContext()) .def("action", &trainer::DQNTrainer::action, "get next action") .def("store", &trainer::DQNTrainer::store, "save observation, action, and reward") .def("train", &trainer::DQNTrainer::train, "train qnets") - .def("serialize_to_file", [](py::object self, std::string filename) - { - std::fstream output(filename, - std::ios::out | std::ios::trunc | std::ios::binary); - if (false == self.cast()->save(output)) - { - logs::errorf("cannot save to file %s", filename.c_str()); - return false; - } - return true; - }, "load a version of this instance from a data") - .def("serialize_to_string", [](py::object self, - ead::NodeptrT source) -> std::string - { - std::stringstream savestr; - if (self.cast()->save(savestr)) - { - return savestr.str(); - } - return ""; - }, "load a version of this instance from a data") .def("error", &trainer::DQNTrainer::get_error, "get prediction error") .def("ntrained", &trainer::DQNTrainer::get_numtrained, "get number of iterations trained") .def("train_out", [](py::object self) { return self.cast()->train_out_; }, "get training node"); - m.def("load_dqntrainer", [](std::string data, modl::NonLinearsT nonlins, - ead::iSession& sess, eqns::ApproxF update, - trainer::DQNInfo param) -> trainer::DQNTrainer - { - cortenn::Layer layer; - if (false == layer.ParseFromString(data)) - { - logs::fatal("failed to parse string when loading mlptrainer"); - } - // load graph to target - const cortenn::Graph& graph = layer.graph(); - pbm::GraphInfo info; - pbm::load_graph(info, graph); - - auto pretrained = std::make_shared(info, "pretrained"); - - if (cortenn::Layer::kDqnCtx != layer.layer_context_case()) - { - logs::fatal("missing training context"); - } - trainer::DQNTrainingContext ctx; - ctx.unmarshal_layer(layer); - return trainer::DQNTrainer(pretrained, nonlins, - sess, update, param, ctx); - }); - - // rbmtrainer - rbmtrainer + // brbmtrainer + brbmtrainer .def(py::init< - modl::RBMptrT, - modl::NonLinearsT, + modl::RBM&, ead::iSession&, - ead::VarptrT, - uint8_t, + ade::DimT, PybindT, - size_t, - ead::NodeptrT>(), - py::arg("brain"), - py::arg("nolins"), + PybindT, + trainer::ErrorF>(), + py::arg("model"), py::arg("sess"), - py::arg("persistent"), py::arg("batch_size"), - py::arg("learning_rate") = 1e-3, - py::arg("n_cont_div") = 1, - py::arg("train_in") = nullptr) - .def("train", &trainer::RBMTrainer::train, "train internal variables") - .def("train_in", [](py::object self) - { - return self.cast()->train_in_; - }, "get train_in variable") - .def("cost", [](py::object self) - { - return self.cast()->cost_; - }, "get cost node") - .def("monitoring_cost", [](py::object self) - { - return self.cast()->monitoring_cost_; - }, "get monitoring cost node") - .def("brain", [](py::object self) - { - return self.cast()->brain_; - }, "get rbm"); - + py::arg("learning_rate"), + py::arg("discount_factor"), + py::arg("err_func")) + .def("train", + [](py::object self, py::array data) + { + auto trainer = self.cast(); + ade::Shape shape; + std::vector vec = pyrocnnet::arr2vec(shape, data); + return trainer->train(vec); + }, "train internal variables"); // inlines - m.def("identity", &eqns::identity); - - m.def("get_sgd", &pyrocnnet::get_sgd, - py::arg("learning_rate") = 0.5, - py::arg("gradprocess") = eqns::NodeUnarF(eqns::identity)); - m.def("get_rms_momentum", &pyrocnnet::get_rms_momentum, - py::arg("learning_rate") = 0.5, - py::arg("discount_factor") = 0.99, - py::arg("epsilon") = std::numeric_limits::epsilon(), - py::arg("gradprocess") = eqns::NodeUnarF(eqns::identity)); - - m.def("variable_from_init", - [](eqns::InitF init, std::vector slist, std::string label) - { - return init(pyrocnnet::p2cshape(slist), label); - }, - "Return labelled variable containing data created from initializer", - py::arg("init"), py::arg("slist"), py::arg("label") = ""); - - m.def("variance_scaling_init", [](PybindT factor) - { - return eqns::variance_scaling_init(factor); - }, - "truncated_normal(shape, 0, sqrt(factor / ((fanin + fanout)/2))", - py::arg("factor")); - - m.def("unif_xavier_init", &eqns::unif_xavier_init, - "uniform xavier initializer", - py::arg("factor") = 1); - - m.def("norm_xavier_init", &eqns::norm_xavier_init, - "normal xavier initializer", - py::arg("factor") = 1); + m + // activations (no longer useful) + .def("identity", &eqns::identity) + + // optimizations + .def("get_sgd", &pyrocnnet::get_sgd, + py::arg("learning_rate") = 0.5) + .def("get_rms_momentum", &pyrocnnet::get_rms_momentum, + py::arg("learning_rate") = 0.5, + py::arg("discount_factor") = 0.99, + py::arg("epsilon") = std::numeric_limits::epsilon()) + + // inits + .def("variable_from_init", + [](eqns::InitF init, std::vector slist, std::string label) + { + return init(pyrocnnet::p2cshape(slist), label); + }, + "Return labelled variable containing data created from initializer", + py::arg("init"), py::arg("slist"), py::arg("label") = "") + .def("zero_init", eqns::zero_init) + .def("variance_scaling_init", + [](PybindT factor) + { + return eqns::variance_scaling_init(factor); + }, + "truncated_normal(shape, 0, sqrt(factor / ((fanin + fanout)/2))", + py::arg("factor")) + .def("unif_xavier_init", &eqns::unif_xavier_init, + "uniform xavier initializer", + py::arg("factor") = 1) + .def("norm_xavier_init", &eqns::norm_xavier_init, + "normal xavier initializer", + py::arg("factor") = 1) + + // layer creation + .def("sigmoid", modl::sigmoid, py::arg("label") = "sigmoid") + .def("tanh", modl::tanh, py::arg("label") = "tanh") + .def("load_file_seqmodel", + [](std::string filename, std::string layer_label) -> modl::SeqModelptrT + { + std::ifstream input(filename); + if (false == input.is_open()) + { + logs::fatalf("file %s not found", filename.c_str()); + } + ade::TensT trained_roots; + return std::static_pointer_cast( + modl::load_layer(input, trained_roots, modl::seq_model_key, layer_label)); + }) + .def("load_file_rbmmodel", + [](std::string filename, std::string layer_label) -> modl::RBMptrT + { + std::ifstream input(filename); + if (false == input.is_open()) + { + logs::fatalf("file %s not found", filename.c_str()); + } + ade::TensT trained_roots; + return std::static_pointer_cast( + modl::load_layer(input, trained_roots, modl::rbm_layer_key, layer_label)); + }); }; diff --git a/rocnnet/trainer/dqn_trainer.hpp b/rocnnet/trainer/dqn_trainer.hpp index a9d9cb6dd..bdfb9522b 100644 --- a/rocnnet/trainer/dqn_trainer.hpp +++ b/rocnnet/trainer/dqn_trainer.hpp @@ -1,6 +1,7 @@ #include "ead/parse.hpp" +#include "ead/grader.hpp" -#include "rocnnet/modl/mlp.hpp" +#include "rocnnet/modl/model.hpp" #ifndef MODL_DQN_TRAINER_HPP #define MODL_DQN_TRAINER_HPP @@ -8,72 +9,8 @@ namespace trainer { -struct DQNTrainingContext final : public modl::iTrainingContext +struct DQNTrainingContext final { - void marshal_layer (cortenn::Layer& out_layer) const override - { - assert(nullptr != next_output_); - cortenn::DQTrainerState* state = out_layer.mutable_dqn_ctx(); - - cortenn::Graph* target = state->mutable_target_graph(); - pbm::GraphSaver saver; - next_output_->get_tensor()->accept(saver); - saver.save(*target, target_qnet_->list_bases()); - - state->set_actions_executed(actions_executed_); - state->set_trained_iteration(iteration_); - state->set_ntrained_called(n_train_called_); - state->set_nstored_called(n_store_called_); - - for (const ExpBatch& exbatch : experiences_) - { - cortenn::DQTrainerState_ExpBatch* batch = - state->add_experiences(); - - google::protobuf::RepeatedField obs( - exbatch.observation_.begin(), exbatch.observation_.end()); - batch->mutable_observation()->Swap(&obs); - - google::protobuf::RepeatedField new_obs( - exbatch.new_observation_.begin(), - exbatch.new_observation_.end()); - batch->mutable_new_observation()->Swap(&new_obs); - - batch->set_action_idx(exbatch.action_idx_); - batch->set_reward(exbatch.reward_); - } - } - - void unmarshal_layer (const cortenn::Layer& in_layer) override - { - const cortenn::DQTrainerState& state = in_layer.dqn_ctx(); - - const cortenn::Graph& target_graph = state.target_graph(); - pbm::GraphInfo info; - pbm::load_graph(info, target_graph); - - target_qnet_ = std::make_shared(info, "target"); - - actions_executed_ = state.actions_executed(); - iteration_ = state.trained_iteration(); - n_train_called_ = state.ntrained_called(); - n_store_called_ = state.nstored_called(); - - auto& exps = state.experiences(); - for (const cortenn::DQTrainerState_ExpBatch& batch : exps) - { - auto obs = batch.observation(); - auto new_obs = batch.new_observation(); - - experiences_.push_back(ExpBatch{ - std::vector(obs.begin(), obs.end()), - batch.action_idx(), - batch.reward(), - std::vector(new_obs.begin(), new_obs.end()), - }); - } - } - // experience replay struct ExpBatch { @@ -94,13 +31,13 @@ struct DQNTrainingContext final : public modl::iTrainingContext std::vector experiences_; // target network - modl::MLPptrT target_qnet_ = nullptr; + modl::SeqModelptrT target_model_ = nullptr; // train fanout: shape ead::NodeptrT next_output_ = nullptr; }; -struct DQNInfo +struct DQNInfo final { DQNInfo (size_t train_interval = 5, PybindT rand_action_prob = 0.05, @@ -108,7 +45,7 @@ struct DQNInfo PybindT target_update_rate = 0.01, PybindT exploration_period = 1000, size_t store_interval = 5, - uint8_t mini_batch_size = 32, + ade::DimT mini_batch_size = 32, size_t max_exp = 30000) : train_interval_(train_interval), rand_action_prob_(rand_action_prob), @@ -126,37 +63,132 @@ struct DQNInfo PybindT exploration_period_ = 1000; // memory parameters size_t store_interval_ = 5; - uint8_t mini_batch_size_ = 32; + ade::DimT mini_batch_size_ = 32; size_t max_exp_ = 30000; }; -struct DQNTrainer +struct DQNTrainer final { - DQNTrainer (modl::MLPptrT brain, - modl::NonLinearsT nonlinearities, - ead::iSession& sess, - eqns::ApproxF update, DQNInfo param, - DQNTrainingContext ctx) : + DQNTrainer (modl::SequentialModel& model, + ead::iSession& sess, eqns::ApproxF update, DQNInfo param, + eqns::NodeUnarF gradprocess = eqns::NodeUnarF(eqns::identity), + DQNTrainingContext ctx = DQNTrainingContext()) : sess_(&sess), params_(param), - source_qnet_(brain), + source_model_(model), ctx_(ctx) { - initialize(nonlinearities, update); - } + if (nullptr == ctx_.target_model_) + { + ctx_.target_model_ = modl::SeqModelptrT(model.clone("target_")); + } - DQNTrainer (modl::MLPptrT brain, - modl::NonLinearsT nonlinearities, - ead::iSession& sess, - eqns::ApproxF update, DQNInfo param) : - sess_(&sess), - params_(param), - source_qnet_(brain) - { - ctx_.target_qnet_ = std::make_shared(*brain); - ctx_.target_qnet_->label_ += "_target"; + input_ = ead::make_variable_scalar(0.0, ade::Shape({ + (ade::DimT) source_model_.get_ninput()}), "observation"); + train_input_ = ead::make_variable_scalar(0.0, ade::Shape({ + (ade::DimT) source_model_.get_ninput(), + params_.mini_batch_size_}), "train_observation"); + next_input_ = ead::make_variable_scalar(0.0, ade::Shape({ + (ade::DimT) source_model_.get_ninput(), + params_.mini_batch_size_}), "next_observation"); + next_output_mask_ = ead::make_variable_scalar(0.0, + ade::Shape({params_.mini_batch_size_}), + "next_observation_mask"); + reward_ = ead::make_variable_scalar(0.0, + ade::Shape({params_.mini_batch_size_}), "rewards"); + output_mask_ = ead::make_variable_scalar(0.0, + ade::Shape({(ade::DimT) source_model_.get_noutput(), + params_.mini_batch_size_}), "action_mask"); + + // forward action score computation + output_ = source_model_.connect(ead::convert_to_node(input_)); + + train_out_ = source_model_.connect( + ead::convert_to_node(train_input_)); + + // predicting target future rewards + ctx_.next_output_ = ctx_.target_model_->connect( + ead::convert_to_node(next_input_)); + + auto target_values = tenncor::mul( + tenncor::reduce_max_1d(ctx_.next_output_, 0), + ead::convert_to_node(next_output_mask_)); + future_reward_ = tenncor::add(ead::convert_to_node(reward_), + tenncor::mul( + ead::make_constant_scalar(params_.discount_rate_, + target_values->shape()), + target_values)); // reward for each instance in batch + + // prediction error + auto masked_output_score = tenncor::reduce_sum_1d( + tenncor::mul(train_out_, ead::convert_to_node(output_mask_)), 0); + prediction_error_ = tenncor::reduce_mean(tenncor::square( + tenncor::sub(masked_output_score, future_reward_))); + + // updates for source network + ade::TensT source_contents = source_model_.get_contents(); + eqns::VarErrsT source_vars; + for (auto tens : source_contents) + { + if (auto var = std::dynamic_pointer_cast< + ead::Variable>(tens)) + { + auto varnode = std::make_shared>(var); + source_vars.push_back({ + varnode, + gradprocess(ead::derive(prediction_error_, ead::convert_to_node(varnode))) + }); + } + } + updates_ = update(source_vars); - initialize(nonlinearities, update); + // update target network + ade::TensT target_contents = ctx_.target_model_->get_contents(); + size_t nvars = source_vars.size(); + std::vector> target_vars; + target_vars.reserve(nvars); + for (auto tens : target_contents) + { + if (auto var = std::dynamic_pointer_cast< + ead::Variable>(tens)) + { + target_vars.push_back( + std::make_shared>(var)); + } + } + + eqns::AssignsT target_assigns; + for (size_t i = 0; i < nvars; i++) + { + // this is equivalent to target = (1-alpha) * target + alpha * source + auto target = ead::convert_to_node(target_vars[i]); + auto source = ead::convert_to_node(source_vars[i].first); + auto diff = tenncor::sub(target, source); + auto target_update_rate = ead::make_constant_scalar( + params_.target_update_rate_, diff->shape()); + + auto target_next = tenncor::sub(target, tenncor::mul( + target_update_rate, diff)); + target_assigns.push_back(eqns::VarAssign{ + fmts::sprintf("target_grad_%s", + target_vars[i]->get_label().c_str()), + target_vars[i], target_next}); + } + updates_.push_back(target_assigns); + + ade::TensT track_batch = { + prediction_error_->get_tensor(), + train_out_->get_tensor(), + output_->get_tensor(), + }; + for (eqns::AssignsT& assigns : updates_) + { + for (eqns::VarAssign& assign : assigns) + { + track_batch.push_back(assign.source_->get_tensor()); + } + } + sess_->track(track_batch); } uint8_t action (std::vector& input) @@ -166,7 +198,7 @@ struct DQNTrainer // perform random exploration action if (get_random() < exploration) { - return std::floor(get_random() * source_qnet_->get_noutput()); + return std::floor(get_random() * source_model_.get_noutput()); } input_->assign(input.data(), input_->shape()); sess_->update({input_->get_tensor().get()}); @@ -222,7 +254,7 @@ struct DQNTrainer batch.observation_.begin(), batch.observation_.end()); { std::vector local_act_mask( - source_qnet_->get_noutput(), 0); + source_model_.get_noutput(), 0); local_act_mask[batch.action_idx_] = 1.0; action_mask.insert(action_mask.end(), local_act_mask.begin(), local_act_mask.end()); @@ -231,7 +263,7 @@ struct DQNTrainer if (batch.new_observation_.empty()) { new_states.insert(new_states.end(), - source_qnet_->get_ninput(), 0); + source_model_.get_ninput(), 0); new_states_mask.push_back(0); } else @@ -277,12 +309,6 @@ struct DQNTrainer return ctx_.iteration_; } - bool save (std::ostream& outs) - { - return modl::save(outs, - output_->get_tensor(), source_qnet_.get(), &ctx_); - } - // === forward computation === // fanin: shape ead::VarptrT input_ = nullptr; @@ -303,120 +329,6 @@ struct DQNTrainer ead::iSession* sess_; private: - void initialize (modl::NonLinearsT nonlinearities, - eqns::ApproxF update) - { - input_ = ead::make_variable_scalar(0.0, - ade::Shape({source_qnet_->get_ninput()}), "observation"); - train_input_ = ead::make_variable_scalar(0.0, - ade::Shape({source_qnet_->get_ninput(), - params_.mini_batch_size_}), "train_observation"); - next_input_ = ead::make_variable_scalar(0.0, - ade::Shape({source_qnet_->get_ninput(), - params_.mini_batch_size_}), "next_observation"); - next_output_mask_ = ead::make_variable_scalar(0.0, - ade::Shape({params_.mini_batch_size_}), - "next_observation_mask"); - reward_ = ead::make_variable_scalar(0.0, - ade::Shape({params_.mini_batch_size_}), "rewards"); - output_mask_ = ead::make_variable_scalar(0.0, - ade::Shape({source_qnet_->get_noutput(), - params_.mini_batch_size_}), "action_mask"); - - // forward action score computation - output_ = (*source_qnet_)(ead::convert_to_node(input_), - nonlinearities); - - train_out_ = (*source_qnet_)( - ead::convert_to_node(train_input_), nonlinearities); - - // predicting target future rewards - ctx_.next_output_ = (*ctx_.target_qnet_)( - ead::convert_to_node(next_input_), nonlinearities); - - auto target_values = tenncor::mul( - tenncor::reduce_max_1d(ctx_.next_output_, 0), - ead::convert_to_node(next_output_mask_)); - future_reward_ = tenncor::add(ead::convert_to_node(reward_), - tenncor::mul( - ead::make_constant_scalar(params_.discount_rate_, - target_values->shape()), - target_values)); // reward for each instance in batch - - // prediction error - auto masked_output_score = tenncor::reduce_sum_1d( - tenncor::mul(train_out_, ead::convert_to_node(output_mask_)), 0); - prediction_error_ = tenncor::reduce_mean(tenncor::square( - tenncor::sub(masked_output_score, future_reward_))); - - // updates for source network - pbm::PathedMapT svmap = source_qnet_->list_bases(); - std::unordered_map labelled_indices; - eqns::VariablesT source_vars; - for (auto vpair : svmap) - { - if (auto var = std::dynamic_pointer_cast< - ead::Variable>(vpair.first)) - { - auto label = fmts::to_string( - vpair.second.begin(), vpair.second.end()); - labelled_indices.emplace(label, source_vars.size()); - - source_vars.push_back( - std::make_shared>(var)); - } - } - updates_ = update(prediction_error_, source_vars); - - // update target network - pbm::PathedMapT tvmap = ctx_.target_qnet_->list_bases(); - size_t nvars = source_vars.size(); - eqns::VariablesT target_vars(nvars); - for (auto vpair : tvmap) - { - if (auto var = std::dynamic_pointer_cast< - ead::Variable>(vpair.first)) - { - auto label = fmts::to_string( - vpair.second.begin(), vpair.second.end()); - target_vars[labelled_indices[label]] = - std::make_shared>(var); - } - } - eqns::AssignsT target_assigns; - for (size_t i = 0; i < nvars; i++) - { - // this is equivalent to target = (1-alpha) * target + alpha * source - auto target = ead::convert_to_node(target_vars[i]); - auto source = ead::convert_to_node(source_vars[i]); - auto diff = tenncor::sub(target, source); - auto target_update_rate = ead::make_constant_scalar( - params_.target_update_rate_, diff->shape()); - - auto target_next = tenncor::sub(target, tenncor::mul( - target_update_rate, diff)); - target_assigns.push_back(eqns::VarAssign{ - fmts::sprintf("target_grad_%s", - target_vars[i]->get_label().c_str()), - target_vars[i], target_next}); - } - updates_.push_back(target_assigns); - - ade::TensT track_batch = { - prediction_error_->get_tensor(), - train_out_->get_tensor(), - output_->get_tensor(), - }; - for (eqns::AssignsT& assigns : updates_) - { - for (eqns::VarAssign& assign : assigns) - { - track_batch.push_back(assign.source_->get_tensor()); - } - } - sess_->track(track_batch); - } - PybindT linear_annealing (PybindT initial_prob) const { if (ctx_.actions_executed_ >= params_.exploration_period_) @@ -449,7 +361,7 @@ struct DQNTrainer DQNInfo params_; // source network - modl::MLPptrT source_qnet_; + modl::SequentialModel& source_model_; // === prediction computation === // train_fanin: shape diff --git a/rocnnet/trainer/mlp_trainer.hpp b/rocnnet/trainer/mlp_trainer.hpp index 49a798474..5d759dc6d 100644 --- a/rocnnet/trainer/mlp_trainer.hpp +++ b/rocnnet/trainer/mlp_trainer.hpp @@ -1,4 +1,6 @@ -#include "rocnnet/modl/mlp.hpp" +#include "ead/grader.hpp" + +#include "rocnnet/modl/model.hpp" #include "rocnnet/eqns/err_approx.hpp" @@ -9,57 +11,47 @@ namespace trainer { // Normal default context that only stores the number of iterations -struct TrainingContext final : public modl::iTrainingContext +struct TrainingContext final { - void marshal_layer (cortenn::Layer& out_layer) const override - { - cortenn::ItTrainerState* state = out_layer.mutable_it_ctx(); - state->set_iterations(n_iterations_); - } - - void unmarshal_layer (const cortenn::Layer& in_layer) override - { - const cortenn::ItTrainerState& state = in_layer.it_ctx(); - n_iterations_ = state.iterations(); - } - size_t n_iterations_ = 0; }; // MLPTrainer does not own anything -struct MLPTrainer +struct MLPTrainer final { - MLPTrainer (modl::MLPptrT brain, - modl::NonLinearsT nonlinearities, - ead::iSession& sess, - eqns::ApproxF update, uint8_t batch_size, + MLPTrainer (modl::SequentialModel& model, + ead::iSession& sess, eqns::ApproxF update, ade::DimT batch_size, + eqns::NodeUnarF gradprocess = eqns::NodeUnarF(eqns::identity), TrainingContext ctx = TrainingContext()) : batch_size_(batch_size), - train_in_(ead::make_variable_scalar(0.0, - ade::Shape({brain->get_ninput(), batch_size}), "train_in")), - brain_(brain), + train_in_(ead::make_variable_scalar(0.0, ade::Shape({ + (ade::DimT) model.get_ninput(), batch_size}), "train_in")), + model_(model), sess_(&sess), ctx_(ctx) { - train_out_ = (*brain_)( - ead::convert_to_node(train_in_), nonlinearities); - expected_out_ = ead::make_variable_scalar(0.0, - ade::Shape({brain_->get_noutput(), batch_size}), "expected_out"); + train_out_ = model_.connect( + ead::convert_to_node(train_in_)); + expected_out_ = ead::make_variable_scalar(0.0, ade::Shape({ + (ade::DimT) model.get_noutput(), batch_size}), "expected_out"); error_ = tenncor::square( tenncor::sub(ead::convert_to_node(expected_out_), train_out_)); - pbm::PathedMapT vmap = brain_->list_bases(); - eqns::VariablesT vars; - for (auto vpair : vmap) + auto contents = model_.get_contents(); + eqns::VarErrsT vars; + for (auto tens : contents) { if (auto var = std::dynamic_pointer_cast< - ead::Variable>(vpair.first)) + ead::Variable>(tens)) { - vars.push_back( - std::make_shared>(var)); + auto varnode = std::make_shared>(var); + vars.push_back({ + varnode, + gradprocess(ead::derive(error_, ead::convert_to_node(varnode))) + }); } } - updates_ = update(error_, vars); + updates_ = update(vars); ade::TensT track_batch = { train_out_->get_tensor(), @@ -78,8 +70,8 @@ struct MLPTrainer void train (std::vector& train_in, std::vector& expected_out) { - size_t insize = brain_->get_ninput(); - size_t outsize = brain_->get_noutput(); + size_t insize = model_.get_ninput(); + size_t outsize = model_.get_noutput(); if (train_in.size() != insize * batch_size_) { logs::fatalf("training vector size (%d) does not match " @@ -107,16 +99,11 @@ struct MLPTrainer ++ctx_.n_iterations_; } - bool save (std::ostream& outs) - { - return modl::save(outs, - error_->get_tensor(), brain_.get(), &ctx_); - } + modl::SequentialModel& model_; uint8_t batch_size_; ead::VarptrT train_in_; ead::VarptrT expected_out_; - modl::MLPptrT brain_; ead::NodeptrT train_out_; ead::NodeptrT error_; diff --git a/rocnnet/trainer/old_rbm_trainer.hpp b/rocnnet/trainer/old_rbm_trainer.hpp new file mode 100644 index 000000000..d34635e63 --- /dev/null +++ b/rocnnet/trainer/old_rbm_trainer.hpp @@ -0,0 +1,228 @@ +#include "rocnnet/modl/rbm.hpp" + +#ifndef OLD_MODL_RBM_TRAINER_HPP +#define OLD_MODL_RBM_TRAINER_HPP + +namespace trainer +{ + +// recreate input using hidden distribution +// output shape of input->shape() +ead::NodeptrT reconstruct_visible (modl::RBM& rbm, + ead::NodeptrT input, modl::NonLinearsT nonlins) +{ + ead::NodeptrT hidden_dist = rbm(input, nonlins); + ead::NodeptrT hidden_sample = tenncor::random::rand_binom_one(hidden_dist); + return rbm.prop_down(hidden_sample, nonlins); +} + +ead::NodeptrT reconstruct_hidden (modl::RBM& rbm, + ead::NodeptrT hidden, modl::NonLinearsT nonlins) +{ + ead::NodeptrT visible_dist = rbm.prop_down(hidden, nonlins); + ead::NodeptrT visible_sample = tenncor::random::rand_binom_one(visible_dist); + return rbm(visible_sample, nonlins); +} + +struct RBMTrainer +{ + RBMTrainer (modl::RBMptrT brain, + modl::NonLinearsT nonlinearities, + ead::iSession& sess, + ead::VarptrT persistent, + uint8_t batch_size, + PybindT learning_rate = 1e-3, + size_t n_cont_div = 1, + ead::NodeptrT train_in = nullptr) : + brain_(brain), + sess_(&sess) + { + if (brain->layers_.size() != 1) + { + logs::error("rbm training only operates on the first layer"); + } + ead::VarptrT weight = brain_->layers_[0].weight_->var_; + ead::VarptrT hbias = brain_->layers_[0].hbias_->var_; + ead::VarptrT vbias = brain_->layers_[0].vbias_->var_; + + if (nullptr == train_in) + { + train_in_ = ead::convert_to_node( + ead::make_variable_scalar(0.0, ade::Shape({ + brain->get_ninput(), + batch_size, + }), "train_in")); + } + else + { + train_in_ = train_in; + } + // if persistent not available use Contrastive Divergence (CD) + if (nullptr == persistent) + { + persistent_ = tenncor::random::rand_binom_one( + (*brain)(train_in_, nonlinearities)); + } + // otherwise use Persistent CD + // (initialize from the old state of the chain) + else + { + persistent_ = persistent; + } + + // chain length is n_cont_div + auto chain_segment = tenncor::random::rand_binom_one( + reconstruct_hidden(*brain, persistent_, nonlinearities)); + assert(n_cont_div > 0); + for (size_t i = 0; i < n_cont_div - 1; ++i) + { + chain_segment = tenncor::random::rand_binom_one( + reconstruct_hidden(*brain, chain_segment, nonlinearities)); + } + + // use operational optimization to recover presig and vis nodes + auto presig_vis = tenncor::nn::fully_connect( + {chain_segment}, + {tenncor::transpose(ead::convert_to_node(weight))}, + ead::convert_to_node(vbias)); + auto final_visible_dist = tenncor::sigmoid(presig_vis); + auto chain_end = tenncor::random::rand_binom_one(final_visible_dist); + + cost_ = tenncor::sub(tenncor::reduce_mean(free_energy(train_in_)), + tenncor::reduce_mean(free_energy(chain_end))); + + auto dW = ead::derive(cost_, ead::convert_to_node(weight)); + auto dhb = ead::derive(cost_, ead::convert_to_node(hbias)); + auto dvb = ead::derive(cost_, ead::convert_to_node(vbias)); + + auto next_weight = tenncor::sub(ead::convert_to_node(weight), + tenncor::mul(ead::make_constant_scalar( + learning_rate, dW->shape()), dW)); + auto next_hbias = tenncor::sub(ead::convert_to_node(hbias), + tenncor::mul(ead::make_constant_scalar( + learning_rate, dhb->shape()), dhb)); + auto next_vbias = tenncor::sub(ead::convert_to_node(vbias), + tenncor::mul(ead::make_constant_scalar( + learning_rate, dvb->shape()), dvb)); + eqns::AssignsT assigns = { + eqns::VarAssign{"", weight, next_weight}, + eqns::VarAssign{"", hbias, next_hbias}, + eqns::VarAssign{"", vbias, next_vbias}, + }; + + if (nullptr == persistent) + { + // reconstruction cost + monitoring_cost_ = get_reconstruction_cost( + train_in_, final_visible_dist); + } + else + { + // pseudo-likelihood + auto next_persistent = tenncor::random::rand_binom_one( + reconstruct_hidden(*brain, chain_segment, nonlinearities)); + assigns.push_back( + eqns::VarAssign{"", persistent, next_persistent}); + + monitoring_cost_ = get_pseudo_likelihood_cost(train_in_); + } + updates_.push_back(assigns); + + ade::TensT track_batch; + track_batch.reserve(assigns.size()); + std::transform(assigns.begin(), assigns.end(), + std::back_inserter(track_batch), + [](eqns::VarAssign& assign) + { + return assign.source_->get_tensor(); + }); + sess_->track(track_batch); + } + + // input a 2-D vector of shape return monitor cost + PybindT train (std::vector& train_in) + { + auto var = dynamic_cast*>(train_in_.get()); + if (nullptr == var) + { + logs::fatal("cannot train RBM with non-native input"); + } + ade::Shape train_shape = var->shape(); + var->assign(train_in.data(), train_shape); + assign_groups(updates_, + [this](std::unordered_set& updated) + { + this->sess_->update(updated); + }); + + return monitoring_cost_->data()[0] / train_shape.at(1); + } + + ead::NodeptrT train_in_; + modl::RBMptrT brain_; + ead::NodeptrT cost_; + ead::NodeptrT monitoring_cost_; + + eqns::AssignGroupsT updates_; + ead::iSession* sess_; + +private: + ead::NodeptrT get_pseudo_likelihood_cost (ead::NodeptrT input) + { + const ade::Shape& shape = input->shape(); + std::vector zeros(shape.n_elems(), 0); + zeros[0] = 1; + auto one_i = ead::make_constant(zeros.data(), shape); + + ead::NodeptrT xi = tenncor::round(input); // xi = [0|1, ...] + ead::NodeptrT xi_flip = tenncor::sub(one_i, xi); + + ead::NodeptrT fe_xi = free_energy(xi); + ead::NodeptrT fe_xi_flip = free_energy(xi_flip); + + return tenncor::reduce_mean(tenncor::mul( + ead::make_constant_scalar(brain_->get_ninput(), fe_xi->shape()), + tenncor::log(tenncor::sigmoid(tenncor::sub(fe_xi_flip, fe_xi))))); + } + + ead::NodeptrT get_reconstruction_cost ( + ead::NodeptrT input, ead::NodeptrT visible_dist) + { + ead::NodeptrT p_success = tenncor::mul( + input, tenncor::log(visible_dist)); + ead::NodeptrT p_not = tenncor::mul( + tenncor::sub(ead::make_constant_scalar( + 1, input->shape()), input), + tenncor::log(tenncor::sub(ead::make_constant_scalar( + 1, visible_dist->shape()), visible_dist))); + return tenncor::reduce_mean(tenncor::reduce_sum_1d( + tenncor::transpose(tenncor::add(p_success, p_not)), 1)); + } + + ead::NodeptrT free_energy (ead::NodeptrT sample) + { + ead::VarptrT weight = brain_->layers_[0].weight_->var_; + ead::VarptrT hbias = brain_->layers_[0].hbias_->var_; + ead::VarptrT vbias = brain_->layers_[0].vbias_->var_; + + auto vbias_term = tenncor::matmul(sample, + tenncor::transpose(ead::convert_to_node(vbias))); + // @ + z -> + auto wx_b = tenncor::nn::fully_connect( + {sample}, + {ead::convert_to_node(weight)}, + ead::convert_to_node(hbias)); + auto hidden_term = tenncor::reduce_sum( + tenncor::log(tenncor::add( + ead::make_constant_scalar(1, wx_b->shape()), + tenncor::exp(wx_b) + )), 0, 1); + return tenncor::neg(tenncor::add(vbias_term, hidden_term)); + } + + ead::NodeptrT persistent_; +}; + +} + +#endif // OLD_MODL_RBM_TRAINER_HPP diff --git a/rocnnet/trainer/rbm_trainer.hpp b/rocnnet/trainer/rbm_trainer.hpp index 6a11e4ecd..fa4ab28db 100644 --- a/rocnnet/trainer/rbm_trainer.hpp +++ b/rocnnet/trainer/rbm_trainer.hpp @@ -1,226 +1,189 @@ #include "rocnnet/modl/rbm.hpp" +#include "rocnnet/eqns/err_approx.hpp" + #ifndef MODL_RBM_TRAINER_HPP #define MODL_RBM_TRAINER_HPP namespace trainer { -// recreate input using hidden distribution -// output shape of input->shape() -ead::NodeptrT reconstruct_visible (modl::RBM& rbm, - ead::NodeptrT input, modl::NonLinearsT nonlins) +// Bernoulli RBM "error approximation" +// for each (x, err) in leaves +// momentum_next ~ χ * momentum_cur + η * (1 - χ) / err.shape[0] * err +// x_next = x_curr + next_momentum +// +// where η is the learning rate, and χ is discount_factor +eqns::AssignGroupsT bbernoulli_approx (const eqns::VarErrsT& leaves, + PybindT learning_rate, PybindT discount_factor, + std::string root_label = "") { - ead::NodeptrT hidden_dist = rbm(input, nonlins); - ead::NodeptrT hidden_sample = tenncor::random::rand_binom_one(hidden_dist); - return rbm.prop_down(hidden_sample, nonlins); -} + // assign momentums before leaves + eqns::AssignsT assigns; + for (size_t i = 0, nleaves = leaves.size(); i < nleaves; ++i) + { + auto leaf_node = ead::convert_to_node(leaves[i].first); + auto err = leaves[i].second; -ead::NodeptrT reconstruct_hidden (modl::RBM& rbm, - ead::NodeptrT hidden, modl::NonLinearsT nonlins) -{ - ead::NodeptrT visible_dist = rbm.prop_down(hidden, nonlins); - ead::NodeptrT visible_sample = tenncor::random::rand_binom_one(visible_dist); - return rbm(visible_sample, nonlins); + auto shape = err->shape(); + std::vector slist(shape.begin(), shape.end()); + auto it = slist.rbegin(), et = slist.rend(); + while (it != et && *it == 1) + { + ++it; + } + ade::DimT shape_factor = it == et ? 1 : *it; + auto momentum = ead::make_variable_scalar(0, + err->shape(), leaves[i].first->get_label() + "_momentum"); + auto momentum_next = tenncor::add( + tenncor::mul( + ead::make_constant_scalar(discount_factor, momentum->shape()), + ead::convert_to_node(momentum)), + tenncor::mul( + ead::make_constant_scalar(learning_rate * + (1 - discount_factor) / shape_factor, err->shape()), + err)); + auto leaf_next = tenncor::add(leaf_node, momentum_next); + + assigns.push_back(eqns::VarAssign{ + fmts::sprintf("bbernoulli_momentum::%s_momentum_%s", + root_label.c_str(), leaves[i].first->get_label().c_str()), + momentum, momentum_next}); + assigns.push_back(eqns::VarAssign{ + fmts::sprintf("bbernoulli_momentum::%s_grad_%s", + root_label.c_str(), leaves[i].first->get_label().c_str()), + leaves[i].first, leaf_next}); + } + return {assigns}; } -struct RBMTrainer +using ErrorF = std::function(ead::NodeptrT,ead::NodeptrT)>; + +struct BernoulliRBMTrainer final { - RBMTrainer (modl::RBMptrT brain, - modl::NonLinearsT nonlinearities, + BernoulliRBMTrainer (modl::RBM& model, ead::iSession& sess, - ead::VarptrT persistent, - uint8_t batch_size, - PybindT learning_rate = 1e-3, - size_t n_cont_div = 1, - ead::NodeptrT train_in = nullptr) : - brain_(brain), - sess_(&sess) + ade::DimT batch_size, + PybindT learning_rate, + PybindT discount_factor, + ErrorF err_func = ErrorF()) : + model_(model), sess_(&sess), batch_size_(batch_size) { - if (brain->layers_.size() != 1) - { - logs::error("rbm training only operates on the first layer"); - } - ead::VarptrT weight = brain_->layers_[0].weight_->var_; - ead::VarptrT hbias = brain_->layers_[0].hbias_->var_; - ead::VarptrT vbias = brain_->layers_[0].vbias_->var_; - - if (nullptr == train_in) - { - train_in_ = ead::convert_to_node( - ead::make_variable_scalar(0.0, ade::Shape({ - brain->get_ninput(), - batch_size, - }), "train_in")); - } - else - { - train_in_ = train_in; - } - // if persistent not available use Contrastive Divergence (CD) - if (nullptr == persistent) - { - persistent_ = tenncor::random::rand_binom_one( - (*brain)(train_in_, nonlinearities)); - } - // otherwise use Persistent CD - // (initialize from the old state of the chain) - else - { - persistent_ = persistent; - } + visible_ = ead::make_variable_scalar(0, + ade::Shape({(ade::DimT) model.get_ninput(), batch_size})); + + hidden_sample_ = model.connect(visible_); + visible_sample_ = model.backward_connect( + tenncor::random::rand_binom_one(hidden_sample_)); + + auto hidden_reconp = model.connect(visible_sample_); + + auto grad_w = tenncor::sub( + tenncor::matmul(tenncor::transpose( + ead::convert_to_node(visible_)), hidden_sample_), + tenncor::matmul(tenncor::transpose( + visible_sample_), hidden_reconp)); + auto grad_hb = tenncor::reduce_mean_1d( + tenncor::sub(hidden_sample_, hidden_reconp), 1); + auto grad_vb = tenncor::reduce_mean_1d( + tenncor::sub(ead::convert_to_node(visible_), visible_sample_), 1); + + auto contents = model.get_contents(); + std::vector> vars; + vars.reserve(contents.size()); + std::transform(contents.begin(), contents.end(), + std::back_inserter(vars), + [](ade::TensptrT tens) + { + return std::make_shared>( + std::static_pointer_cast>(tens)); + }); + eqns::VarErrsT varerrs = { + {vars[0], grad_w}, + {vars[1], grad_hb}, + {vars[3], grad_vb}, + }; - // chain length is n_cont_div - auto chain_segment = tenncor::random::rand_binom_one( - reconstruct_hidden(*brain, persistent_, nonlinearities)); - assert(n_cont_div > 0); - for (size_t i = 0; i < n_cont_div - 1; ++i) - { - chain_segment = tenncor::random::rand_binom_one( - reconstruct_hidden(*brain, chain_segment, nonlinearities)); - } + updates_ = bbernoulli_approx(varerrs, learning_rate, discount_factor); - // use operational optimization to recover presig and vis nodes - auto presig_vis = tenncor::nn::fully_connect( - {chain_segment}, - {tenncor::transpose(ead::convert_to_node(weight))}, - ead::convert_to_node(vbias)); - auto final_visible_dist = tenncor::sigmoid(presig_vis); - auto chain_end = tenncor::random::rand_binom_one(final_visible_dist); - - cost_ = tenncor::sub(tenncor::reduce_mean(free_energy(train_in_)), - tenncor::reduce_mean(free_energy(chain_end))); - - auto dW = ead::derive(cost_, ead::convert_to_node(weight)); - auto dhb = ead::derive(cost_, ead::convert_to_node(hbias)); - auto dvb = ead::derive(cost_, ead::convert_to_node(vbias)); - - auto next_weight = tenncor::sub(ead::convert_to_node(weight), - tenncor::mul(ead::make_constant_scalar( - learning_rate, dW->shape()), dW)); - auto next_hbias = tenncor::sub(ead::convert_to_node(hbias), - tenncor::mul(ead::make_constant_scalar( - learning_rate, dhb->shape()), dhb)); - auto next_vbias = tenncor::sub(ead::convert_to_node(vbias), - tenncor::mul(ead::make_constant_scalar( - learning_rate, dvb->shape()), dvb)); - eqns::AssignsT assigns = { - eqns::VarAssign{"", weight, next_weight}, - eqns::VarAssign{"", hbias, next_hbias}, - eqns::VarAssign{"", vbias, next_vbias}, + ade::TensT to_track = { + hidden_sample_->get_tensor(), + visible_sample_->get_tensor(), }; - - if (nullptr == persistent) + to_track.reserve(updates_.size() + 1); + if (err_func) { - // reconstruction cost - monitoring_cost_ = get_reconstruction_cost( - train_in_, final_visible_dist); + error_ = err_func(ead::convert_to_node(visible_), visible_sample_); + to_track.push_back(error_->get_tensor()); } - else - { - // pseudo-likelihood - auto next_persistent = tenncor::random::rand_binom_one( - reconstruct_hidden(*brain, chain_segment, nonlinearities)); - assigns.push_back( - eqns::VarAssign{"", persistent, next_persistent}); - - monitoring_cost_ = get_pseudo_likelihood_cost(train_in_); - } - updates_.push_back(assigns); - ade::TensT track_batch; - track_batch.reserve(assigns.size()); - std::transform(assigns.begin(), assigns.end(), - std::back_inserter(track_batch), - [](eqns::VarAssign& assign) + for (auto& assigns : updates_) + { + for (auto& assign : assigns) { - return assign.source_->get_tensor(); - }); - sess_->track(track_batch); + auto source = assign.source_->get_tensor(); + assign_sources_.emplace(source.get()); + to_track.push_back(source); + } + } + sess.track(to_track); } - // input a 2-D vector of shape return monitor cost + // Return error after training with train_in + // if error is set, otherwise -1 PybindT train (std::vector& train_in) { - auto var = dynamic_cast*>(train_in_.get()); - if (nullptr == var) + size_t insize = model_.get_ninput(); + if (train_in.size() != insize * batch_size_) { - logs::fatal("cannot train RBM with non-native input"); + logs::fatalf("training vector size (%d) does not match " + "input size (%d) * batchsize (%d)", train_in.size(), + insize, batch_size_); } - ade::Shape train_shape = var->shape(); - var->assign(train_in.data(), train_shape); + visible_->assign(train_in.data(), visible_->shape()); + + sess_->update_target(assign_sources_, { + visible_->get_tensor().get(), + }); + + if (nullptr == error_) + { + assign_groups(updates_, + [this](ead::TensSetT& updated) + { + this->sess_->update(updated); + }); + return -1; + } + assign_groups(updates_, - [this](std::unordered_set& updated) + [this](ead::TensSetT& updated) { - this->sess_->update(updated); + this->sess_->update_target( + ead::TensSetT{this->error_->get_tensor().get()}, updated); }); - - return monitoring_cost_->data()[0] / train_shape.at(1); + return error_->data()[0]; } - ead::NodeptrT train_in_; - modl::RBMptrT brain_; - ead::NodeptrT cost_; - ead::NodeptrT monitoring_cost_; +private: + modl::RBM& model_; - eqns::AssignGroupsT updates_; - ead::iSession* sess_; + ead::VarptrT visible_ = nullptr; -private: - ead::NodeptrT get_pseudo_likelihood_cost (ead::NodeptrT input) - { - const ade::Shape& shape = input->shape(); - std::vector zeros(shape.n_elems(), 0); - zeros[0] = 1; - auto one_i = ead::make_constant(zeros.data(), shape); + ead::NodeptrT hidden_sample_ = nullptr; - ead::NodeptrT xi = tenncor::round(input); // xi = [0|1, ...] - ead::NodeptrT xi_flip = tenncor::sub(one_i, xi); + ead::NodeptrT visible_sample_ = nullptr; - ead::NodeptrT fe_xi = free_energy(xi); - ead::NodeptrT fe_xi_flip = free_energy(xi_flip); + ead::NodeptrT error_ = nullptr; - return tenncor::reduce_mean(tenncor::mul( - ead::make_constant_scalar(brain_->get_ninput(), fe_xi->shape()), - tenncor::log(tenncor::sigmoid(tenncor::sub(fe_xi_flip, fe_xi))))); - } + // === updates && optimizer === + eqns::AssignGroupsT updates_; - ead::NodeptrT get_reconstruction_cost ( - ead::NodeptrT input, ead::NodeptrT visible_dist) - { - ead::NodeptrT p_success = tenncor::mul( - input, tenncor::log(visible_dist)); - ead::NodeptrT p_not = tenncor::mul( - tenncor::sub(ead::make_constant_scalar( - 1, input->shape()), input), - tenncor::log(tenncor::sub(ead::make_constant_scalar( - 1, visible_dist->shape()), visible_dist))); - return tenncor::reduce_mean(tenncor::reduce_sum_1d( - tenncor::transpose(tenncor::add(p_success, p_not)), 1)); - } + ead::TensSetT assign_sources_; - ead::NodeptrT free_energy (ead::NodeptrT sample) - { - ead::VarptrT weight = brain_->layers_[0].weight_->var_; - ead::VarptrT hbias = brain_->layers_[0].hbias_->var_; - ead::VarptrT vbias = brain_->layers_[0].vbias_->var_; - - auto vbias_term = tenncor::matmul(sample, - tenncor::transpose(ead::convert_to_node(vbias))); - // @ + z -> - auto wx_b = tenncor::nn::fully_connect( - {sample}, - {ead::convert_to_node(weight)}, - ead::convert_to_node(hbias)); - auto hidden_term = tenncor::reduce_sum( - tenncor::log(tenncor::add( - ead::make_constant_scalar(1, wx_b->shape()), - tenncor::exp(wx_b) - )), 0, 1); - return tenncor::neg(tenncor::add(vbias_term, hidden_term)); - } + ead::iSession* sess_; - ead::NodeptrT persistent_; + size_t batch_size_; }; } diff --git a/tag/group.hpp b/tag/group.hpp index 70937e032..0547fb4cf 100644 --- a/tag/group.hpp +++ b/tag/group.hpp @@ -12,8 +12,6 @@ namespace tag using TensSetT = std::unordered_set; -const std::string groups_key = "groups"; - /// GroupTag define subgraphs/groups of nodes with a structural significance /// Groups are ordered tags, subsequent group tags /// (obtained through absorption) often denote supergraphs of prior groups @@ -36,13 +34,7 @@ struct GroupTag final : public iTag labels_.insert(olabels.begin(), olabels.end()); } - TagRepsT get_tags (void) const override - { - TagRepsT out; - out.emplace(groups_key, - std::vector(labels_.begin(), labels_.end())); - return out; - } + TagRepsT get_tags (void) const override; private: std::set labels_; @@ -75,7 +67,13 @@ struct GroupRegistry final GroupRegistry& get_group_reg (void); -void recursive_group_tag (ade::TensrefT tens, std::string group, +const std::string groups_key = get_reg().register_tagr("groups", +[](ade::TensrefT ref, std::string tag) +{ + get_group_reg().group_tag(ref, tag); +}); + +void recursive_group_tag (ade::TensptrT tens, std::string group, std::unordered_set stops, GroupRegistry& registry = get_group_reg()); diff --git a/tag/prop.hpp b/tag/prop.hpp index add5f2e8e..c4ad6628a 100644 --- a/tag/prop.hpp +++ b/tag/prop.hpp @@ -6,8 +6,6 @@ namespace tag { -const std::string props_key = "properties"; - // some property tags const std::string commutative_tag = "commutative"; @@ -30,13 +28,7 @@ struct PropTag final : public iTag labels_.insert(olabels.begin(), olabels.end()); } - TagRepsT get_tags (void) const override - { - TagRepsT out; - out.emplace(props_key, std::vector( - labels_.begin(), labels_.end())); - return out; - } + TagRepsT get_tags (void) const override; private: std::unordered_set labels_; @@ -54,22 +46,19 @@ struct PropertyRegistry final tag_reg_.add_tag(tens, TagptrT(new PropTag(property))); } - bool has_property (const ade::iTensor* tens, std::string property) - { - auto reps = tag_reg_.get_tags(tens); - auto it = reps.find(props_key); - if (reps.end() == it) - { - return false; - } - return estd::arr_has(it->second, property); - } + bool has_property (const ade::iTensor* tens, std::string property) const; TagRegistry& tag_reg_; }; PropertyRegistry& get_property_reg (void); +const std::string props_key = get_reg().register_tagr("properties", +[](ade::TensrefT ref, std::string property) +{ + get_property_reg().property_tag(ref, property); +}); + } #endif // TAG_PROP_HPP diff --git a/tag/src/group.cpp b/tag/src/group.cpp index 49b0cfa29..861148fc2 100644 --- a/tag/src/group.cpp +++ b/tag/src/group.cpp @@ -5,79 +5,30 @@ namespace tag { -using RefMapT = std::unordered_map; - size_t GroupTag::tag_id_ = typeid(GroupTag).hash_code(); +TagRepsT GroupTag::get_tags (void) const +{ + TagRepsT out; + out.emplace(groups_key, + std::vector(labels_.begin(), labels_.end())); + return out; +} + GroupRegistry& get_group_reg (void) { static GroupRegistry registry; return registry; } -struct Grouper final : public ade::iTraveler -{ - Grouper (std::string group, std::unordered_set stops, - GroupRegistry& registry) : - group_(group), - stops_(stops.begin(), stops.end()), - registry_(registry) {} - - /// Implementation of iTraveler - void visit (ade::iLeaf* leaf) override - { - if (false == estd::has(stops_, leaf)) - { - auto it = owners_.find(leaf); - if (owners_.end() == it) - { - logs::fatal("failed to get reference to leaf in group traveler"); - } - registry_.group_tag(it->second, group_); - } - } - - /// Implementation of iTraveler - void visit (ade::iFunctor* func) override - { - if (false == estd::has(stops_, func)) - { - auto it = owners_.find(func); - if (owners_.end() == it) - { - logs::fatal("failed to get reference to leaf in group traveler"); - } - auto& children = func->get_children(); - for (auto& child : children) - { - ade::TensptrT tens = child.get_tensor(); - owners_.emplace(tens.get(), tens); - tens->accept(*this); - } - registry_.group_tag(it->second, group_); - } - } - - RefMapT owners_; - - std::string group_; - - std::unordered_set stops_; - - GroupRegistry& registry_; -}; - -void recursive_group_tag (ade::TensrefT tens, std::string group, +void recursive_group_tag (ade::TensptrT tens, std::string group, std::unordered_set stops, GroupRegistry& registry) { - if (tens.expired()) - { - logs::fatal("cannot recursive group tag with expired tensor ref"); - } - Grouper trav(group, stops, registry); - auto tensor = tens.lock().get(); - trav.owners_.emplace(tensor, tens); - tensor->accept(trav); + recursive_tag(tens, stops, + [&](ade::TensrefT ref) + { + registry.group_tag(ref, group); + }); } void adjacencies (AdjMapT& out, ade::TensT roots, diff --git a/tag/src/prop.cpp b/tag/src/prop.cpp index c765bc97f..465d9093d 100644 --- a/tag/src/prop.cpp +++ b/tag/src/prop.cpp @@ -7,6 +7,25 @@ namespace tag size_t PropTag::tag_id_ = typeid(PropTag).hash_code(); +TagRepsT PropTag::get_tags (void) const +{ + TagRepsT out; + out.emplace(props_key, std::vector( + labels_.begin(), labels_.end())); + return out; +} + +bool PropertyRegistry::has_property (const ade::iTensor* tens, std::string property) const +{ + auto reps = tag_reg_.get_tags(tens); + auto it = reps.find(props_key); + if (reps.end() == it) + { + return false; + } + return estd::arr_has(it->second, property); +} + PropertyRegistry& get_property_reg (void) { static PropertyRegistry registry; diff --git a/tag/src/tag.cpp b/tag/src/tag.cpp index 1ab0d2ef1..a8c03f9f6 100644 --- a/tag/src/tag.cpp +++ b/tag/src/tag.cpp @@ -11,6 +11,65 @@ TagRegistry& get_reg (void) return registry; } +using RefMapT = std::unordered_map; + +struct Tagger final : public ade::iTraveler +{ + Tagger (std::unordered_set stops, + std::function tag_op) : + stops_(stops), tag_op_(tag_op) {} + + /// Implementation of iTraveler + void visit (ade::iLeaf* leaf) override + { + if (false == estd::has(stops_, leaf)) + { + auto it = owners_.find(leaf); + if (owners_.end() == it) + { + logs::fatal("failed to get reference to leaf in group traveler"); + } + tag_op_(it->second); + } + } + + /// Implementation of iTraveler + void visit (ade::iFunctor* func) override + { + if (false == estd::has(stops_, func)) + { + auto it = owners_.find(func); + if (owners_.end() == it) + { + logs::fatal("failed to get reference to leaf in group traveler"); + } + auto& children = func->get_children(); + for (auto& child : children) + { + ade::TensptrT tens = child.get_tensor(); + owners_.emplace(tens.get(), tens); + tens->accept(*this); + } + tag_op_(it->second); + } + } + + RefMapT owners_; + + std::unordered_set stops_; + + std::function tag_op_; +}; + +void recursive_tag (ade::TensptrT root, + std::unordered_set stops, + std::function tag_op) +{ + Tagger tagger(stops, tag_op); + tagger.owners_.emplace(root.get(), root); + root->accept(tagger); +} + } #endif diff --git a/tag/tag.hpp b/tag/tag.hpp index d8c361db5..e83d61638 100644 --- a/tag/tag.hpp +++ b/tag/tag.hpp @@ -130,6 +130,8 @@ inline bool operator == (const TensKey& lhs, const TensKey& rhs) return hasher(lhs) == hasher(rhs); } +using TagrF = std::function; + // todo: move tag registry to some session that claims global context // todo: make an interface for this struct TagRegistry final @@ -183,11 +185,75 @@ struct TagRegistry final registry_.erase(TensKey(source)); } + /// Return tagger associated to TagRepsT key + TagrF tagr_by_key (std::string tag_key) + { + return estd::must_getf(key_tagr_assoc_, tag_key, + "cannot find tagr associated with %s", tag_key.c_str()); + } + + std::string register_tagr (std::string tag_key, TagrF tagr) + { + key_tagr_assoc_.emplace(tag_key, tagr); + return tag_key; + } + std::unordered_map registry_; + +private: + std::unordered_map key_tagr_assoc_; }; TagRegistry& get_reg (void); +void recursive_tag (ade::TensptrT root, + std::unordered_set stops, + std::function tag_op); + +using LTensT = std::unordered_map>; + +using TTensT = std::unordered_map; + +struct Query final : public ade::OnceTraveler +{ + Query (TagRegistry& reg = get_reg()) : reg_(reg) {} + + void visit_leaf (ade::iLeaf* leaf) override + { + auto tags = reg_.get_tags(leaf); + save_tags(tags, leaf); + } + + void visit_func (ade::iFunctor* func) override + { + auto& children = func->get_children(); + for (auto child : children) + { + child.get_tensor()->accept(*this); + } + + auto tags = reg_.get_tags(func); + save_tags(tags, func); + } + + TTensT labels_; + + TagRegistry& reg_; + +private: + void save_tags (TagRepsT& tag, ade::iTensor* tens) + { + for (auto& tpair : tag) + { + auto& labs = labels_[tpair.first]; + for (auto lpair : tpair.second) + { + labs[lpair].push_back(tens); + } + } + } +}; + } #endif // TAG_TAG_HPP diff --git a/tag/test/common.hpp b/tag/test/common.hpp index a8e1a97db..34d012070 100644 --- a/tag/test/common.hpp +++ b/tag/test/common.hpp @@ -44,6 +44,11 @@ struct MockTensor final : public ade::iLeaf return 0; } + bool is_const (void) const override + { + return true; + } + ade::Shape shape_; }; diff --git a/tests.sh b/tests.sh index 9f5094780..589c6c7a6 100755 --- a/tests.sh +++ b/tests.sh @@ -13,35 +13,16 @@ free -m; # ===== Run Gtest ===== echo "===== TESTS ====="; -bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" //ade:test -bazel test --run_under='valgrind --leak-check=full' //ade:test +bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" --define EAD_CFG=MIN \ +//ade:test //tag:test //pbm:test //opt:test //opt/parse:test //ead:ctest //perf:test //pll:test -bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" //tag:test -bazel test --run_under='valgrind --leak-check=full' //tag:test - -bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" //pbm:test -bazel test --run_under='valgrind --leak-check=full' //pbm:test - -bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" //opt:test -bazel test --run_under='valgrind --leak-check=full' //opt:test - -bazel test --run_under='valgrind --leak-check=full' //gen:ptest - -bazel test --config asan --config gtest --action_env="ASAN_OPTIONS=detect_leaks=0" //ead:ctest -bazel test --run_under='valgrind --leak-check=full' //ead:ctest -bazel test --run_under='valgrind --leak-check=full' //ead:ptest - -# ===== Check Docs Directory ===== -echo "===== CHECK DOCUMENT EXISTENCE ====="; -if ! [ -d "$DOCS" ]; -then - echo "Documents not found. Please generate documents then try again" - exit 1; -fi +bazel test --run_under='valgrind --leak-check=full' --define EAD_CFG=MIN \ +//ade:test //gen:ptest //tag:test //pbm:test //opt:test //opt/parse:test //ead:ctest //ead:ptest //perf:test //pll:test # ===== Coverage Analysis ====== echo "===== STARTING COVERAGE ANALYSIS ====="; make lcov | grep -v '+' | grep -v 'Processing' + if ! [ -z "$COVERALLS_TOKEN" ]; then git rev-parse --abbrev-inode* HEAD; diff --git a/third_party/repos/cppkg.bzl b/third_party/repos/cppkg.bzl index 887a09fd7..e935edb32 100644 --- a/third_party/repos/cppkg.bzl +++ b/third_party/repos/cppkg.bzl @@ -4,5 +4,5 @@ def cppkg_repository(): git_repository( name = "com_github_mingkaic_cppkg", remote = "https://github.com/mingkaic/cppkg", - commit = "9eb6f9261c5f7407c586cdd6550b1c50ed943945", + commit = "c96b3c52e8d35a16a30c0ac94abe46a661760b78", ) diff --git a/third_party/repos/protobuf.bzl b/third_party/repos/protobuf.bzl index 2959d2dac..1a22c667e 100644 --- a/third_party/repos/protobuf.bzl +++ b/third_party/repos/protobuf.bzl @@ -3,7 +3,7 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") def pb_rules_repository(): http_archive( name = "com_github_stackb_rules_proto", - urls = ["https://github.com/stackb/rules_proto/archive/844077a71597f91c41b02d4509c5f79d51588552.tar.gz"], - sha256 = "867d09bf45515cb3ddeb06f7bdd2182eecf171ae3cd6b716b3b9d2fce50f292f", - strip_prefix = "rules_proto-844077a71597f91c41b02d4509c5f79d51588552", + urls = ["https://github.com/stackb/rules_proto/archive/b93b544f851fdcd3fc5c3d47aee3b7ca158a8841.tar.gz"], + sha256 = "c62f0b442e82a6152fcd5b1c0b7c4028233a9e314078952b6b04253421d56d61", + strip_prefix = "rules_proto-b93b544f851fdcd3fc5c3d47aee3b7ca158a8841", ) diff --git a/todo b/todo index 24051c428..da27aa7ce 100644 --- a/todo +++ b/todo @@ -6,27 +6,32 @@ P4 = "nice to have/need investigating" P5 = "get to it eventually" === feature === -P1 - make shape dimension size configurable +P2 - update API to simplify operator with constants e.g.: X + 1 instead of explicitly creating constant 1 +P2 - allow users to create ambiguous nodes holding shapes with ambiguous dimensions (denoted in python by None) +P2 - make shape dimension size configurable P2 - make constant pre-calculation configurable in opt module P2 - reimplement conv nn layer + dbn P3 - force dbn to conform to established trainer pattern (if no subgraph yet) P3 - implement control nodes/edges for assignments P4 - implement reduce_prod gradient using Eigen cumprod -=== transparency === -P2 - provide graph-setup time summary when failing to match shapes -P4 - add even more debugging tools -P4 - formalize codestyle -P4 - refactor, and rename variables to improve readability -P4 - conform to some bazel style/convention (or change to another build tool) -P4 - investigate adopting more of boost in place of cppkg +=== performance === +general performance: +P2 - ensure ade is thread-safe +P3 - benchmark test rocnnet against various other frameworks (CPU only) +P3 - convert as many shared_ptr to unique_ptr +P4 - remove unordered_map/unordered_set if we're not using them properly +P4 - define optimization conversion rules to increase data accuracy +P4 - more performance test -=== structure === -P4 - remove ead helper functions +run-time performance: +P3 - define dataflow to take advantage of parallel processing at node-level +P4 - implement GPU settings +P4 - improve session implementation +P4 - investigate remote sessions for distributed processing === correction === -P1 - create global session for all ade/ead/tag singletons, then make context configurable -P2 - test tag module (need ^) +P2 - centralize global context structures P2 - reorient tests so that tests cover its own immediate module P2 - fix rbm demo converging to infinity problem P2 - test dbg module @@ -35,20 +40,14 @@ P3 - test complicate equations (generate random valid equations) P3 - maximize coverage P3 - test rocnnet + eqns, modl, and trainer (or subgraph equivalent) +=== transparency === +P2 - provide graph-setup time summary when failing to match shapes +P4 - add even more debugging tools +P4 - formalize codestyle +P4 - refactor, and rename variables to improve readability +P4 - conform to some bazel style/convention (or change to another build tool) +P4 - investigate adopting more of boost in place of cppkg + === update === P2 - update all fmts usages P3 - address warnings - -=== performance === -general performance: -P3 - benchmark test rocnnet against various other frameworks (CPU only) -P3 - convert as many shared_ptr to unique_ptr -P4 - remove unordered_map/unordered_set if we're not using them properly -P4 - define optimization conversion rules to increase data accuracy -P4 - more performance test - -run-time performance: -P3 - define dataflow to take advantage of parallel processing at node-level -P4 - implement GPU settings -P4 - improve session implementation -P4 - investigate remote sessions for distributed processing