@@ -9,16 +9,22 @@ class NoMemAllocVertcat:
9
9
Acts like a vertcat, but does not allocate new memory.
10
10
"""
11
11
12
- def __init__ (self , xs , ys , len_x = None , len_y = None , items = None ):
12
+ def __init__ (self , xs , zs , len_x = None , len_z = None , items = None ):
13
13
self .xs = xs
14
- self .ys = ys
14
+ self .zs = zs
15
15
self .len_x = len_x or xs [0 ].shape [0 ]
16
- self .len_y = len_y or ys [0 ].shape [0 ]
16
+ self .len_z = len_z or zs [0 ].shape [0 ]
17
17
len_items = len (xs )
18
- self .shape = (self .len_x + self .len_y , len_items )
18
+ self .shape = (self .len_x + self .len_z , len_items )
19
19
20
20
if items is None :
21
21
items = [None ] * len_items
22
+ for idx in range (len_items ):
23
+ out = casadi .DM .zeros ((self .shape [0 ], 1 ))
24
+ out [: self .len_x ] = self .xs [idx ]
25
+ out [self .len_x :] = self .zs [idx ]
26
+ items [idx ] = out
27
+
22
28
self .items = items
23
29
24
30
def __getitem__ (self , idx ):
@@ -29,15 +35,7 @@ def __getitem__(self, idx):
29
35
idx = idx [1 ]
30
36
if isinstance (idx , slice ):
31
37
return NoMemAllocVertcat (
32
- self .xs [idx ], self .ys [idx ], self .len_x , self .len_y , self .items [idx ]
38
+ self .xs [idx ], self .zs [idx ], self .len_x , self .len_z , self .items [idx ]
33
39
)
34
40
else :
35
- item = self .items [idx ]
36
- if item is not None :
37
- return item
38
- else :
39
- out = casadi .DM .zeros ((self .shape [0 ], 1 ))
40
- out [: self .len_x ] = self .xs [idx ]
41
- out [self .len_x :] = self .ys [idx ]
42
- self .items [idx ] = out
43
- return out
41
+ return self .items [idx ]
0 commit comments