/*++ Copyright (c) 2017 Microsoft Corporation Module Name: Abstract: Author: Lev Nachmanson (levnach) Revision History: --*/ #include #include "util/vector.h" #include "math/lp/lp_settings.h" #include "math/lp/lu.h" #include "math/lp/square_sparse_matrix_def.h" #include "math/lp/dense_matrix.h" namespace lp { template double square_sparse_matrix::dot_product_with_row(unsigned int, vector const&) const; template void square_sparse_matrix::add_new_element(unsigned int, unsigned int, const double&); template void square_sparse_matrix::divide_row_by_constant(unsigned int, const double&, lp_settings&); template bool square_sparse_matrix::fill_eta_matrix(unsigned int, eta_matrix**); template const double & square_sparse_matrix::get(unsigned int, unsigned int) const; template unsigned square_sparse_matrix::get_number_of_nonzeroes() const; template bool square_sparse_matrix::get_pivot_for_column(unsigned int&, unsigned int&, int, unsigned int); template unsigned square_sparse_matrix::lowest_row_in_column(unsigned int); template bool square_sparse_matrix::pivot_row_to_row(unsigned int, const double&, unsigned int, lp_settings&); template bool square_sparse_matrix::pivot_with_eta(unsigned int, eta_matrix*, lp_settings&); template void square_sparse_matrix::prepare_for_factorization(); template void square_sparse_matrix::remove_element(vector >&, indexed_value&); template void square_sparse_matrix::replace_column(unsigned int, indexed_vector&, lp_settings&); template void square_sparse_matrix::set(unsigned int, unsigned int, double); template void square_sparse_matrix::set_max_in_row(vector >&); template bool square_sparse_matrix::set_row_from_work_vector_and_clean_work_vector_not_adjusted(unsigned int, indexed_vector&, lp_settings&); template bool square_sparse_matrix::shorten_active_matrix(unsigned int, eta_matrix*); template void square_sparse_matrix::solve_y_U(vector&) const; template square_sparse_matrix::square_sparse_matrix(unsigned int, unsigned); template void square_sparse_matrix::add_new_element(unsigned int, unsigned int, const mpq&); template void square_sparse_matrix::divide_row_by_constant(unsigned int, const mpq&, lp_settings&); template bool square_sparse_matrix::fill_eta_matrix(unsigned int, eta_matrix**); template mpq const & square_sparse_matrix::get(unsigned int, unsigned int) const; template unsigned square_sparse_matrix::get_number_of_nonzeroes() const; template bool square_sparse_matrix::get_pivot_for_column(unsigned int&, unsigned int&, int, unsigned int); template unsigned square_sparse_matrix::lowest_row_in_column(unsigned int); template bool square_sparse_matrix::pivot_with_eta(unsigned int, eta_matrix*, lp_settings&); template void square_sparse_matrix::prepare_for_factorization(); template void square_sparse_matrix::remove_element(vector> &, indexed_value&); template void square_sparse_matrix::replace_column(unsigned int, indexed_vector&, lp_settings&); template void square_sparse_matrix::set_max_in_row(vector>&); template bool square_sparse_matrix::set_row_from_work_vector_and_clean_work_vector_not_adjusted(unsigned int, indexed_vector&, lp_settings&); template bool square_sparse_matrix::shorten_active_matrix(unsigned int, eta_matrix*); template void square_sparse_matrix::solve_y_U(vector&) const; template void square_sparse_matrix>::add_new_element(unsigned int, unsigned int, const mpq&); template void square_sparse_matrix>::divide_row_by_constant(unsigned int, const mpq&, lp_settings&); template bool square_sparse_matrix>::fill_eta_matrix(unsigned int, eta_matrix >**); template const mpq & square_sparse_matrix>::get(unsigned int, unsigned int) const; template unsigned square_sparse_matrix>::get_number_of_nonzeroes() const; template bool square_sparse_matrix>::get_pivot_for_column(unsigned int&, unsigned int&, int, unsigned int); template unsigned square_sparse_matrix>::lowest_row_in_column(unsigned int); template bool square_sparse_matrix>::pivot_with_eta(unsigned int, eta_matrix >*, lp_settings&); template void square_sparse_matrix>::prepare_for_factorization(); template void square_sparse_matrix>::remove_element(vector>&, indexed_value&); template void square_sparse_matrix>::replace_column(unsigned int, indexed_vector&, lp_settings&); template void square_sparse_matrix>::set_max_in_row(vector>&); template bool square_sparse_matrix>::set_row_from_work_vector_and_clean_work_vector_not_adjusted(unsigned int, indexed_vector&, lp_settings&); template bool square_sparse_matrix>::shorten_active_matrix(unsigned int, eta_matrix >*); template void square_sparse_matrix>::solve_y_U(vector&) const; template void square_sparse_matrix::double_solve_U_y(indexed_vector&, const lp_settings &); template void square_sparse_matrix::double_solve_U_y(indexed_vector&, const lp_settings&); template void square_sparse_matrix>::double_solve_U_y(indexed_vector&, const lp_settings&); template void square_sparse_matrix >::double_solve_U_y >(indexed_vector>&, const lp_settings&); template void square_sparse_matrix::solve_U_y_indexed_only(indexed_vector&, const lp_settings&, vector &); template void square_sparse_matrix::solve_U_y_indexed_only(indexed_vector&, const lp_settings &, vector &); #ifdef Z3DEBUG template bool square_sparse_matrix::is_upper_triangular_and_maximums_are_set_correctly_in_rows(lp_settings&) const; template bool square_sparse_matrix::is_upper_triangular_and_maximums_are_set_correctly_in_rows(lp_settings&) const; template bool square_sparse_matrix >::is_upper_triangular_and_maximums_are_set_correctly_in_rows(lp_settings&) const; #endif template void square_sparse_matrix >::solve_U_y_indexed_only(indexed_vector&, const lp_settings &, vector &); template void square_sparse_matrix::solve_U_y(vector&); template void square_sparse_matrix::double_solve_U_y(vector&); template void square_sparse_matrix::solve_U_y(vector&); template void square_sparse_matrix::double_solve_U_y(vector&); template void square_sparse_matrix >::solve_U_y >(vector >&); template void square_sparse_matrix >::double_solve_U_y >(vector >&); template void square_sparse_matrix::find_error_in_solution_U_y_indexed(indexed_vector&, indexed_vector&, const vector &); template double square_sparse_matrix::dot_product_with_row(unsigned int, indexed_vector const&) const; template void square_sparse_matrix::find_error_in_solution_U_y_indexed(indexed_vector&, indexed_vector&, const vector &); template mpq square_sparse_matrix::dot_product_with_row(unsigned int, indexed_vector const&) const; template void square_sparse_matrix >::find_error_in_solution_U_y_indexed(indexed_vector&, indexed_vector&, const vector &); template mpq square_sparse_matrix >::dot_product_with_row(unsigned int, indexed_vector const&) const; template void square_sparse_matrix >::find_error_in_solution_U_y_indexed >(indexed_vector >&, indexed_vector >&, const vector &); template numeric_pair square_sparse_matrix >::dot_product_with_row >(unsigned int, indexed_vector > const&) const; template void square_sparse_matrix::extend_and_sort_active_rows(vector const&, vector&); template void square_sparse_matrix >::extend_and_sort_active_rows(vector const&, vector&); template void square_sparse_matrix >::solve_U_y(vector&); template void square_sparse_matrix >::double_solve_U_y(vector&); template void square_sparse_matrix< mpq,numeric_pair< mpq> >::set(unsigned int,unsigned int, mpq); template void square_sparse_matrix::solve_y_U_indexed(indexed_vector&, const lp_settings & ); template void square_sparse_matrix::solve_y_U_indexed(indexed_vector&, const lp_settings &); template void square_sparse_matrix >::solve_y_U_indexed(indexed_vector&, const lp_settings &); template square_sparse_matrix::square_sparse_matrix(static_matrix const&, vector&); template square_sparse_matrix::square_sparse_matrix (static_matrix const&, vector&); template square_sparse_matrix >::square_sparse_matrix(static_matrix > const&, vector&); } template void lp::square_sparse_matrix::copy_from_input_on_basis >(lp::static_matrix const&, vector&); template void lp::square_sparse_matrix::copy_from_input_on_basis >(lp::static_matrix const&, vector&);