The thing I don’t understand is that using forward with
        Z = pself.forward(self.X) + 1e-9
        [...]
        C = S.backward(torch.ones_like(S))
        print(self.X.grad)


yields None, while
        Z = pself.forward(x) + 1e-9
        [...]
        C = S.backward(torch.ones_like(S))
        print(x)


gives me a gradient