Skip to content

Commit

Permalink
Added two module test - issue with input json
Browse files Browse the repository at this point in the history
  • Loading branch information
sjanzou committed Apr 18, 2023
1 parent f76871e commit 466a1ed
Show file tree
Hide file tree
Showing 4 changed files with 36,286 additions and 25 deletions.
90 changes: 66 additions & 24 deletions ssc/cmod_hybrid.cpp
Expand Up @@ -58,35 +58,77 @@ class cm_hybrid : public compute_module
if (table->type != SSC_TABLE)
throw exec_error("hybrid", util::format("No input table found."));


// loop based on table of table inputs
// loop for multiple hybrid compute modules starts here
auto module = ssc_module_create(table->table.as_string("compute_module"));

auto &input = table->table;
ssc_module_exec(module, static_cast<ssc_data_t>(&input));

auto outputs = ssc_data_create();

int pidx = 0;
while (const ssc_info_t p_inf = ssc_module_var_info(module, pidx++))
{
int var_type = ssc_info_var_type(p_inf); // SSC_INPUT, SSC_OUTPUT, SSC_INOUT
if (var_type == SSC_OUTPUT) { // maybe add INOUT
auto var_name = ssc_info_name(p_inf);
auto type = ssc_info_data_type(p_inf);
auto var_value = input.lookup(var_name);
ssc_data_set_var(outputs, var_name, var_value);
if (table->table.is_assigned("num_hybrids")) {
// loop based on table of table inputs
// loop for multiple hybrid compute modules starts here
int num_hybrids = table->table.as_integer("num_hybrids");
auto outputs = ssc_data_create();

for (int i = 0; i < num_hybrids; i++) {

auto table_name = "mod" + std::to_string(i + 1);
auto hybrid_table = table->table.lookup(table_name);
if (hybrid_table->type != SSC_TABLE)
throw exec_error("hybrid", "No input table found for ." + table_name);

auto module = ssc_module_create(hybrid_table->table.as_string("compute_module"));

auto& input = hybrid_table->table;
ssc_module_exec(module, static_cast<ssc_data_t>(&input));

auto hybrid_output = ssc_data_create();

int pidx = 0;
while (const ssc_info_t p_inf = ssc_module_var_info(module, pidx++))
{
int var_type = ssc_info_var_type(p_inf); // SSC_INPUT, SSC_OUTPUT, SSC_INOUT
if (var_type == SSC_OUTPUT) { // maybe add INOUT
auto var_name = ssc_info_name(p_inf);
auto type = ssc_info_data_type(p_inf);
auto var_value = input.lookup(var_name);
ssc_data_set_var(hybrid_output, var_name, var_value);
}
}

// loop ends here
// need to agregate some outputs potenitally here
ssc_data_set_table(outputs, table_name.c_str(), hybrid_output);

ssc_module_free(module);
ssc_data_free(hybrid_output);
}
assign("output", var_data(*(static_cast<var_table*>(outputs))));
ssc_data_free(outputs);

}
else {
auto module = ssc_module_create(table->table.as_string("compute_module"));

auto& input = table->table;
ssc_module_exec(module, static_cast<ssc_data_t>(&input));

auto outputs = ssc_data_create();

int pidx = 0;
while (const ssc_info_t p_inf = ssc_module_var_info(module, pidx++))
{
int var_type = ssc_info_var_type(p_inf); // SSC_INPUT, SSC_OUTPUT, SSC_INOUT
if (var_type == SSC_OUTPUT) { // maybe add INOUT
auto var_name = ssc_info_name(p_inf);
auto type = ssc_info_data_type(p_inf);
auto var_value = input.lookup(var_name);
ssc_data_set_var(outputs, var_name, var_value);
}
}

// loop ends here
// need to agregate some outputs potenitally here
// loop ends here
// need to agregate some outputs potenitally here

assign("output", var_data(*(static_cast<var_table*>(outputs))));
assign("output", var_data(*(static_cast<var_table*>(outputs))));

ssc_module_free(module);
ssc_data_free(outputs);
ssc_module_free(module);
ssc_data_free(outputs);
}
}
};

Expand Down

0 comments on commit 466a1ed

Please sign in to comment.