|  | 
| 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(ModelingToolkit.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