def sandwich_demo():
  x, y = sandwich_data()
  knn = nearest_neighbors(x, k=2)
  ax = pyplot.subplot(3, 1, 1)  # take the whole top row
  plot_sandwich_data(x, y, ax)
  plot_neighborhood_graph(x, knn, y, ax)
  ax.set_title('input space')
  ax.set_aspect('equal')
  ax.set_xticks([])
  ax.set_yticks([])

  num_constraints = 60
  mls = [
      (LMNN(), (x, y)),
      (ITML(), (x, ITML.prepare_constraints(y, len(x), num_constraints))),
      (SDML(), (x, SDML.prepare_constraints(y, len(x), num_constraints))),
      (LSML(), (x, LSML.prepare_constraints(y, num_constraints)))
  ]

  for ax_num, (ml,args) in zip(xrange(3,7), mls):
    ml.fit(*args)
    tx = ml.transform()
    ml_knn = nearest_neighbors(tx, k=2)
    ax = pyplot.subplot(3,2,ax_num)
    plot_sandwich_data(tx, y, ax)
    plot_neighborhood_graph(tx, ml_knn, y, ax)
    ax.set_title(ml.__class__.__name__ % '%s space')
    ax.set_xticks([])
    ax.set_yticks([])
  pyplot.show()


# TODO: use this somewhere
dataset/ETHPy150Open all-umass/metric-learn/examples/sandwich.py/sandwich_demo/swapped operands of `%`