@@ -485,12 +485,8 @@ def subsequence(self, a, b):
485
485
# suffices as well.
486
486
kernel = list (b )
487
487
488
- def prepend_zeros (T , d , zero ):
489
- di = kernel .index (d )
490
- return di * [zero ] + T
491
-
492
488
zero_M = self .mu [0 ].parent ().zero ()
493
- zero_L = self .left .parent ().zero ()
489
+ zero_R = self .right .parent ().zero ()
494
490
495
491
blocks = {r : [] for r in A }
496
492
ci = 0
@@ -507,21 +503,19 @@ def prepend_zeros(T, d, zero):
507
503
d , f = (a * r + c ).quo_rem (k )
508
504
if d not in kernel :
509
505
kernel .append (d )
510
- blocks [r ].append (prepend_zeros ([ self .mu [f ]], d , zero_M ) )
506
+ blocks [r ].append (kernel . index ( d ) * [ zero_M ] + [ self .mu [f ]])
511
507
ci += 1
512
508
513
509
result = P .element_class (
514
510
P ,
515
511
{r : Matrix .block ([pad_right (row , len (kernel ), zero = zero_M )
516
512
for row in blocks [r ]])
517
513
for r in A },
518
- sum (c_j * vector (chain .from_iterable (
519
- pad_right (prepend_zeros ([self .left ], b_j , zero_L ),
520
- len (kernel ), zero = zero_L )))
521
- for b_j , c_j in b .items ()),
522
514
vector (chain .from_iterable (
523
- (self .__getitem__ (c , multiply_left = False )
524
- if c >= 0 else dim * (zero ,))
515
+ b .get (c , 0 )* self .left
516
+ for c in kernel )),
517
+ vector (chain .from_iterable (
518
+ (self .__getitem__ (c , multiply_left = False ) if c >= 0 else zero_R )
525
519
for c in kernel )))
526
520
527
521
return result
0 commit comments