astro-informatics / sopt

Sparse OPTimisation using state-of-the-art convex optimisation algorithms.
http://astro-informatics.github.io/sopt/
GNU General Public License v2.0
9 stars 10 forks source link

Code quality: Shadow variable declaration in l1_proximal.h #378

Open krishnakumarg1984 opened 1 year ago

krishnakumarg1984 commented 1 year ago

Variable res is declared here, and then shadowed within the loop again here.

Vector<Scalar> const res = Psi().adjoint() * out;   // outer variable declaration here
  Vector<Scalar> u_l1 = 1e0 / nu() * (res - apply_soft_threshhold(gamma, res));
  apply_constraints(out, x - Psi() * u_l1);

  // Move on to other iterations
  for (++niters; niters < itermax() or itermax() == 0; ++niters) {
    auto const do_break = breaker(objective(x, out, gamma));
    SOPT_LOW_LOG("    - [ProxL1] iter {}, prox_fval = {}, rel_fval = {}", niters, breaker.current(),
                 breaker.relative_variation());
    if (do_break) break;

    Vector<Scalar> const res = u_l1 * nu() + Psi().adjoint() * out;  // shadow variable declaration here
SJaffa commented 1 year ago

It looks like res is not used after the loop or returned from the function so could we rename the outer declaration to initial_res or something similar?

krishnakumarg1984 commented 1 year ago

@SJaffa It's unclear to me what this function is doing. Could you please see if the rename breaks the building?