New user self-registration is disabled due to spam. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Before reporting a bug, please make sure that your Eigen version is up-to-date!
Bug 1658 - Add DenseBase::conjugateIf<bool>()
Summary: Add DenseBase::conjugateIf<bool>()
Status: DECISIONNEEDED
Alias: None
Product: Eigen
Classification: Unclassified
Component: Core - general (show other bugs)
Version: unspecified
Hardware: All All
: Normal Feature Request
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-01-13 20:59 UTC by Gael Guennebaud
Modified: 2019-01-15 09:58 UTC (History)
3 users (show)



Attachments
Add conjugateIf<cond>() members (10.82 KB, patch)
2019-01-15 09:58 UTC, Gael Guennebaud
no flags Details | Diff

Description Gael Guennebaud 2019-01-13 20:59:16 UTC
Adding a conditional conjugateIf<bool>() method would allow to simplify the implementation of some of our solver code. For instance, in PartialPivLU, we have code like:

  if (Conjugate) {
    dst = m_lu.template triangularView<Upper>().adjoint().solve(rhs);
    m_lu.template triangularView<UnitLower>().adjoint().solveInPlace(dst);
  } else {
    dst = m_lu.template triangularView<Upper>().transpose().solve(rhs);
    m_lu.template triangularView<UnitLower>().transpose().solveInPlace(dst);
  }

that could be factorized as:

  dst = m_lu.template triangularView<Upper>().transpose()
            .template conjugateIf<Conjugate>().solve(rhs);
  m_lu.template triangularView<UnitLower>().transpose()
      .template conjugateIf<Conjugate>().solveInPlace(dst);

More complicated exemples include FullPivLU::_solve_impl_transposed, and some code in PR567: https://bitbucket.org/eigen/eigen/pull-requests/567/restructuring-of-all-densesolvers/diff

We could keep it internal:

  dst = internal::conj_if<bool>(m_lu.template triangularView<Upper>().transpose()).solve(rhs);

but (1) it's less readable than as a free function, and (2) if it's good for us, it's probably good for our users too.
Comment 1 Gael Guennebaud 2019-01-15 09:58:26 UTC
Created attachment 916 [details]
Add conjugateIf<cond>()  members

Patch ready. I also added it to triangularView and selfadjointView, and updated PartialPivLU to make use of it.

Note You need to log in before you can comment on or make changes to this bug.