| 
390 | 390 |     @test !any(isequal(p[1]), parameters(sys))  | 
391 | 391 |     @test is_parameter(sys, p)  | 
392 | 392 | end  | 
 | 393 | + | 
 | 394 | +@testset "Can convert from `ODESystem`" begin  | 
 | 395 | +    @variables x(t) y(t)  | 
 | 396 | +    @parameters p q r  | 
 | 397 | +    @named sys = ODESystem([D(x) ~ p * x^3 + q, 0 ~ -y + q * x - r], t;  | 
 | 398 | +        defaults = [x => 1.0, p => missing], guesses = [p => 1.0],  | 
 | 399 | +        initialization_eqs = [p^3 + q^3 ~ 4r], parameter_dependencies = [r ~ 3p])  | 
 | 400 | +    nlsys = NonlinearSystem(sys)  | 
 | 401 | +    defs = defaults(nlsys)  | 
 | 402 | +    @test length(defs) == 3  | 
 | 403 | +    @test defs[x] == 1.0  | 
 | 404 | +    @test defs[p] === missing  | 
 | 405 | +    @test isinf(defs[t])  | 
 | 406 | +    @test length(guesses(nlsys)) == 1  | 
 | 407 | +    @test guesses(nlsys)[p] == 1.0  | 
 | 408 | +    @test length(initialization_equations(nlsys)) == 1  | 
 | 409 | +    @test length(parameter_dependencies(nlsys)) == 1  | 
 | 410 | +    @test length(equations(nlsys)) == 2  | 
 | 411 | +    @test all(iszero, [eq.lhs for eq in equations(nlsys)])  | 
 | 412 | +    @test nameof(nlsys) == nameof(sys)  | 
 | 413 | +    @test !ModelingToolkit.iscomplete(nlsys)  | 
 | 414 | + | 
 | 415 | +    sys1 = complete(sys; split = false)  | 
 | 416 | +    nlsys = NonlinearSystem(sys1)  | 
 | 417 | +    @test ModelingToolkit.iscomplete(nlsys)  | 
 | 418 | +    @test !ModelingToolkit.is_split(nlsys)  | 
 | 419 | + | 
 | 420 | +    sys2 = complete(sys)  | 
 | 421 | +    nlsys = NonlinearSystem(sys2)  | 
 | 422 | +    @test ModelingToolkit.iscomplete(nlsys)  | 
 | 423 | +    @test ModelingToolkit.is_split(nlsys)  | 
 | 424 | + | 
 | 425 | +    sys3 = structural_simplify(sys)  | 
 | 426 | +    nlsys = NonlinearSystem(sys3)  | 
 | 427 | +    @test length(equations(nlsys)) == length(observed(nlsys)) == 1  | 
 | 428 | + | 
 | 429 | +    prob = NonlinearProblem(sys3, [q => 2.0])  | 
 | 430 | +    @test prob.f.initialization_data.initializeprobmap === nothing  | 
 | 431 | +    sol = solve(prob)  | 
 | 432 | +    @test SciMLBase.successful_retcode(sol)  | 
 | 433 | +    @test sol.ps[p^3 + q^3]≈sol.ps[4r] atol=1e-10  | 
 | 434 | + | 
 | 435 | +    @testset "Differential inside expression also substituted" begin  | 
 | 436 | +        @named sys = ODESystem([0 ~ y * D(x) + x^2 - p, 0 ~ x * D(y) + y * p], t)  | 
 | 437 | +        nlsys = NonlinearSystem(sys)  | 
 | 438 | +        vs = ModelingToolkit.vars(equations(nlsys))  | 
 | 439 | +        @test !in(D(x), vs)  | 
 | 440 | +        @test !in(D(y), vs)  | 
 | 441 | +    end  | 
 | 442 | +end  | 
0 commit comments