|
1 | | -using CUDA, LinearAlgebra, SparseArrays, Test |
| 1 | +using LinearAlgebra, SparseArrays, Test |
2 | 2 | using SparseMatrixColorings |
3 | 3 | using ADNLPModels, ManualNLPModels, NLPModels, NLPModelsModifiers, NLPModelsTest |
4 | 4 | using ADNLPModels: |
@@ -40,109 +40,7 @@ for problem in NLPModelsTest.nls_problems |
40 | 40 | include("nls/problems/$(lowercase(problem)).jl") |
41 | 41 | end |
42 | 42 |
|
43 | | -# Additional backends used for tests |
44 | | -push!( |
45 | | - ADNLPModels.predefined_backend, |
46 | | - :zygote_backend => Dict( |
47 | | - :gradient_backend => ADNLPModels.ZygoteADGradient, |
48 | | - :jprod_backend => ADNLPModels.ZygoteADJprod, |
49 | | - :jtprod_backend => ADNLPModels.ZygoteADJtprod, |
50 | | - :hprod_backend => ADNLPModels.ForwardDiffADHvprod, |
51 | | - :jacobian_backend => ADNLPModels.ZygoteADJacobian, |
52 | | - :hessian_backend => ADNLPModels.ZygoteADHessian, |
53 | | - :ghjvprod_backend => ADNLPModels.ForwardDiffADGHjvprod, |
54 | | - :jprod_residual_backend => ADNLPModels.ZygoteADJprod, |
55 | | - :jtprod_residual_backend => ADNLPModels.ZygoteADJtprod, |
56 | | - :hprod_residual_backend => ADNLPModels.ForwardDiffADHvprod, |
57 | | - :jacobian_residual_backend => ADNLPModels.ZygoteADJacobian, |
58 | | - :hessian_residual_backend => ADNLPModels.ZygoteADHessian, |
59 | | - ), |
60 | | -) |
61 | | - |
62 | | -ReverseDiffAD(nvar, f) = ADNLPModels.ADModelBackend( |
63 | | - nvar, |
64 | | - f, |
65 | | - gradient_backend = ADNLPModels.ReverseDiffADGradient, |
66 | | - hprod_backend = ADNLPModels.ReverseDiffADHvprod, |
67 | | - jprod_backend = ADNLPModels.ReverseDiffADJprod, |
68 | | - jtprod_backend = ADNLPModels.ReverseDiffADJtprod, |
69 | | - jacobian_backend = ADNLPModels.ReverseDiffADJacobian, |
70 | | - hessian_backend = ADNLPModels.ReverseDiffADHessian, |
71 | | -) |
72 | | - |
73 | | -function test_getter_setter(nlp) |
74 | | - @test get_adbackend(nlp) == nlp.adbackend |
75 | | - if typeof(nlp) <: ADNLPModel |
76 | | - set_adbackend!(nlp, ReverseDiffAD(nlp.meta.nvar, nlp.f)) |
77 | | - elseif typeof(nlp) <: ADNLSModel |
78 | | - function F(x; nequ = nlp.nls_meta.nequ) |
79 | | - Fx = similar(x, nequ) |
80 | | - nlp.F!(Fx, x) |
81 | | - return Fx |
82 | | - end |
83 | | - set_adbackend!(nlp, ReverseDiffAD(nlp.meta.nvar, x -> sum(F(x) .^ 2))) |
84 | | - end |
85 | | - @test typeof(get_adbackend(nlp).gradient_backend) <: ADNLPModels.ReverseDiffADGradient |
86 | | - @test typeof(get_adbackend(nlp).hprod_backend) <: ADNLPModels.ReverseDiffADHvprod |
87 | | - @test typeof(get_adbackend(nlp).hessian_backend) <: ADNLPModels.ReverseDiffADHessian |
88 | | - set_adbackend!( |
89 | | - nlp, |
90 | | - gradient_backend = ADNLPModels.ForwardDiffADGradient, |
91 | | - jtprod_backend = ADNLPModels.GenericForwardDiffADJtprod(), |
92 | | - ) |
93 | | - @test typeof(get_adbackend(nlp).gradient_backend) <: ADNLPModels.ForwardDiffADGradient |
94 | | - @test typeof(get_adbackend(nlp).hprod_backend) <: ADNLPModels.ReverseDiffADHvprod |
95 | | - @test typeof(get_adbackend(nlp).jtprod_backend) <: ADNLPModels.GenericForwardDiffADJtprod |
96 | | - @test typeof(get_adbackend(nlp).hessian_backend) <: ADNLPModels.ReverseDiffADHessian |
97 | | -end |
98 | | - |
99 | | -ZygoteAD() = ADNLPModels.ADModelBackend( |
100 | | - ADNLPModels.ZygoteADGradient(), |
101 | | - ADNLPModels.GenericForwardDiffADHvprod(), |
102 | | - ADNLPModels.ZygoteADJprod(), |
103 | | - ADNLPModels.ZygoteADJtprod(), |
104 | | - ADNLPModels.ZygoteADJacobian(0), |
105 | | - ADNLPModels.ZygoteADHessian(0), |
106 | | - ADNLPModels.ForwardDiffADGHjvprod(), |
107 | | - ADNLPModels.EmptyADbackend(), |
108 | | - ADNLPModels.EmptyADbackend(), |
109 | | - ADNLPModels.EmptyADbackend(), |
110 | | - ADNLPModels.EmptyADbackend(), |
111 | | - ADNLPModels.EmptyADbackend(), |
112 | | -) |
113 | | - |
114 | | -function test_autodiff_backend_error() |
115 | | - @testset "Error without loading package - $backend" for backend in [:ZygoteAD] |
116 | | - adbackend = eval(backend)() |
117 | | - @test_throws ArgumentError gradient(adbackend.gradient_backend, sum, [1.0]) |
118 | | - @test_throws ArgumentError gradient!(adbackend.gradient_backend, [1.0], sum, [1.0]) |
119 | | - @test_throws ArgumentError jacobian(adbackend.jacobian_backend, identity, [1.0]) |
120 | | - @test_throws ArgumentError hessian(adbackend.hessian_backend, sum, [1.0]) |
121 | | - @test_throws ArgumentError Jprod!( |
122 | | - adbackend.jprod_backend, |
123 | | - [1.0], |
124 | | - [1.0], |
125 | | - identity, |
126 | | - [1.0], |
127 | | - Val(:c), |
128 | | - ) |
129 | | - @test_throws ArgumentError Jtprod!( |
130 | | - adbackend.jtprod_backend, |
131 | | - [1.0], |
132 | | - [1.0], |
133 | | - identity, |
134 | | - [1.0], |
135 | | - Val(:c), |
136 | | - ) |
137 | | - end |
138 | | -end |
139 | | - |
140 | | -# Test the argument error without loading the packages |
141 | | -test_autodiff_backend_error() |
142 | | - |
143 | | -# Automatically loads the code for Zygote with Requires |
144 | | -import Zygote |
145 | | - |
| 43 | +include("utils.jl") |
146 | 44 | include("nlp/basic.jl") |
147 | 45 | include("nls/basic.jl") |
148 | 46 | include("nlp/nlpmodelstest.jl") |
|
0 commit comments