def project(cls, X, alpha, k): return sparsemax(X, dim=-1, k=k)
def test_sparsemax(): x = 0.5 * torch.randn(4, 6, dtype=torch.float32) p1 = sparsemax(x, 1) p2 = sparsemax_bisect(x) assert torch.sum((p1 - p2) ** 2) < 1e-7
def forward(self, probs, dim: int = -1): logits = torch.log(probs + _EPS) if self._add_gumbel_noise: logits = self._gumbel_noise(logits=logits) return sparsemax(logits, dim=dim)