code: def _preprocess(self, struct1, struct2, niggli=True):
          
          struct1 = struct1.copy()
          struct2 = struct2.copy()
  
          if niggli:
              struct1 = struct1.get_reduced_structure(reduction_algo="niggli")
              struct2 = struct2.get_reduced_structure(reduction_algo="niggli")
  
          # primitive cell transformation
          if self._primitive_cell:
              struct1 = struct1.get_primitive_structure()
              struct2 = struct2.get_primitive_structure()
  
          if self._supercell:
              fu, s1_supercell = self._get_supercell_size(struct1, struct2)
          else:
              fu, s1_supercell = 1, True
          mult = fu if s1_supercell else 1/fu
  
          # rescale lattice to same volume
          if self._scale:
              ratio = (struct2.volume / (struct1.volume * mult)) ** (1 / 6)
              nl1 = Lattice(struct1.lattice.matrix * ratio)
              struct1.lattice = nl1
              nl2 = Lattice(struct2.lattice.matrix / ratio)
              struct2.lattice = nl2
  
          return struct1, struct2, fu, s1_supercell
docs: Rescales, finds the reduced structures (primitive and niggli),
          and finds fu, the supercell size to make struct1 comparable to
          s2