Skip to content

Commit 6e2acb0

Browse files
committed
Trac #21325 review comment 8: more rewriting to use block structure
1 parent f7cacfe commit 6e2acb0

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

src/sage/combinat/k_regular_sequence.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,9 @@ def subsequence(self, a, b):
453453
...
454454
ValueError: a=-1 is not nonnegative.
455455
"""
456+
from itertools import chain
456457
from sage.rings.integer_ring import ZZ
458+
457459
zero = ZZ(0)
458460
a = ZZ(a)
459461
if not isinstance(b, dict):
@@ -483,11 +485,12 @@ def subsequence(self, a, b):
483485
# suffices as well.
484486
kernel = list(b)
485487

486-
def pad(T, d):
488+
def prepend_zeros(T, d, zero):
487489
di = kernel.index(d)
488-
return (di*dim)*(0,) + T
490+
return di*[zero] + T
489491

490-
Z = self.mu[0].parent().zero()
492+
zero_M = self.mu[0].parent().zero()
493+
zero_L = self.left.parent().zero()
491494

492495
blocks = {r: [] for r in A}
493496
ci = 0
@@ -497,22 +500,22 @@ def pad(T, d):
497500
d, f = (a*r + c).quo_rem(k)
498501
if d not in kernel:
499502
kernel.append(d)
500-
di = kernel.index(d)
501-
blocks[r].append(di*[Z] + [self.mu[f]])
503+
blocks[r].append(prepend_zeros([self.mu[f]], d, zero_M))
502504
ci += 1
503505

504-
ndim = len(kernel) * dim
505506
result = P.element_class(
506507
P,
507-
{r: Matrix.block([pad_right(row, len(kernel), zero=Z)
508+
{r: Matrix.block([pad_right(row, len(kernel), zero=zero_M)
508509
for row in blocks[r]])
509510
for r in A},
510-
sum(c_j * vector(
511-
pad_right(pad(tuple(self.left), b_j), ndim, zero=zero))
511+
sum(c_j * vector(chain.from_iterable(
512+
pad_right(prepend_zeros([self.left], b_j, zero_L),
513+
len(kernel), zero=zero_L)))
512514
for b_j, c_j in b.items()),
513-
vector(sum((tuple(self.__getitem__(c, multiply_left=False))
514-
if c >= 0 else dim*(zero,)
515-
for c in kernel), tuple())))
515+
vector(chain.from_iterable(
516+
(self.__getitem__(c, multiply_left=False)
517+
if c >= 0 else dim*(zero,))
518+
for c in kernel)))
516519

517520
return result
518521

0 commit comments

Comments
 (0)