code: def hkl_transformation(transf, miller_index):
      
      # Get a matrix of whole numbers (ints)
      lcm = lambda a, b: a * b // math.gcd(a, b)
      reduced_transf = reduce(lcm, [int(1 / i) for i in itertools.chain(*transf) if i != 0]) * transf
      reduced_transf = reduced_transf.astype(int)
  
      # perform the transformation
      t_hkl = np.dot(reduced_transf, miller_index)
      d = abs(reduce(gcd, t_hkl))
      t_hkl = np.array([int(i / d) for i in t_hkl])
  
      # get mostly positive oriented Miller index
      if len([i for i in t_hkl if i < 0]) > 1:
          t_hkl *= -1
  
      return tuple(t_hkl)
docs: Returns the Miller index from setting
      A to B using a transformation matrix
      Args:
          transf (3x3 array): The transformation matrix
              that transforms a lattice of A to B
          miller_index ([h, k, l]): Miller index to transform to setting B