code: def apply_transformation(self, structure):
          
          if structure.is_ordered:
              return structure
  
          species = [dict(sp) for sp in structure.species_and_occu]
  
          for sp in species:
              for k, v in sp.items():
                  old_occ = sp[k]
                  new_occ = float(
                      Fraction(old_occ).limit_denominator(self.max_denominator))
                  if self.fix_denominator:
                      new_occ = around(old_occ*self.max_denominator)\
                          / self.max_denominator
                  if round(abs(old_occ - new_occ), 6) > self.tol:
                      raise RuntimeError(
                          "Cannot discretize structure within tolerance!")
                  sp[k] = new_occ
  
          return Structure(structure.lattice, species, structure.frac_coords)
docs: Discretizes the site occupancies in the structure.
  
          Args:
              structure: disordered Structure to discretize occupancies
  
          Returns:
              A new disordered Structure with occupancies discretized