docs: def build_b(self):
          """build Bp and Bpp for fast decoupled method"""
          if not self.n:
              return
          method = self.system.pflow.config.method.lower()
  
          # Build B prime matrix
          y1 = mul(
              self.u, self.g1
          )  # y1 neglects line charging shunt, and g1 is usually 0 in HV lines
          y2 = mul(
              self.u, self.g2
          )  # y2 neglects line charging shunt, and g2 is usually 0 in HV lines
          m = polar(1.0, self.phi * deg2rad)  # neglected tap ratio
          self.mconj = conj(m)
          m2 = matrix(1.0, (self.n, 1), 'z')
          if method in ('fdxb', 'dcpf'):
              # neglect line resistance in Bp in XB method
              y12 = div(self.u, self.x * 1j)
          else:
              y12 = div(self.u, self.r + self.x * 1j)
          self.Bp = spmatrix(
              div(y12 + y1, m2), self.a1, self.a1, (self.nb, self.nb), 'z')
          self.Bp -= spmatrix(
              div(y12, conj(m)), self.a1, self.a2, (self.nb, self.nb), 'z')
          self.Bp -= spmatrix(
              div(y12, m), self.a2, self.a1, (self.nb, self.nb), 'z')
          self.Bp += spmatrix(y12 + y2, self.a2, self.a2, (self.nb, self.nb),
                              'z')
          self.Bp = self.Bp.imag()
  
          # Build B double prime matrix
          y1 = mul(
              self.u, self.g1 + self.b1 * 1j
          )  # y1 neglected line charging shunt, and g1 is usually 0 in HV lines
          y2 = mul(
              self.u, self.g2 + self.b2 * 1j
          )  # y2 neglected line charging shunt, and g2 is usually 0 in HV lines
          m = self.tap + 0j  # neglected phase shifter
          m2 = abs(m)**2 + 0j
  
          if method in ('fdbx', 'fdpf', 'dcpf'):
              # neglect line resistance in Bpp in BX method
              y12 = div(self.u, self.x * 1j)
          else:
              y12 = div(self.u, self.r + self.x * 1j)
          self.Bpp = spmatrix(
              div(y12 + y1, m2), self.a1, self.a1, (self.nb, self.nb), 'z')
          self.Bpp -= spmatrix(
              div(y12, conj(m)), self.a1, self.a2, (self.nb, self.nb), 'z')
          self.Bpp -= spmatrix(
              div(y12, m), self.a2, self.a1, (self.nb, self.nb), 'z')
          self.Bpp += spmatrix(y12 + y2, self.a2, self.a2, (self.nb, self.nb),
                               'z')
          self.Bpp = self.Bpp.imag()
  
          for item in range(self.nb):
              if abs(self.Bp[item, item]) == 0:
                  self.Bp[item, item] = 1e-6 + 0j
              if abs(self.Bpp[item, item]) == 0:
                  self.Bpp[item, item] = 1e-6 + 0j