@@ -11,10 +11,6 @@ input = [1, 2, 3]
11
11
# ===== Dense tests =====
12
12
# Arrays of Matrices
13
13
h_dense_arraymat = [[a 1 ; b 0 ], [0 0 ; 0 0 ], [a c; 1 0 ]] # empty array support required
14
- function h_dense_arraymat_julia (x)
15
- a, b, c = x
16
- return [[a[1 ] 1 ; b[1 ] 0 ], [0 0 ; 0 0 ], [a[1 ] c[1 ]; 1 0 ]]
17
- end
18
14
function h_dense_arraymat_julia! (out, x)
19
15
a, b, c = x
20
16
out[1 ] .= [a[1 ] 1 ; b[1 ] 0 ]
@@ -23,23 +19,15 @@ function h_dense_arraymat_julia!(out, x)
23
19
end
24
20
25
21
h_dense_arraymat_str = ModelingToolkit. build_function (h_dense_arraymat, [a, b, c])
26
- h_dense_arraymat_oop = eval (h_dense_arraymat_str[1 ])
27
22
h_dense_arraymat_ip! = eval (h_dense_arraymat_str[2 ])
28
23
out_1_arraymat = [Array {Int64} (undef, 2 , 2 ) for i in 1 : 3 ]
29
24
out_2_arraymat = [similar (x) for x in out_1_arraymat]
30
- julia_dense_arraymat = h_dense_arraymat_julia (input)
31
- mtk_dense_arraymat = h_dense_arraymat_oop (input)
32
- @test_broken julia_dense_arraymat == mtk_dense_arraymat
33
25
h_dense_arraymat_julia! (out_1_arraymat, input)
34
26
h_dense_arraymat_ip! (out_2_arraymat, input)
35
27
@test out_1_arraymat == out_2_arraymat
36
28
37
29
# Arrays of 1D Vectors
38
30
h_dense_arrayvec = [[a, 0 , c], [0 , 0 , 0 ], [1 , a, b]] # same for empty vectors, etc.
39
- function h_dense_arrayvec_julia (x)
40
- a, b, c = x
41
- return [[a[1 ], 0 , c[1 ]], [0 , 0 , 0 ], [1 , a[1 ], b[1 ]]]
42
- end
43
31
function h_dense_arrayvec_julia! (out, x)
44
32
a, b, c = x
45
33
out[1 ] .= [a[1 ], 0 , c[1 ]]
@@ -48,24 +36,15 @@ function h_dense_arrayvec_julia!(out, x)
48
36
end
49
37
50
38
h_dense_arrayvec_str = ModelingToolkit. build_function (h_dense_arrayvec, [a, b, c])
51
- h_dense_arrayvec_oop = eval (h_dense_arrayvec_str[1 ])
52
39
h_dense_arrayvec_ip! = eval (h_dense_arrayvec_str[2 ])
53
40
out_1_arrayvec = [Vector {Int64} (undef, 3 ) for i in 1 : 3 ]
54
41
out_2_arrayvec = [Vector {Int64} (undef, 3 ) for i in 1 : 3 ]
55
- julia_dense_arrayvec = h_dense_arrayvec_julia (input)
56
- mtk_dense_arrayvec = h_dense_arrayvec_oop (input)
57
- @test_broken julia_dense_arrayvec == mtk_dense_arrayvec
58
- mtk_dense_arrayvec = @test_broken h_dense_arrayvec_oop (input)
59
42
h_dense_arrayvec_julia! (out_1_arrayvec, input)
60
43
h_dense_arrayvec_ip! (out_2_arrayvec, input)
61
44
@test out_1_arrayvec == out_2_arrayvec
62
45
63
46
# Arrays of Arrays of Matrices
64
47
h_dense_arrayNestedMat = [[[a 1 ; b 0 ], [0 0 ; 0 0 ]], [[b 1 ; a 0 ], [b c; 0 1 ]]]
65
- function h_dense_arrayNestedMat_julia (x)
66
- a, b, c = x
67
- return [[[a[1 ] 1 ; b[1 ] 0 ], [0 0 ; 0 0 ]], [[b[1 ] 1 ; a[1 ] 0 ], [b[1 ] c[1 ]; 0 1 ]]]
68
- end
69
48
function h_dense_arrayNestedMat_julia! (out, x)
70
49
a, b, c = x
71
50
out[1 ][1 ] .= [a[1 ] 1 ; b[1 ] 0 ]
@@ -75,24 +54,16 @@ function h_dense_arrayNestedMat_julia!(out, x)
75
54
end
76
55
77
56
h_dense_arrayNestedMat_str = ModelingToolkit. build_function (h_dense_arrayNestedMat, [a, b, c])
78
- h_dense_arrayNestedMat_oop = eval (h_dense_arrayNestedMat_str[1 ])
79
57
h_dense_arrayNestedMat_ip! = eval (h_dense_arrayNestedMat_str[2 ])
80
58
out_1_arrayNestedMat = [[rand (Int64, 2 , 2 ), rand (Int64, 2 , 2 )], [rand (Int64, 2 , 2 ), rand (Int64, 2 , 2 )]] # avoid undef broadcasting issue
81
59
out_2_arrayNestedMat = [[rand (Int64, 2 , 2 ), rand (Int64, 2 , 2 )], [rand (Int64, 2 , 2 ), rand (Int64, 2 , 2 )]]
82
- julia_dense_arrayNestedMat = h_dense_arrayNestedMat_julia (input)
83
- mtk_dense_arrayNestedMat = h_dense_arrayNestedMat_oop (input)
84
- @test_broken julia_dense_arrayNestedMat == mtk_dense_arrayNestedMat
85
60
h_dense_arrayNestedMat_julia! (out_1_arrayNestedMat, input)
86
61
h_dense_arrayNestedMat_ip! (out_2_arrayNestedMat, input)
87
62
@test out_1_arrayNestedMat == out_2_arrayNestedMat
88
63
89
64
# ===== Sparse tests =====
90
65
# Array of Matrices
91
66
h_sparse_arraymat = sparse .([[a 1 ; b 0 ], [0 0 ; 0 0 ], [a c; 1 0 ]])
92
- function h_sparse_arraymat_julia (x)
93
- a, b, c = x
94
- return [sparse ([a[1 ] 1 ; b[1 ] 0 ]), sparse ([0 0 ; 0 0 ]), sparse ([a[1 ] c[1 ]; 1 0 ])] # necessary because sparse([]) is a SparseVector, not SparseMatrix
95
- end
96
67
function h_sparse_arraymat_julia! (out, x)
97
68
a, b, c = x
98
69
out[1 ][1 , 1 ] = a[1 ]
@@ -105,24 +76,16 @@ function h_sparse_arraymat_julia!(out, x)
105
76
end
106
77
107
78
h_sparse_arraymat_str = ModelingToolkit. build_function (h_sparse_arraymat, [a, b, c])
108
- h_sparse_arraymat_oop = eval (h_sparse_arraymat_str[1 ])
109
79
h_sparse_arraymat_ip! = eval (h_sparse_arraymat_str[2 ])
110
80
h_sparse_arraymat_sparsity_patterns = map (get_sparsity_pattern, h_sparse_arraymat)
111
81
out_1_arraymat = [similar (h) for h in h_sparse_arraymat_sparsity_patterns]
112
82
out_2_arraymat = [similar (h) for h in h_sparse_arraymat_sparsity_patterns] # can't do similar() because it will just be #undef, with the wrong sparsity pattern
113
- julia_sparse_arraymat = h_sparse_arraymat_julia (input)
114
- mtk_sparse_arraymat = h_sparse_arraymat_oop (input)
115
- @test_broken julia_sparse_arraymat == mtk_sparse_arraymat
116
83
h_sparse_arraymat_julia! (out_1_arraymat, input)
117
84
h_sparse_arraymat_ip! (out_2_arraymat, input)
118
85
@test out_1_arraymat == out_2_arraymat
119
86
120
87
# Array of 1D Vectors
121
88
h_sparse_arrayvec = sparse .([[a, 0 , c], [0 , 0 , 0 ], [1 , a, b]])
122
- function h_sparse_arrayvec_julia (x)
123
- a, b, c = x
124
- return sparse .([[a[1 ], 0 , c[1 ]], [0 , 0 , 0 ], [1 , a[1 ], b[1 ]]])
125
- end
126
89
function h_sparse_arrayvec_julia! (out, x)
127
90
a, b, c = x
128
91
out[1 ][1 ] = a[1 ]
@@ -134,24 +97,16 @@ function h_sparse_arrayvec_julia!(out, x)
134
97
end
135
98
136
99
h_sparse_arrayvec_str = ModelingToolkit. build_function (h_sparse_arrayvec, [a, b, c])
137
- h_sparse_arrayvec_oop = eval (h_sparse_arrayvec_str[1 ])
138
100
h_sparse_arrayvec_ip! = eval (h_sparse_arrayvec_str[2 ])
139
101
h_sparse_arrayvec_sparsity_patterns = map (get_sparsity_pattern, h_sparse_arrayvec)
140
102
out_1_arrayvec = [similar (h) for h in h_sparse_arrayvec_sparsity_patterns]
141
103
out_2_arrayvec = [similar (h) for h in h_sparse_arrayvec_sparsity_patterns]
142
- julia_sparse_arrayvec = h_sparse_arrayvec_julia (input)
143
- mtk_sparse_arrayvec = h_sparse_arrayvec_oop (input)
144
- @test_broken julia_sparse_arrayvec == mtk_sparse_arrayvec
145
104
h_sparse_arrayvec_julia! (out_1_arrayvec, input)
146
105
h_sparse_arrayvec_ip! (out_2_arrayvec, input)
147
106
@test out_1_arrayvec == out_2_arrayvec
148
107
149
108
# Arrays of Arrays of Matrices
150
109
h_sparse_arrayNestedMat = [sparse .([[a 1 ; b 0 ], [0 0 ; 0 0 ]]), sparse .([[b 1 ; a 0 ], [b c; 0 1 ]])]
151
- function h_sparse_arrayNestedMat_julia (x)
152
- a, b, c = x
153
- return [sparse .([[a[1 ] 1 ; b[1 ] 0 ], [0 0 ; 0 0 ]]), sparse .([[b[1 ] 1 ; a[1 ] 0 ], [b[1 ] c[1 ]; 0 1 ]])]
154
- end
155
110
function h_sparse_arrayNestedMat_julia! (out, x)
156
111
a, b, c = x
157
112
out[1 ][1 ][1 , 1 ] = a[1 ]
@@ -167,14 +122,10 @@ function h_sparse_arrayNestedMat_julia!(out, x)
167
122
end
168
123
169
124
h_sparse_arrayNestedMat_str = ModelingToolkit. build_function (h_sparse_arrayNestedMat, [a, b, c])
170
- h_sparse_arrayNestedMat_oop = eval (h_sparse_arrayNestedMat_str[1 ])
171
125
h_sparse_arrayNestedMat_ip! = eval (h_sparse_arrayNestedMat_str[2 ])
172
126
h_sparse_arrayNestedMat_sparsity_patterns = [map (get_sparsity_pattern, h) for h in h_sparse_arrayNestedMat]
173
127
out_1_arrayNestedMat = [[similar (h_sub) for h_sub in h] for h in h_sparse_arrayNestedMat_sparsity_patterns]
174
128
out_2_arrayNestedMat = [[similar (h_sub) for h_sub in h] for h in h_sparse_arrayNestedMat_sparsity_patterns]
175
- julia_sparse_arrayNestedMat = h_sparse_arrayNestedMat_julia (input)
176
- mtk_sparse_arrayNestedMat = h_sparse_arrayNestedMat_oop (input)
177
- @test_broken julia_sparse_arrayNestedMat == mtk_sparse_arrayNestedMat
178
129
h_sparse_arrayNestedMat_julia! (out_1_arrayNestedMat, input)
179
130
h_sparse_arrayNestedMat_ip! (out_2_arrayNestedMat, input)
180
131
@test out_1_arrayNestedMat == out_2_arrayNestedMat
@@ -184,26 +135,20 @@ h_sparse_arrayNestedMat_ip!(out_2_arrayNestedMat, input)
184
135
# Arrays of Matrices
185
136
h_empty = [[a b; c 0 ], Array {Expression,2} (undef, 0 ,0 )]
186
137
h_empty_str = ModelingToolkit. build_function (h_empty, [a, b, c])
187
- h_empty_oop = eval (h_empty_str[1 ])
188
138
h_empty_ip! = eval (h_empty_str[2 ])
189
- @test_broken h_empty_oop (input) == [[1 2 ; 3 0 ], Array {Int64,2} (undef,0 ,0 )]
190
139
out = [Matrix {Int64} (undef, 2 , 2 ), Matrix {Int64} (undef, 0 , 0 )]
191
140
h_empty_ip! (out, input) # should just not fail
192
141
193
142
# Array of Vectors
194
143
h_empty_vec = [[a, b, c, 0 ], Vector {Expression} (undef,0 )]
195
144
h_empty_vec_str = ModelingToolkit. build_function (h_empty_vec, [a, b, c])
196
- h_empty_vec_oop = eval (h_empty_vec_str[1 ])
197
145
h_empty_vec_ip! = eval (h_empty_vec_str[2 ])
198
- @test_broken h_empty_vec_oop (input) == [[1 , 2 , 3 , 0 ], Vector {Int64} (undef,0 )]
199
146
out = [Vector {Int64} (undef, 4 ), Vector {Int64} (undef, 0 )]
200
147
h_empty_vec_ip! (out, input) # should just not fail
201
148
202
149
# Arrays of Arrays of Matrices
203
150
h_emptyNested = [[[a b; c 0 ]], Array {Array{Expression, 2}} (undef, 0 )] # emptyNested array of arrays
204
151
h_emptyNested_str = ModelingToolkit. build_function (h_emptyNested, [a, b, c])
205
- h_emptyNested_oop = eval (h_emptyNested_str[1 ])
206
152
h_emptyNested_ip! = eval (h_emptyNested_str[2 ])
207
- @test_broken h_emptyNested_oop (input) == [[[1 2 ; 3 0 ]], Array {Array{Int64, 2}} (undef, 0 )]
208
153
out = [[[1 2 ;3 4 ]], Array {Array{Int64,2},1} (undef, 0 )]
209
154
h_emptyNested_ip! (out, input) # should just not fail
0 commit comments