y = jnp.tile(jnp.arange(10), 8) # eight samples per class
guided = {}
print(f'{"gamma":>5} {"class agreement":>16} {"within-class distance":>22}')
for gamma in (1.0, 2.0, 4.0):
guided[gamma] = sample(ema, y, gamma, seed=2).clip(-1, 1)
agree = (classifier(guided[gamma]).argmax(1) == y).mean()
flat = guided[gamma].reshape(80, -1)
dist = jnp.mean(jnp.array([
jnp.linalg.norm(flat[y == c][:, None] - flat[y == c][None], axis=-1).sum()
/ 56 for c in range(10)])) # 8 samples: 56 ordered pairs per class
print(f'{gamma:>5.1f} {agree:>16.3f} {dist:>22.2f}')