|
699 | 699 | U = transform(t, x) |
700 | 700 | @test isfinite(logabsdet(U)[1]) |
701 | 701 | end |
| 702 | + |
| 703 | +@testset "inverse_eltype of scalar transforms with parameters" begin |
| 704 | + # `Float64` parameters and `Float32` input |
| 705 | + for t in (as(Real, 0.5, ∞), as(Real, -∞, 2.1), as(Real, 0.5, 2.1)) |
| 706 | + @test @inferred(inverse_eltype(t, 1.1f0)) === Float64 |
| 707 | + @test @inferred(inverse(t, 1.1f0)) isa Float64 |
| 708 | + end |
| 709 | + |
| 710 | + # Derivatives wrt parameters of the transforms |
| 711 | + d1 = ForwardDiff.derivative(5.3) do x |
| 712 | + return @inferred only(inverse(as(Vector, as(Real, x, ∞), 1), [10])) |
| 713 | + end |
| 714 | + d2 = ForwardDiff.derivative(5.3) do x |
| 715 | + return @inferred inverse(as(Real, x, ∞), 10) |
| 716 | + end |
| 717 | + @test d1 == d2 |
| 718 | + d1 = ForwardDiff.derivative(-3) do x |
| 719 | + return @inferred only(inverse(as(Vector, as(Real, -∞, x), 1), [-6.1])) |
| 720 | + end |
| 721 | + d2 = ForwardDiff.derivative(-3) do x |
| 722 | + return @inferred inverse(as(Real, -∞, x), -6.1) |
| 723 | + end |
| 724 | + @test d1 == d2 |
| 725 | + d1 = ForwardDiff.gradient([-0.3, 4.7]) do x |
| 726 | + return @inferred only(inverse(as(Vector, as(Real, x[1], x[2]), 1), [2.3])) |
| 727 | + end |
| 728 | + d2 = ForwardDiff.gradient([-0.3, 4.7]) do x |
| 729 | + return @inferred inverse(as(Real, x[1], x[2]), 2.3) |
| 730 | + end |
| 731 | + @test d1 == d2 |
| 732 | +end |
0 commit comments