code: def asr_breaking(self, tol_eigendisplacements=1e-5):
          
  
          for i in range(self.nb_qpoints):
              if np.allclose(self.qpoints[i].frac_coords, (0, 0, 0)):
  
                  if self.has_eigendisplacements:
                      acoustic_modes_index = []
                      for j in range(self.nb_bands):
                          eig = self.eigendisplacements[j][i]
                          if np.max(np.abs(eig[1:] - eig[:1])) < tol_eigendisplacements:
                              acoustic_modes_index.append(j)
                      # if acoustic modes are not correctly identified return use
                      # the first three modes
                      if len(acoustic_modes_index) != 3:
                          acoustic_modes_index = [0, 1, 2]
                      return self.bands[acoustic_modes_index, i]
                  else:
                      return self.bands[:3, i]
  
          return None
docs: Returns the breaking of the acoustic sum rule for the three acoustic modes,
          if Gamma is present. None otherwise.
          If eigendisplacements are available they are used to determine the acoustic
          modes: selects the bands corresponding  to the eigendisplacements that
          represent to a translation within tol_eigendisplacements. If these are not
          identified or eigendisplacements are missing the first 3 modes will be used
          (indices [0:3]).