Example: Upper/NonUnit
import mir.algorithm.iteration: equal; import mir.ndslice.slice: sliced; import mir.ndslice.topology: stairs; auto result = [2.0, 3, 4].sliced(3); auto a = [3.0, 5, 2, 2, 3, 1].stairs!"-"(3); auto b = [29.0, 18, 4].sliced(3); tpsv(cblas.Diag.NonUnit, a, b); assert(b.equal(result));
Example: Lower/NonUnit
import mir.algorithm.iteration: equal; import mir.ndslice.slice: sliced; import mir.ndslice.topology: stairs; auto result = [2.0, 3, 4].sliced(3); auto a = [3.0, 5, 2, 2, 3, 1].stairs!"+"(3); auto b = [6.0, 16, 17].sliced(3); tpsv(cblas.Diag.NonUnit, a, b); assert(b.equal(result));
Example: Upper/Unit
import mir.algorithm.iteration: equal; import mir.ndslice.slice: sliced; import mir.ndslice.topology: stairs; auto result = [2.0, 3, 4].sliced(3); // Setting cblas.Diag.Unit assumes diagonals are 1s, even if they are not auto a = [3.0, 5, 2, 2, 3, 1].stairs!"-"(3); auto b = [25.0, 15, 4].sliced(3); tpsv(cblas.Diag.Unit, a, b); assert(b.equal(result));