code: def is_polar(self, tol_dipole_per_unit_area=1e-3):
          
          dip_per_unit_area = self.dipole / self.surface_area
          return np.linalg.norm(dip_per_unit_area) > tol_dipole_per_unit_area
docs: Checks whether the surface is polar by computing the dipole per unit
          area. Note that the Slab must be oxidation state-decorated for this
          to work properly. Otherwise, the Slab will always be non-polar.
  
          Args:
              tol_dipole_per_unit_area (float): A tolerance. If the dipole
                  magnitude per unit area is less than this value, the Slab is
                  considered non-polar. Defaults to 1e-3, which is usually
                  pretty good. Normalized dipole per unit area is used as it is
                  more reliable than using the total, which tends to be larger for
                  slabs with larger surface areas.