sloppy comments e.g. combine_matrices does not say in what way we combine (row-wise) + e.g. you definitely should have warned a user that function gaussian_diagonal works only for fractions -1pt
some minor style issues such as multiple definitions in one line e.g. line 272, naming of variables is not bad but still could be more descriptive (e.g. vector_size line 249) , sometimes you do not indicate what type is returned (it should be done when sth non trivial is returned) etc. -1pt
sometimes programming logic suffers: e.g. in the inverse function you first run expensive algorithms and only then you check if matrix is square + unnecessary nested code (if you return in if statement there is no need for else unless you do some optimization with attributes [[likely]] and [[unlikely]]) -1pt
could be more c++ish e.g. lines 229-233 is just std::vector::resize
unused variables e.g.lines 338 and 119 -0.5pt
fraction - sometimes num and den are both negative (you did not describe this convention - i dont like this convention in particular due to the fact that if you must check sign of a fraction then you must check both num and den - printing see what comes next in this remark) - e.g. display issues - fraction - as it comes to the when printing some special cases should be include (division by 1 or num = 0) sometimes both num and den are printed negative. -1pt
+1pt for nice organisation of your code (helper function etc) -1pt for tests and examples function which are too lengthy (in particular lines of length 167 do not simplify reading) and both examples and tests should not pollute the global namespace.
+1pt difficulty of this project (depends on not so easy interface of matrix_view, however you coped with it nicely) + for optimisations (vector.reserve)
+1pt for changing gaussian_elimination_algorithm (operations is now the last arg) - it is much more convenient for a user + nice cooperation with other project groups
Summary 9pt - 4.5pts + 2pts = 6.5pts