@@ -12,23 +12,42 @@ _wrap_layers(xs::Tuple) = map(_wrap_layer, xs)
1212 return inp, tuple (new_st_parts... )
1313end
1414
15- function _asvec (comp, n_layers:: Integer )
16- if comp === ()
17- return ntuple (_ -> nothing , n_layers)
18- elseif comp isa Tuple || comp isa AbstractVector
19- len = length (comp)
20- if len == n_layers
21- return Tuple (comp)
22- elseif len == 1
23- return ntuple (_ -> comp[1 ], n_layers)
24- else
25- error (" Expected length $n_layers or 1, got $len " )
26- end
15+ @inline function _fillvec (x, n:: Integer )
16+ v = Vector {typeof(x)} (undef, n)
17+ @inbounds @simd for i in 1 : n
18+ v[i] = x
19+ end
20+ return v
21+ end
22+
23+ @inline _asvec (:: Tuple{} , n:: Integer ) = _fillvec (nothing , n)
24+
25+ @inline function _asvec (comp:: Tuple , n:: Integer )
26+ len = length (comp)
27+ if len == n
28+ return collect (comp)
29+ elseif len == 1
30+ return _fillvec (comp[1 ], n)
31+ else
32+ error (" Expected length $n or 1, got $len " )
33+ end
34+ end
35+
36+ @inline function _asvec (comp:: AbstractVector , n:: Integer )
37+ len = length (comp)
38+ if len == n
39+ return collect (comp)
40+ elseif len == 1
41+ return _fillvec (comp[1 ], n)
2742 else
28- return ntuple (_ -> comp, n_layers )
43+ error ( " Expected length $n or 1, got $len " )
2944 end
3045end
3146
47+ @inline _asvec (:: Nothing , n:: Integer ) = _fillvec (nothing , n)
48+
49+ @inline _asvec (comp, n:: Integer ) = _fillvec (comp, n)
50+
3251@inline _asvec (x) = (ndims (x) == 2 ? vec (x) : x)
3352
3453function _coerce_layer_mods (x)
0 commit comments