code: def _one_iteration(self, F, Ybus, V, Vm, Va, pv, pq, pvpq):
          
          J = self._build_jacobian(Ybus, V, pv, pq, pvpq)
  
          # Update step.
          dx = -1 * spsolve(J, F)
  #        dx = -1 * linalg.lstsq(J.todense(), F)[0]
  
          # Update voltage vector.
          npv = len(pv)
          npq = len(pq)
          if npv > 0:
              Va[pv] = Va[pv] + dx[range(npv)]
          if npq > 0:
              Va[pq] = Va[pq] + dx[range(npv, npv + npq)]
              Vm[pq] = Vm[pq] + dx[range(npv + npq, npv + npq + npq)]
  
          V = Vm * exp(1j * Va)
          Vm = abs(V) # Avoid wrapped round negative Vm.
          Va = angle(V)
  
          return V, Vm, Va
docs: Performs one Newton iteration.