Skip to content

Commit 43c7f50

Browse files
author
Release Manager
committed
gh-35631: simplify some all(all(...)) in combinat and geometry <!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes #12345", use "Add a new method to multiply two integers" --> ### 📚 Description replace some nested `all` by just one `all` in combinat and geometry folders <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes #12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - #12345: short description why this is a dependency - #34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: #35631 Reported by: Frédéric Chapoton Reviewer(s): David Coudert
2 parents 82a4509 + 0618a28 commit 43c7f50

File tree

13 files changed

+72
-57
lines changed

13 files changed

+72
-57
lines changed

src/sage/combinat/combinat_cython.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ def set_partition_composition(tuple sp1, tuple sp2):
762762
diagram.append(tuple(block))
763763

764764
# Everything else should be completely contained in the top block
765-
assert all(all(val > 0 for val in top) for top in remaining_top)
765+
assert all(val > 0 for top in remaining_top for val in top)
766766
diagram.extend(remaining_top)
767767

768768
return (tuple(diagram), num_loops)

src/sage/combinat/crystals/tensor_product.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ def __classcall_private__(cls, cartan_type, shapes = None, shape = None):
934934
n1 = n + 1
935935
else:
936936
n1 = n
937-
if not all(all(i == 0 for i in shape[n1:]) for shape in shapes):
937+
if not all(i == 0 for shape in shapes for i in shape[n1:]):
938938
raise ValueError("shapes should all have length at most equal to the rank or the rank + 1 in type A")
939939
spin_shapes = tuple((tuple(shape) + (0,)*(n1-len(shape)))[:n1] for shape in shapes)
940940
try:

src/sage/combinat/designs/resolvable_bibd.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,13 +592,13 @@ def PBD_4_7(v,check=True, existence=False):
592592
parall = []
593593
plus_one = None
594594
for S in AF:
595-
if all(all(x not in SS for x in S) for SS in parall):
595+
if all(x not in SS for SS in parall for x in S):
596596
parall.append(S)
597597
elif plus_one is None:
598598
plus_one = S
599599
if len(parall) == 4 and plus_one is not None:
600600
break
601-
X = set(sum(parall,plus_one))
601+
X = set(sum(parall, plus_one))
602602

603603
S_4_5_7 = [X.intersection(S) for S in AF]
604604
S_4_5_7 = [S for S in S_4_5_7 if len(S)>1]

src/sage/combinat/diagram.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -475,20 +475,20 @@ def check(self):
475475
sage: D = Diagram([(0,0), (0,-3), (2,2), (2,4)])
476476
Traceback (most recent call last):
477477
...
478-
ValueError: Diagrams must be indexed by non-negative integers
478+
ValueError: diagrams must be indexed by non-negative integers
479479
480480
The next example fails because one cell is indexed by rational
481481
numbers::
482482
483483
sage: D = Diagram([(0,0), (0,3), (2/3,2), (2,4)])
484484
Traceback (most recent call last):
485485
...
486-
ValueError: Diagrams must be indexed by non-negative integers
486+
ValueError: diagrams must be indexed by non-negative integers
487487
"""
488488
from sage.sets.non_negative_integers import NonNegativeIntegers
489489
NN = NonNegativeIntegers()
490-
if not all(all(list(i in NN for i in c)) for c in self._cells):
491-
raise ValueError("Diagrams must be indexed by non-negative integers")
490+
if not all(i in NN for c in self._cells for i in c):
491+
raise ValueError("diagrams must be indexed by non-negative integers")
492492

493493
def specht_module(self, base_ring=None):
494494
r"""
@@ -884,7 +884,7 @@ def check(self):
884884
sage: NorthwestDiagram([(0,1/2)])
885885
Traceback (most recent call last):
886886
...
887-
ValueError: Diagrams must be indexed by non-negative integers
887+
ValueError: diagrams must be indexed by non-negative integers
888888
"""
889889
from itertools import combinations
890890
Diagram.check(self)

src/sage/combinat/gelfand_tsetlin_patterns.py

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454

5555
class GelfandTsetlinPattern(ClonableArray,
56-
metaclass=InheritComparisonClasscallMetaclass):
56+
metaclass=InheritComparisonClasscallMetaclass):
5757
r"""
5858
A Gelfand-Tsetlin (sometimes written as Gelfand-Zetlin or Gelfand-Cetlin)
5959
pattern. They were originally defined in [GC50]_.
@@ -197,7 +197,7 @@ def _repr_diagram(self) -> str:
197197
for i, row in enumerate(self):
198198
if i != 0:
199199
ret += '\n'
200-
ret += ' '*i
200+
ret += ' ' * i
201201
ret += ' '.join('%3s' % val for val in row)
202202
return ret
203203

@@ -234,13 +234,13 @@ def _latex_(self) -> str:
234234
n = len(self)
235235
if n == 0:
236236
return "\\emptyset"
237-
ret = "\\begin{array}{" + 'c'*(n*2-1) + "}\n"
237+
ret = "\\begin{array}{" + 'c' * (n * 2 - 1) + "}\n"
238238
for i, row in enumerate(self):
239239
if i > 0:
240240
ret += " \\\\\n"
241-
ret += "& "*i
241+
ret += "& " * i
242242
ret += " & & ".join(repr(val) for val in row)
243-
ret += " &"*i
243+
ret += " &" * i
244244
return ret + "\n\\end{array}"
245245

246246
@combinatorial_map(name='to semistandard tableau')
@@ -282,9 +282,9 @@ def to_tableau(self):
282282
if j >= len(ret):
283283
if val == 0:
284284
break
285-
ret.append([i+1]*val)
285+
ret.append([i + 1] * val)
286286
else:
287-
ret[j].extend([i+1]*(val-len(ret[j])))
287+
ret[j].extend([i + 1] * (val - len(ret[j])))
288288
S = SemistandardTableaux(max_entry=len(self))
289289
return S(ret)
290290

@@ -306,7 +306,7 @@ def boxed_entries(self) -> tuple:
306306
ret = []
307307
for i in range(1, len(self)):
308308
for j in range(len(self[i])):
309-
if self[i][j] == self[i-1][j]:
309+
if self[i][j] == self[i - 1][j]:
310310
ret.append((i, j))
311311
return tuple(ret)
312312

@@ -328,7 +328,7 @@ def circled_entries(self) -> tuple:
328328
ret = []
329329
for i in range(1, len(self)):
330330
for j in range(len(self[i])):
331-
if self[i][j] == self[i-1][j+1]:
331+
if self[i][j] == self[i - 1][j + 1]:
332332
ret.append((i, j))
333333
return tuple(ret)
334334

@@ -457,7 +457,7 @@ def weight(self) -> tuple:
457457
sage: G.weight()
458458
(2, 2, 3)
459459
"""
460-
wt = [self.row_sums()[-1]] + [self.row_sums()[i-1]-self.row_sums()[i] for i in reversed(range(1, len(self[0])))]
460+
wt = [self.row_sums()[-1]] + [self.row_sums()[i - 1] - self.row_sums()[i] for i in reversed(range(1, len(self[0])))]
461461
return tuple(wt)
462462

463463
def Tokuyama_coefficient(self, name='t'):
@@ -502,7 +502,7 @@ def Tokuyama_coefficient(self, name='t'):
502502
t = R.gen(0)
503503
if not self.is_strict():
504504
return R.zero()
505-
return (t+1)**(self.number_of_special_entries()) * t**(self.number_of_boxes())
505+
return (t + 1)**self.number_of_special_entries() * t**self.number_of_boxes()
506506

507507
@combinatorial_map(order=2, name='Bender-Knuth involution')
508508
def bender_knuth_involution(self, i) -> GelfandTsetlinPattern:
@@ -703,15 +703,16 @@ def __contains__(self, gt):
703703
if self._n is not None and len(gt) != self._n:
704704
return False
705705
# Check if it has the correct maximum value
706-
if self._k is not None and any( val > self._k for row in gt for val in row ):
706+
if self._k is not None and any(val > self._k for row in gt
707+
for val in row):
707708
return False
708709
# Check if it is a GT pattern
709-
if not all( gt[i-1][j] >= gt[i][j] >= gt[i-1][j+1]
710-
for i in range(1, len(gt)) for j in range(len(gt[i])) ):
710+
if not all(gt[i-1][j] >= gt[i][j] >= gt[i-1][j+1]
711+
for i in range(1, len(gt)) for j in range(len(gt[i]))):
711712
return False
712713
# Check if it is strict if applicable
713-
if self._strict and any( gt[i][j] == gt[i][j-1] for i in range(len(gt))
714-
for j in range(1, len(gt[i])) ):
714+
if self._strict and any(gt[i][j] == gt[i][j-1] for i in range(len(gt))
715+
for j in range(1, len(gt[i]))):
715716
return False
716717
return True
717718

@@ -965,7 +966,7 @@ def _top_row_iter(self, n):
965966
continue
966967
# If it would create an invalid entry, backstep
967968
if (pos > 0 and (row[pos] >= row[pos-1]
968-
or (self._strict and row[pos] == row[pos-1]-1)) ) \
969+
or (self._strict and row[pos] == row[pos-1]-1))) \
969970
or (self._k is not None and row[pos] >= self._k):
970971
row[pos] = -1
971972
pos -= 1
@@ -1052,8 +1053,7 @@ def _toggle_markov_chain(self, chain_state, row, col, direction):
10521053
sage: G._toggle_markov_chain(state, 0, 2, 0)
10531054
sage: state
10541055
[[4, 2, 0], [3, 2], [2]]
1055-
1056-
"""
1056+
"""
10571057
if direction == 1:
10581058
upbound = self._k
10591059
if row != 0:
@@ -1130,8 +1130,7 @@ def _cftp(self, start_row):
11301130
True
11311131
"""
11321132
from sage.misc.randstate import current_randstate
1133-
from sage.misc.randstate import seed
1134-
from sage.misc.randstate import random
1133+
from sage.misc.randstate import seed, random
11351134

11361135
count = self._n * self._k
11371136
seedlist = [(current_randstate().long_seed(), count)]
@@ -1148,7 +1147,8 @@ def _cftp(self, start_row):
11481147
direction = random() % 2
11491148
self._toggle_markov_chain(upper, row, col, direction)
11501149
self._toggle_markov_chain(lower, row, col, direction)
1151-
if all(all(x == y for x, y in zip(l1, l2)) for l1, l2 in zip(upper, lower)):
1150+
if all(x == y for l1, l2 in zip(upper, lower)
1151+
for x, y in zip(l1, l2)):
11521152
break
11531153
count = seedlist[0][1] * 2
11541154
seedlist.insert(0, (current_randstate().long_seed(), count))
@@ -1283,7 +1283,7 @@ def __iter__(self):
12831283
[[4, 2, 1], [4, 2], [4]]]
12841284
"""
12851285
# If we enforce strictness, check to see if a specified top row is strict
1286-
if self._strict and any(self._row[i] == self._row[i+1] for i in range(self._n-1)):
1286+
if self._strict and any(self._row[i] == self._row[i + 1] for i in range(self._n - 1)):
12871287
return
12881288
if self._n == 0:
12891289
yield self.element_class(self, [])
@@ -1292,8 +1292,8 @@ def __iter__(self):
12921292
yield self.element_class(self, [list(self._row)])
12931293
return
12941294
# Setup the first row
1295-
iters = [None]*self._n
1296-
ret = [None]*self._n
1295+
iters = [None] * self._n
1296+
ret = [None] * self._n
12971297
ret[0] = list(self._row)
12981298
min_pos = 1
12991299
iters[1] = self._row_iter(ret[0])
@@ -1307,7 +1307,7 @@ def __iter__(self):
13071307
yield self.element_class(self, ret[:])
13081308
pos -= 1
13091309
continue
1310-
iters[pos] = self._row_iter(ret[pos-1])
1310+
iters[pos] = self._row_iter(ret[pos - 1])
13111311
except StopIteration:
13121312
pos -= 1
13131313

@@ -1358,12 +1358,12 @@ def Tokuyama_formula(self, name='t'):
13581358
0
13591359
"""
13601360
n = self._n
1361-
variables = [name] + ["x%d" % i for i in range(1, n+1)]
1361+
variables = [name] + ["x%d" % i for i in range(1, n + 1)]
13621362
R = PolynomialRing(ZZ, names=variables)
13631363
t = R.gen(0)
13641364
x = R.gens()[1:]
13651365
GT = GelfandTsetlinPatterns(top_row=self._row, strict=True)
1366-
return sum((t+1)**(gt.number_of_special_entries()) * t**(gt.number_of_boxes()) * prod(x[i]**gt.weight()[i] for i in range(n)) for gt in GT)
1366+
return sum((t + 1)**gt.number_of_special_entries() * t**gt.number_of_boxes() * prod(x[i]**gt.weight()[i] for i in range(n)) for gt in GT)
13671367

13681368
def _cftp_upper(self) -> list:
13691369
"""

src/sage/combinat/path_tableaux/frieze.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ def is_integral(self):
295295
"""
296296
n = len(self)
297297
cd = CylindricalDiagram(self).diagram
298-
return all(all(k in ZZ for k in a[i+1:n+i-2]) for i, a in enumerate(cd))
298+
return all(k in ZZ for i, a in enumerate(cd)
299+
for k in a[i + 1:n + i - 2])
299300

300301
def triangulation(self):
301302
r"""

src/sage/combinat/path_tableaux/semistandard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def is_skew(self):
246246
"""
247247
return bool(self[0])
248248

249-
def is_integral(self):
249+
def is_integral(self) -> bool:
250250
"""
251251
Return ``True`` if all entries are non-negative integers.
252252
@@ -259,7 +259,7 @@ def is_integral(self):
259259
sage: path_tableaux.SemistandardPathTableau([[],[3],[3,-2]]).is_integral()
260260
False
261261
"""
262-
return all(all(i in NN for i in a) for a in self)
262+
return all(i in NN for a in self for i in a)
263263

264264
def local_rule(self, i):
265265
r"""

src/sage/combinat/plane_partition.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def check(self):
213213
ValueError: entries not all integers
214214
215215
"""
216-
if not all(all(a in ZZ for a in b) for b in self):
216+
if not all(a in ZZ for b in self for a in b):
217217
raise ValueError("entries not all integers")
218218
for row in self:
219219
if not all(c >= 0 for c in row):
@@ -1374,7 +1374,7 @@ def __contains__(self, pp):
13741374
if isinstance(pp, (list, tuple)):
13751375
if not pp:
13761376
return True
1377-
if not all(all(a in ZZ for a in b) for b in pp):
1377+
if not all(a in ZZ for b in pp for a in b):
13781378
return False
13791379
for row in pp:
13801380
if not all(c >= 0 for c in row):
@@ -1852,7 +1852,8 @@ def to_poset(self):
18521852
def comp(x, y):
18531853
return all(a <= b for a, b in zip(x, y))
18541854

1855-
pl = [(x, y, z) for x in range(a) for y in range(x+1) for z in range(c)]
1855+
pl = [(x, y, z) for x in range(a) for y in range(x + 1)
1856+
for z in range(c)]
18561857
from sage.combinat.posets.posets import Poset
18571858
return Poset((pl, comp))
18581859

@@ -2048,7 +2049,7 @@ def comp2(x, y):
20482049
return comp(x, y) or comp(x, (y[2], y[0], y[1])) or comp(x, (y[1], y[2], y[0]))
20492050

20502051
pl = [(x, y, z) for x in range(a) for y in range(b) for z in range(x, c)
2051-
if y <= z and (x != z or y == x)]
2052+
if y <= z and (x != z or y == x)]
20522053
from sage.combinat.posets.posets import Poset
20532054
return Poset((pl, comp2))
20542055

src/sage/combinat/ribbon_shaped_tableau.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,27 @@ def __classcall_private__(cls, rows):
7878
7979
sage: RibbonShapedTableau([[2,3],[1,4,5]])
8080
[[None, None, 2, 3], [1, 4, 5]]
81+
82+
TESTS::
83+
84+
sage: RibbonShapedTableau([4,5])
85+
Traceback (most recent call last):
86+
...
87+
TypeError: rows must be lists of positive integers
88+
89+
sage: RibbonShapedTableau([[2,3],[-4,5]])
90+
Traceback (most recent call last):
91+
...
92+
TypeError: r must be a list of positive integers
8193
"""
8294
try:
8395
r = [tuple(r) for r in rows]
8496
except TypeError:
8597
raise TypeError("rows must be lists of positive integers")
8698
if not r:
8799
return StandardRibbonShapedTableaux()(r)
88-
if all(all(j is None or (isinstance(j, (int, Integer)) and j>0) for j in i) for i in r):
100+
if all(j is None or (isinstance(j, (int, Integer)) and j > 0)
101+
for i in r for j in i):
89102
return StandardRibbonShapedTableaux()(r)
90103
raise TypeError("r must be a list of positive integers")
91104

src/sage/combinat/symmetric_group_algebra.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,14 +1339,13 @@ def rsw_shuffling_element(self, k):
13391339
sage: def test_rsw_comm(n):
13401340
....: QSn = SymmetricGroupAlgebra(QQ, n)
13411341
....: rsws = [QSn.rsw_shuffling_element(k) for k in range(2, n)]
1342-
....: return all( all( rsws[i] * rsws[j] == rsws[j] * rsws[i]
1343-
....: for j in range(i) )
1344-
....: for i in range(len(rsws)) )
1342+
....: return all(ri * rsws[j] == rsws[j] * ri
1343+
....: for i, ri in enumerate(rsws) for j in range(i))
13451344
sage: test_rsw_comm(3)
13461345
True
1347-
sage: test_rsw_comm(4)
1346+
sage: test_rsw_comm(4) # long time
13481347
True
1349-
sage: test_rsw_comm(5) # long time
1348+
sage: test_rsw_comm(5) # not tested
13501349
True
13511350
13521351
.. NOTE::

0 commit comments

Comments
 (0)