code: def generate_sl_transformation_sets(self, film_area, substrate_area):
          
          transformation_indicies = [(i, j)
                                     for i in range(1, int(self.max_area / film_area))
                                     for j in range(1, int(self.max_area / substrate_area))
                                     if np.absolute(film_area / substrate_area - float(j) / i) < self.max_area_ratio_tol]
  
          # Sort sets by the square of the matching area and yield in order
          # from smallest to largest
          for x in sorted(transformation_indicies, key=lambda x: x[0] * x[1]):
              yield (gen_sl_transform_matricies(x[0]),
                     gen_sl_transform_matricies(x[1]))
docs: Generates transformation sets for film/substrate pair given the
          area of the unit cell area for the film and substrate. The
          transformation sets map the film and substrate unit cells to super
          lattices with a maximum area
  
          Args:
              film_area(int): the unit cell area for the film
              substrate_area(int): the unit cell area for the substrate
  
          Returns:
              transformation_sets: a set of transformation_sets defined as:
                  1.) the transformation matricies for the film to create a
                  super lattice of area i*film area
                  2.) the tranformation matricies for the substrate to create
                  a super lattice of area j*film area