# Modeling Toolkit - parameters type conversion issue

**URL:** https://discourse.julialang.org/t/modeling-toolkit-parameters-type-conversion-issue/125255
**Category:** Modelling & Simulations
**Tags:** question
**Created:** [January 27, 2025, 10:58am UTC](https://discourse.julialang.org/t/modeling-toolkit-parameters-type-conversion-issue/125255 "2025-01-27T10:58:12Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![NinaOmejc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ninaomejc/32/214448_2.png) [@NinaOmejc](https://discourse.julialang.org/u/NinaOmejc)
#### Post date: [January 27, 2025, 10:58am UTC](https://discourse.julialang.org/t/modeling-toolkit-parameters-type-conversion-issue/125255/1 "2025-01-27T10:58:12Z")

</div>

I am trying to optimize my code and remove types Any. However, I am stuck with one within Modeling Toolkit. The code below shows the problem. When calling System function, sometimes I get parameters of type “Vector{Num}” and sometimes of type Vector{SymbolicUtils.BasicSymbolic{Real}}. I have tried a few versions and am unsure how to make it consistent, so the type doesn’t turn to Any after composing multiple systems together. Any suggestion would be greatly appreciated.

```julia
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D

# individual node dynamics
n_params = 2
@parameters p[1:n_params]
@variables x₁(t) [output=true] x₂(t) I(t) [input=true]

eqs = [D(x₁) ~ x₂,
       D(x₂) ~ -(p[1] + p[2]) * x₂ - (p[1] * p[2]) * x₁ + I
    ]

node1 = System(eqs, t, [x₁, x₂, I], p; name=:Node1)
node2 = System(eqs, t, [x₁, x₂, I], p; name=:Node2)

# connection dynamics
n_nodes = 2
adjacency_matrix = zeros(n_nodes, n_nodes)
adjacency_matrix = [0 1; # only node 1 receives input from node 2
                    0 0] 

@parameters A[1:n_nodes,1:n_nodes]=adjacency_matrix σ=1.0
connection_eqs = [Equation(node1.I, A[1, 1] * node2.x₁ + σ), Equation(node2.I, 0.)]
combined_params = vcat(vec(A), σ)
input_output_vars = [node1.I, node2.x₁]
connectivity_sys = System(connection_eqs, t, input_output_vars, combined_params; name=:connection_sys);

# combine node and connection dynamics
combined_sys = structural_simplify(compose(connectivity_sys, [node1, node2]))

# print types of parameters
println("Type of parameters in node1: ", typeof(parameters(node1)))
println("Type of parameters in node2: ", typeof(parameters(node2)))
println("Type of parameters in combined_params (before connectivity_sys): ", typeof(combined_params))
println("Type of parameters in connectivity_sys: ", typeof(parameters(connectivity_sys)))
println("Type of parameters in combined_sys: ", typeof(parameters(combined_sys)))

```

The response is:

```julia
Type of parameters in node1: Vector{Num}
Type of parameters in node2: Vector{Num}
Type of parameters in combined_params (before connectivity_sys): Vector{Num}
Type of parameters in connectivity_sys: Vector{SymbolicUtils.BasicSymbolic{Real}}
Type of parameters in combined_sys: Vector{Any}

```

Thank you.
