code: def _build_jacobian(self, Ybus, V, pv, pq, pvpq):
          
          pq_col = [[i] for i in pq]
          pvpq_col = [[i] for i in pvpq]
  
          dS_dVm, dS_dVa = self.case.dSbus_dV(Ybus, V)
  
          J11 = dS_dVa[pvpq_col, pvpq].real
  
          J12 = dS_dVm[pvpq_col, pq].real
          J21 = dS_dVa[pq_col, pvpq].imag
          J22 = dS_dVm[pq_col, pq].imag
  
          J = vstack([
              hstack([J11, J12]),
              hstack([J21, J22])
          ], format="csr")
  
          return J
docs: Returns the Jacobian matrix.