Yeah, I definitely understand and agree with your point about coming from the world of floating-point programming!
The +ve/-ve sign discrepancy doesn’t seem to happen with numpy.linalg.eig() and torch.eig(), ie. the +ve/-ve eigenvalue signs are the same/consistent between numpy.linalg.eigh() and numpy.linalg.eig() and torch.eig(). Would be great if we could change torch.symeig() to be the same too, since torch.symeig() is written specifically for symmetric matrices, mirroring numpy.linalg.eigh(). More importantly, would be nice to have some consistency across the board