Skip to content

Commit 5a4443c

Browse files
authored
Merge pull request #3070 from stan-dev/fix_zero_sized_parameters
Fix zero sized parameters in transform_inits
2 parents 1a77a42 + ecd660d commit 5a4443c

File tree

3 files changed

+75
-2
lines changed

3 files changed

+75
-2
lines changed

src/stan/services/sample/standalone_gqs.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,18 @@ void get_model_parameters(const Model &model,
4242
param_names.emplace_back(cur_name);
4343
}
4444
}
45+
std::vector<std::string> all_param_names;
46+
model.get_param_names(all_param_names);
4547
size_t num_params = param_names.size();
4648
std::vector<std::vector<size_t>> dimss;
4749
model.get_dims(dimss);
48-
for (size_t i = 0; i < num_params; ++i) {
49-
param_dimss.emplace_back(dimss[i]);
50+
for (size_t i = 0; i < param_names.size(); i++) {
51+
for (size_t j = i; j < all_param_names.size(); ++j) {
52+
if (param_names[i].compare(all_param_names[j]) == 0) {
53+
param_dimss.emplace_back(dimss[j]);
54+
break;
55+
}
56+
}
5057
}
5158
}
5259

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
parameters {
2+
real a;
3+
vector[0] b;
4+
vector[5] c;
5+
array[0] vector[2] d;
6+
row_vector[6] e;
7+
array[2] vector[0] f;
8+
array[2] vector[3] g;
9+
}
10+
model {
11+
a ~ std_normal();
12+
c ~ std_normal();
13+
e ~ std_normal();
14+
g[1] ~ std_normal();
15+
g[2] ~ std_normal();
16+
}
17+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include <stan/services/error_codes.hpp>
2+
#include <stan/services/sample/standalone_gqs.hpp>
3+
#include <stan/callbacks/stream_writer.hpp>
4+
#include <stan/callbacks/stream_logger.hpp>
5+
#include <stan/io/empty_var_context.hpp>
6+
#include <stan/io/stan_csv_reader.hpp>
7+
#include <test/test-models/good/services/gq_test_zero_sized.hpp>
8+
#include <test/unit/services/instrumented_callbacks.hpp>
9+
#include <test/unit/util.hpp>
10+
#include <Eigen/Dense>
11+
#include <gtest/gtest.h>
12+
#include <iostream>
13+
#include <string>
14+
#include <vector>
15+
16+
class ServicesStandaloneGQ2 : public ::testing::Test {
17+
public:
18+
ServicesStandaloneGQ2()
19+
: logger(logger_ss, logger_ss, logger_ss, logger_ss, logger_ss) {}
20+
21+
void SetUp() {
22+
stan::io::empty_var_context context;
23+
model = new stan_model(context);
24+
}
25+
26+
void TearDown() { delete model; }
27+
28+
stan::test::unit::instrumented_interrupt interrupt;
29+
std::stringstream logger_ss;
30+
stan::callbacks::stream_logger logger;
31+
stan_model *model;
32+
};
33+
34+
TEST_F(ServicesStandaloneGQ2, zero_sized_params_get_model_parameters) {
35+
std::vector<std::string> param_names;
36+
std::vector<std::vector<size_t>> param_dimss;
37+
stan::services::get_model_parameters(*model, param_names, param_dimss);
38+
39+
EXPECT_EQ(param_names.size(), 4);
40+
EXPECT_EQ(param_dimss.size(), 4);
41+
EXPECT_EQ(param_dimss[0].size(), 0);
42+
EXPECT_EQ(param_dimss[1].size(), 1);
43+
EXPECT_EQ(param_dimss[1][0], 5);
44+
EXPECT_EQ(param_dimss[2].size(), 1);
45+
EXPECT_EQ(param_dimss[2][0], 6);
46+
EXPECT_EQ(param_dimss[3].size(), 2);
47+
EXPECT_EQ(param_dimss[3][0], 2);
48+
EXPECT_EQ(param_dimss[3][1], 3);
49+
}

0 commit comments

Comments
 (0)