1 #ifdef MOOSE_LIBTORCH_ENABLED 3 #include "gtest/gtest.h" 7 #include <torch/torch.h> 13 const std::vector<double> mean_gold = {0.0, -1.0};
14 const std::vector<double> stddev_gold = {1.0, 0.0};
16 torch::Tensor input_tensor = torch::tensor(
17 {{1.0, -1.0}, {-1.0, -1.0}, {1.0, -1.0}, {-1.0, -1.0}, {1.0, -1.0}, {-1.0, -1.0}},
23 const auto mean = standardizer.getMean();
24 const auto stddev = standardizer.getStdDev();
26 ASSERT_EQ(mean.dim(), 1);
27 ASSERT_EQ(stddev.dim(), 1);
28 ASSERT_EQ(static_cast<std::size_t>(mean.size(0)), mean_gold.size());
29 ASSERT_EQ(static_cast<std::size_t>(stddev.size(0)), stddev_gold.size());
31 const auto mean_accessor = mean.accessor<
Real, 1>();
32 const auto stddev_accessor = stddev.accessor<
Real, 1>();
33 for (std::size_t i = 0; i < mean_gold.size(); ++i)
34 EXPECT_EQ(mean_accessor[i], mean_gold[i]);
35 for (std::size_t i = 0; i < stddev_gold.size(); ++i)
36 EXPECT_EQ(stddev_accessor[i], stddev_gold[i]);
41 torch::Tensor input_tensor = torch::tensor({{1.0, -1.0}, {-1.0, 1.0}}, {torch::kFloat64});
42 const auto gold = torch::tensor({{1.0, -1.0}, {-1.0, 1.0}}, {torch::kFloat64});
46 standardizer.getStandardized(input_tensor);
48 EXPECT_TRUE(torch::allclose(input_tensor, gold));
53 torch::Tensor input_tensor = torch::tensor({{1.0, -1.0}, {-1.0, 1.0}}, {torch::kFloat64});
54 const auto gold = torch::tensor({{1.0, -1.0}, {-1.0, 1.0}}, {torch::kFloat64});
58 standardizer.getStandardized(input_tensor);
59 standardizer.getDestandardized(input_tensor);
61 EXPECT_TRUE(torch::allclose(input_tensor, gold));
66 torch::Tensor input_tensor = torch::tensor({{1.0, -1.0}, {1.0, 1.0}}, {torch::kFloat64});
67 const auto gold = torch::tensor({{0.0, -1.0}, {0.0, 1.0}}, {torch::kFloat64});
71 standardizer.getDescaled(input_tensor);
73 EXPECT_TRUE(torch::allclose(input_tensor, gold));
78 torch::Tensor input_tensor = torch::tensor({{4.0, -8.0}, {-4.0, 8.0}}, {torch::kFloat64});
79 const auto reference = torch::tensor({{2.0, -4.0}, {-2.0, 4.0}}, {torch::kFloat64});
80 const auto gold = torch::tensor({{2.0, -2.0}, {-2.0, 2.0}}, {torch::kFloat64});
84 standardizer.getScaled(input_tensor);
86 EXPECT_TRUE(torch::allclose(input_tensor, gold));
91 torch::Tensor stored = torch::tensor({{1.0, 2.0, 3.0}, {-4.0, -5.0, -6.0}}, {torch::kFloat64});
93 std::stringbuf buffer;
94 std::iostream stream(&buffer);
100 ASSERT_EQ(loaded.size(0), stored.size(0));
101 ASSERT_EQ(loaded.size(1), stored.size(1));
102 EXPECT_TRUE(torch::allclose(loaded, stored));
107 torch::Tensor stored = torch::tensor(3.25, {torch::kFloat64});
109 std::stringbuf buffer;
110 std::iostream stream(&buffer);
113 torch::Tensor loaded;
116 ASSERT_EQ(loaded.dim(), stored.dim());
117 EXPECT_TRUE(torch::allclose(loaded, stored));
122 torch::Tensor stored = torch::tensor({1.0, -2.0, 3.5, 7.0}, {torch::kFloat64});
124 std::stringbuf buffer;
125 std::iostream stream(&buffer);
128 torch::Tensor loaded;
131 ASSERT_EQ(loaded.dim(), stored.dim());
132 ASSERT_EQ(loaded.size(0), stored.size(0));
133 EXPECT_TRUE(torch::allclose(loaded, stored));
138 const torch::Tensor base =
139 torch::tensor({{1.0, 2.0, 3.0}, {-4.0, -5.0, -6.0}}, {torch::kFloat64});
140 torch::Tensor stored = torch::transpose(base, 0, 1);
142 ASSERT_FALSE(stored.is_contiguous());
144 std::stringbuf buffer;
145 std::iostream stream(&buffer);
148 torch::Tensor loaded;
151 ASSERT_EQ(loaded.size(0), stored.size(0));
152 ASSERT_EQ(loaded.size(1), stored.size(1));
153 EXPECT_TRUE(torch::allclose(loaded, stored));
158 torch::Tensor input_tensor =
159 torch::tensor({{3.0, 1.0}, {5.0, -1.0}, {7.0, 3.0}}, {torch::kFloat64});
164 std::stringbuf buffer;
165 std::iostream stream(&buffer);
171 EXPECT_TRUE(torch::allclose(loaded.
getMean(), stored.getMean()));
172 EXPECT_TRUE(torch::allclose(loaded.
getStdDev(), stored.getStdDev()));
TEST(StochasticTools, getMean)
void dataStore(std::ostream &stream, FaceCenteredMapFunctor< T, Map > &m, void *context)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void dataLoad(std::istream &stream, FaceCenteredMapFunctor< T, Map > &m, void *context)