38template <KernelBackendSelector BackendSelector, uni20::MutableRankedTensorView<2> MatrixTensor,
class EigenScalar,
39 uni20::MutableRankedTensorView<2> RightEigenvectorTensor>
40void nonsymmetric_eigen(BackendSelector&& selector, MatrixTensor&& matrix_work, std::span<EigenScalar> eigenvalues,
41 RightEigenvectorTensor&& right_eigenvectors,
bool compute_right_vectors,
42 std::optional<Precision> requested = {})
44 auto const p = detail::decomposition_precision(matrix_work, requested);
47 detail::dispatch_at_precision<uni20::tensor_element_t<MatrixTensor>>(
48 std::forward<BackendSelector>(selector), nonsymmetric_eigen_op{.compute_right_vectors = compute_right_vectors},
p,
49 matrix_descriptor, eigenvalues, right_eigenvector_descriptor);
51 uni20::detail::record_output_precision(matrix_work,
p);
52 if (compute_right_vectors) uni20::detail::record_output_precision(right_eigenvectors,
p);
56template <uni20::MutableRankedTensorView<2> MatrixTensor,
class EigenScalar,
57 uni20::MutableRankedTensorView<2> RightEigenvectorTensor>
59 RightEigenvectorTensor&& right_eigenvectors,
bool compute_right_vectors,
60 std::optional<Precision> requested = {})
62 auto const p = detail::decomposition_precision(matrix_work, requested);
63 auto operation = nonsymmetric_eigen_op{.compute_right_vectors = compute_right_vectors};
64 auto selector =
select_backend(operation, matrix_work, right_eigenvectors);
66 std::forward<RightEigenvectorTensor>(right_eigenvectors), compute_right_vectors,
p);
LAPACK backend for dense nonsymmetric eigensystems.
Operation-tag backend dispatch over tensor-view operands.
Definition linalg/async.hpp:28
constexpr auto select_backend(Operation const &operation, FirstTensor const &, RestTensors const &...)
Select the default backend list for an operation on Tensor operands.
Definition backend_selector.hpp:252
void nonsymmetric_eigen(BackendSelector &&selector, MatrixTensor &&matrix_work, std::span< EigenScalar > eigenvalues, RightEigenvectorTensor &&right_eigenvectors, bool compute_right_vectors, std::optional< Precision > requested={})
Compute eigenvalues and optional right eigenvectors, destroying the input matrix.
Definition ops/nonsymmetric_eigen.hpp:40
Definition data_table.cpp:8
constexpr decltype(auto) mdspec_of(Tensor &tensor) noexcept(noexcept(tensor.mdspec()))
Return a tensor's immediate or descriptor-backed multidimensional metadata.
Definition tensor/concepts.hpp:50
Concepts for tensor-level objects that resolve mdspan kernel operands.