Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
Fixes #4511
Lower _linalg_svd
This change lowers _linalg_svd by mostly reusing the existing svd lowering. However, there are a couple of notable differences between these two ops:
someis the opposite of torch.linalg.svd()'sfull_matrices. Note that default value for both is True, so the default behavior is effectively the opposite.compute_uvis False, torch.svd() returns zero-filled tensors for U and Vh, whereas torch.linalg.svd() returns empty tensors.As a result of this change, we also disable the following ops in xla/test/test_ops.py:
geqrflinalg.detlinalg.inv_exlinalg.matrix_ranklinalg.svdlinalg.svdvalsThese ops all call into the newly lowered
_linalg_svdand cause failure:Slice dim size 1 greater than dynamic slice dimension: 0. This failure seems to be also happening in our master branch for the already lowered opsvd. In xla/test/test_ops.py, ops such assvd,pinverse, ornuclear_normthat callsvdare failing due to the same error and are disabled. However, to ensure correctness for the newly lowered_linalg_svd, this PR adds unit tests and does not cause any regressing cpp test failures.