diff --git a/CMakeLists.txt b/CMakeLists.txt index d213726..117158c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.25) -project(COSC-4P80-Assignment-1 VERSION 0.0.12) +project(COSC-4P80-Assignment-1 VERSION 0.0.13) option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF) option(ENABLE_UBSAN "Enable the ub sanitizer" OFF) diff --git a/lib/blt b/lib/blt index a7412fc..cacc082 160000 --- a/lib/blt +++ b/lib/blt @@ -1 +1 @@ -Subproject commit a7412fccec0ba14e1a4f0135e53db002cb944924 +Subproject commit cacc082ce9a28468d29a31c402fa2c3fcbe3f910 diff --git a/src/main.cpp b/src/main.cpp index 8f0ca89..038b079 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -59,106 +59,99 @@ const auto weight_total_c_2 = weight_total_c + weight_5 + weight_6 + weight_7; crosstalk_t crosstalk_values{}; -template -void execute_BAM(const Weights& weights, const Inputs& input, const Outputs& output) -{ - auto current_inputs = input; - auto current_outputs = output; - auto next_inputs = current_inputs; - auto next_outputs = current_outputs; - blt::size_t iterations = 0; - constexpr blt::size_t max_iterations = 5; - - do - { - current_inputs = next_inputs; - current_outputs = next_outputs; - ++iterations; - for (const auto& [index, val] : blt::enumerate(current_inputs)) - { - auto next = a1::run_step(weights, val, current_outputs[index]); - next_inputs[index] = next.first; - next_outputs[index] = next.second; - } - // loop until no changes or we hit the iteration limit - } while ((!a1::equal(current_inputs, next_inputs) || !a1::equal(current_outputs, next_outputs)) && iterations < max_iterations); - - BLT_DEBUG("Tracked after %ld iterations", iterations); - a1::check_recall(weights, next_inputs, next_outputs); -} - -void part_a() -{ - blt::log_box_t box(BLT_TRACE_STREAM, "Part A", 8); - - execute_BAM(weight_total_a, part_a_inputs, part_a_outputs); -} - -void part_b() -{ - blt::log_box_t box(BLT_TRACE_STREAM, "Part B", 8); - for (blt::u32 i = 0; i < num_values; i++) - { - blt::generalized_matrix accum; - for (blt::u32 k = 0; k < num_values; k++) - { - if (i == k) - continue; - accum += (part_a_outputs[k] * a1::crosstalk(part_a_inputs[k].normalize(), part_a_inputs[i].normalize())); - } - crosstalk_values.assign_to_column_from_column_rows(accum, i); - } - for (blt::u32 i = 0; i < num_values; i++) - { - BLT_DEBUG_STREAM << crosstalk_values[i] << " Mag: " << crosstalk_values[i].magnitude() << "\n"; - } -} - -void part_c() -{ - blt::log_box_t box(BLT_TRACE_STREAM, "Part C", 8); - execute_BAM(weight_total_c, part_c_1_inputs, part_c_1_outputs); - BLT_TRACE("--- { Part C with 3 extra pairs } ---"); - execute_BAM(weight_total_c_2, part_c_2_inputs, part_c_2_outputs); -} +//template +//void execute_BAM(const Weights& weights, const Inputs& input, const Outputs& output) +//{ +// auto current_inputs = input; +// auto current_outputs = output; +// auto next_inputs = current_inputs; +// auto next_outputs = current_outputs; +// blt::size_t iterations = 0; +// constexpr blt::size_t max_iterations = 5; +// +// do +// { +// current_inputs = next_inputs; +// current_outputs = next_outputs; +// ++iterations; +// for (const auto& [index, val] : blt::enumerate(current_inputs)) +// { +// auto next = a1::run_step(weights, val, current_outputs[index]); +// next_inputs[index] = next.first; +// next_outputs[index] = next.second; +// } +// // loop until no changes or we hit the iteration limit +// } while ((!a1::equal(current_inputs, next_inputs) || !a1::equal(current_outputs, next_outputs)) && iterations < max_iterations); +// +// BLT_DEBUG("Tracked after %ld iterations", iterations); +// a1::check_recall(weights, next_inputs, next_outputs); +//} +// +//void part_a() +//{ +// blt::log_box_t box(BLT_TRACE_STREAM, "Part A", 8); +// +// execute_BAM(weight_total_a, part_a_inputs, part_a_outputs); +//} +// +//void part_b() +//{ +// blt::log_box_t box(BLT_TRACE_STREAM, "Part B", 8); +// for (blt::u32 i = 0; i < num_values; i++) +// { +// blt::generalized_matrix accum; +// for (blt::u32 k = 0; k < num_values; k++) +// { +// if (i == k) +// continue; +// accum += (part_a_outputs[k] * a1::crosstalk(part_a_inputs[k].normalize(), part_a_inputs[i].normalize())); +// } +// crosstalk_values.assign_to_column_from_column_rows(accum, i); +// } +// for (blt::u32 i = 0; i < num_values; i++) +// { +// BLT_DEBUG_STREAM << crosstalk_values[i] << " Mag: " << crosstalk_values[i].magnitude() << "\n"; +// } +//} +// +//void part_c() +//{ +// blt::log_box_t box(BLT_TRACE_STREAM, "Part C", 8); +// execute_BAM(weight_total_c, part_c_1_inputs, part_c_1_outputs); +// BLT_TRACE("--- { Part C with 3 extra pairs } ---"); +// execute_BAM(weight_total_c_2, part_c_2_inputs, part_c_2_outputs); +//} int main() { blt::logging::setLogOutputFormat("\033[94m[${{TIME}}]${{RC}} \033[35m(${{FILE}}:${{LINE}})${{RC}} ${{LF}}${{CNR}}${{STR}}${{RC}}\n"); - a1::test_math(); +// a1::test_math(); - for (const auto& [index, value] : blt::enumerate(part_a_inputs)) + for (const auto& [index, value] : blt::enumerate(part_c_2_inputs)) BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; BLT_TRACE(""); -// for (const auto& [index, value] : blt::enumerate(part_a_inputs).rev()) -// BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; + for (const auto& [index, value] : blt::enumerate(part_c_2_inputs).rev()) + BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; BLT_TRACE(""); - - BLT_TRACE_STREAM - << blt::meta::is_random_access_iterator - << '\n'; - - BLT_TRACE_STREAM - << blt::meta::is_bidirectional_iterator - << '\n'; - - BLT_TRACE_STREAM - << blt::meta::is_bidirectional_or_better - << '\n'; - -// auto d = blt::enumerate(part_a_inputs).rev(); -// BLT_TRACE(blt::type_string()); -// BLT_TRACE(blt::type_string()); - -// BLT_TRACE(blt::type_string::iterator_category>()); -// BLT_TRACE(blt::type_string()); -// BLT_TRACE(blt::type_string()); -// std::cout << std::iterator_traits::iterator_category << std::endl; - part_a(); - part_b(); - part_c(); + for (const auto& [index, value] : blt::enumerate(part_c_2_inputs).skip(3)) + BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; + + BLT_TRACE(""); + + for (const auto& [index, value] : blt::enumerate(part_c_2_inputs).skip(3).rev()) + BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; + + BLT_TRACE(""); + + for (const auto& [index, value] : blt::enumerate(part_c_2_inputs).rev().skip(3).rev()) + BLT_TRACE_STREAM << index << " : " << value.vec_from_column_row() << '\n'; + + +// part_a(); +// part_b(); +// part_c(); }