2323const LU_ROW_MAXIMUM = VERSION >= v " 1.7.0-DEV.1188" ? RowMaximum () : Val (true )
2424const LU_NO_PIVOT = VERSION >= v " 1.7.0-DEV.1188" ? NoPivot () : Val (false )
2525
26+ const CHOLESKY_NO_PIVOT = VERSION >= v " 1.8.0-rc1" ? NoPivot () : Val (false )
27+
2628# well-conditioned random n×n matrix with elements of type `T` for testing `eigen`
2729function rand_eigen (T:: Type , n:: Int )
2830 # uniform distribution over `(-1, 1)` / `(-1, 1)^2`
394396
395397 @testset " Diagonal" begin
396398 @testset " Diagonal{<:Real}" begin
397- test_rrule (cholesky, Diagonal ([0.3 , 0.2 , 0.5 , 0.6 , 0.9 ]), Val ( false ) )
399+ test_rrule (cholesky, Diagonal ([0.3 , 0.2 , 0.5 , 0.6 , 0.9 ]), CHOLESKY_NO_PIVOT )
398400 end
399401 @testset " Diagonal{<:Complex}" begin
400402 # finite differences in general will produce matrices with non-real
@@ -403,26 +405,26 @@ end
403405 D = Diagonal ([0.3 + 0im , 0.2 , 0.5 , 0.6 , 0.9 ])
404406 C = cholesky (D)
405407 test_rrule (
406- cholesky, D, Val ( false ) ;
408+ cholesky, D, CHOLESKY_NO_PIVOT ;
407409 output_tangent= Tangent {typeof(C)} (factors= complex (randn (5 , 5 ))),
408410 fkwargs= (; check= false ),
409411 )
410412 end
411413 @testset " check has correct default and passed to primal" begin
412- @test_throws Exception rrule (cholesky, Diagonal (- rand (5 )), Val ( false ) )
413- rrule (cholesky, Diagonal (- rand (5 )), Val ( false ) ; check= false )
414+ @test_throws Exception rrule (cholesky, Diagonal (- rand (5 )), CHOLESKY_NO_PIVOT )
415+ rrule (cholesky, Diagonal (- rand (5 )), CHOLESKY_NO_PIVOT ; check= false )
414416 end
415417 @testset " failed factorization" begin
416418 A = Diagonal (vcat (rand (4 ), - rand (4 ), rand (4 )))
417- test_rrule (cholesky, A, Val ( false ) ; fkwargs= (; check= false ))
419+ test_rrule (cholesky, A, CHOLESKY_NO_PIVOT ; fkwargs= (; check= false ))
418420 end
419421 end
420422
421423 @testset " StridedMatrix" begin
422424 @testset " Matrix{$T }" for T in (Float64, ComplexF64)
423425 X = generate_well_conditioned_matrix (T, 10 )
424426 V = generate_well_conditioned_matrix (T, 10 )
425- F, dX_pullback = rrule (cholesky, X, Val ( false ) )
427+ F, dX_pullback = rrule (cholesky, X, CHOLESKY_NO_PIVOT )
426428 @testset " uplo=$p , cotangent eltype=$T " for p in [:U , :L ], S in unique ([T, complex (T)])
427429 Y, dF_pullback = rrule (getproperty, F, p)
428430 Ȳ = randn (S, size (Y))
@@ -447,22 +449,22 @@ end
447449 @testset " check has correct default and passed to primal" begin
448450 # this will almost certainly be a non-PD matrix
449451 X = Matrix (Symmetric (randn (10 , 10 )))
450- @test_throws Exception rrule (cholesky, X, Val ( false ) )
451- rrule (cholesky, X, Val ( false ) ; check= false ) # just check it doesn't throw
452+ @test_throws Exception rrule (cholesky, X, CHOLESKY_NO_PIVOT )
453+ rrule (cholesky, X, CHOLESKY_NO_PIVOT ; check= false ) # just check it doesn't throw
452454 end
453455 end
454456
455457 # Ensure that cotangents of cholesky(::StridedMatrix) and
456458 # (cholesky ∘ Symmetric)(::StridedMatrix) are equal.
457459 @testset " Symmetric" begin
458460 X = generate_well_conditioned_matrix (10 )
459- F, dX_pullback = rrule (cholesky, X, Val ( false ) )
461+ F, dX_pullback = rrule (cholesky, X, CHOLESKY_NO_PIVOT )
460462 ΔU = randn (size (X))
461463 ΔF = Tangent {typeof(F)} (; factors= ΔU)
462464
463465 @testset for uplo in (:L , :U )
464466 X_symmetric, sym_back = rrule (Symmetric, X, uplo)
465- C, chol_back_sym = rrule (cholesky, X_symmetric, Val ( false ) )
467+ C, chol_back_sym = rrule (cholesky, X_symmetric, CHOLESKY_NO_PIVOT )
466468
467469 ΔC = Tangent {typeof(C)} (; factors= (uplo === :U ? ΔU : ΔU' ))
468470 ΔX_symmetric = chol_back_sym (ΔC)[2 ]
@@ -479,13 +481,13 @@ end
479481 @testset " Hermitian" begin
480482 @testset " Hermitian{$T }" for T in (Float64, ComplexF64)
481483 X = generate_well_conditioned_matrix (T, 10 )
482- F, dX_pullback = rrule (cholesky, X, Val ( false ) )
484+ F, dX_pullback = rrule (cholesky, X, CHOLESKY_NO_PIVOT )
483485 ΔU = randn (T, size (X))
484486 ΔF = Tangent {typeof(F)} (; factors= ΔU)
485487
486488 @testset for uplo in (:L , :U )
487489 X_hermitian, herm_back = rrule (Hermitian, X, uplo)
488- C, chol_back_herm = rrule (cholesky, X_hermitian, Val ( false ) )
490+ C, chol_back_herm = rrule (cholesky, X_hermitian, CHOLESKY_NO_PIVOT )
489491
490492 ΔC = Tangent {typeof(C)} (; factors= (uplo === :U ? ΔU : ΔU' ))
491493 ΔX_hermitian = chol_back_herm (ΔC)[2 ]
499501 @testset " check has correct default and passed to primal" begin
500502 # this will almost certainly be a non-PD matrix
501503 X = Hermitian (randn (10 , 10 ))
502- @test_throws Exception rrule (cholesky, X, Val ( false ) )
503- rrule (cholesky, X, Val ( false ) ; check= false )
504+ @test_throws Exception rrule (cholesky, X, CHOLESKY_NO_PIVOT )
505+ rrule (cholesky, X, CHOLESKY_NO_PIVOT ; check= false )
504506 end
505507 end
506508
0 commit comments