code: def get_equiv_transformations(self, transformation_sets, film_vectors,
                                    substrate_vectors):
          
  
          for (film_transformations, substrate_transformations) in \
                  transformation_sets:
              # Apply transformations and reduce using Zur reduce methodology
              films = [reduce_vectors(*np.dot(f, film_vectors)) for f in film_transformations]
  
              substrates = [reduce_vectors(*np.dot(s, substrate_vectors)) for s in substrate_transformations]
  
              # Check if equivelant super lattices
              for f, s in product(films, substrates):
                  if self.is_same_vectors(f, s):
                      yield [f, s]
docs: Applies the transformation_sets to the film and substrate vectors
          to generate super-lattices and checks if they matches.
          Returns all matching vectors sets.
  
          Args:
              transformation_sets(array): an array of transformation sets:
                  each transformation set is an array with the (i,j)
                  indicating the area multipes of the film and subtrate it
                  corresponds to, an array with all possible transformations
                  for the film area multiple i and another array for the
                  substrate area multiple j.
  
              film_vectors(array): film vectors to generate super lattices
              substrate_vectors(array): substrate vectors to generate super
                  lattices