Skip to content

Commit 27448fe

Browse files
author
Release Manager
committed
gh-37144: Minor ruff fixes in posets This is fixing a few of `ruff` suggestions (UP and PERF and ANN) in posets. ### 📝 Checklist - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. URL: #37144 Reported by: Frédéric Chapoton Reviewer(s): Alex J Best
2 parents 203431c + b41465d commit 27448fe

File tree

10 files changed

+129
-126
lines changed

10 files changed

+129
-126
lines changed

src/sage/combinat/posets/cartesian_product.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class CartesianProductPoset(CartesianProduct):
8181
:class:`CartesianProduct`
8282
"""
8383

84-
def __init__(self, sets, category, order=None, **kwargs):
84+
def __init__(self, sets, category, order=None, **kwargs) -> None:
8585
r"""
8686
See :class:`CartesianProductPoset` for details.
8787
@@ -102,7 +102,7 @@ def __init__(self, sets, category, order=None, **kwargs):
102102
try:
103103
self._le_ = getattr(self, 'le_' + order)
104104
except AttributeError:
105-
raise ValueError("no order '%s' known" % (order,))
105+
raise ValueError(f"no order '{order}' known")
106106
else:
107107
self._le_ = order
108108

src/sage/combinat/posets/elements.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
class PosetElement(Element):
2525

26-
def __init__(self, poset, element, vertex):
26+
def __init__(self, poset, element, vertex) -> None:
2727
r"""
2828
Establish the parent-child relationship between ``poset``
2929
and ``element``, where ``element`` is associated to the

src/sage/combinat/posets/hasse_diagram.py

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class LatticeError(ValueError):
4040
a and b" instead of "No meet for 1 and 2".
4141
"""
4242

43-
def __init__(self, fail, x, y):
43+
def __init__(self, fail, x, y) -> None:
4444
"""
4545
Initialize the exception.
4646
@@ -56,7 +56,7 @@ def __init__(self, fail, x, y):
5656
self.x = x
5757
self.y = y
5858

59-
def __str__(self):
59+
def __str__(self) -> str:
6060
"""
6161
Return string representation of the exception.
6262
@@ -67,7 +67,7 @@ def __str__(self):
6767
sage: error.__str__()
6868
'no meet for 15 and 18'
6969
"""
70-
return "no {} for {} and {}".format(self.fail, self.x, self.y)
70+
return f"no {self.fail} for {self.x} and {self.y}"
7171

7272

7373
class HasseDiagram(DiGraph):
@@ -792,8 +792,8 @@ def _rank(self):
792792
while not_found:
793793
y = not_found.pop()
794794
rank[y] = 0 # We set some vertex to have rank 0
795-
component = set([y])
796-
queue = set([y])
795+
component = {y}
796+
queue = {y}
797797
while queue:
798798
# look at the neighbors of y and set the ranks;
799799
# then look at the neighbors of the neighbors ...
@@ -1109,11 +1109,11 @@ def moebius_function_matrix(self, algorithm='cython'):
11091109
m[(i, k)] = -ZZ.sum(m[(j, k)]
11101110
for j in available
11111111
if k in greater_than[j])
1112-
M = matrix(ZZ, n, n, m, sparse=True)
1112+
M = matrix(ZZ, n, n, m, sparse=True) # noqa: F821
11131113
elif algorithm == "matrix":
11141114
M = self.lequal_matrix().inverse_of_unit()
11151115
elif algorithm == "cython":
1116-
M = moebius_matrix_fast(self._leq_storage)
1116+
M = moebius_matrix_fast(self._leq_storage) # noqa: F821
11171117
else:
11181118
raise ValueError("unknown algorithm")
11191119
self._moebius_function_matrix = M
@@ -1187,7 +1187,7 @@ def coxeter_transformation(self, algorithm='cython'):
11871187
if algorithm == 'matrix':
11881188
return - self.lequal_matrix() * self.moebius_function_matrix().transpose()
11891189
elif algorithm == 'cython':
1190-
return coxeter_matrix_fast(self._leq_storage)
1190+
return coxeter_matrix_fast(self._leq_storage) # noqa: F821
11911191
else:
11921192
raise ValueError("unknown algorithm")
11931193

@@ -1286,7 +1286,7 @@ def _leq_storage(self):
12861286
[{0, 1, 2, 3, 4, 5, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6}]
12871287
"""
12881288
n = self.order()
1289-
greater_than = [set([i]) for i in range(n)]
1289+
greater_than = [{i} for i in range(n)]
12901290
for i in range(n - 1, -1, -1):
12911291
gt = greater_than[i]
12921292
for j in self.neighbor_out_iterator(i):
@@ -1324,11 +1324,11 @@ def _leq_matrix_boolean(self):
13241324
Finite Field of size 2
13251325
"""
13261326
n = self.order()
1327-
R = GF(2)
1327+
R = GF(2) # noqa: F821
13281328
one = R.one()
13291329
greater_than = self._leq_storage
13301330
D = {(i, j): one for i in range(n) for j in greater_than[i]}
1331-
M = matrix(R, n, n, D, sparse=True)
1331+
M = matrix(R, n, n, D, sparse=True) # noqa: F821
13321332
M.set_immutable()
13331333
return M
13341334

@@ -1359,7 +1359,7 @@ def _leq_matrix(self):
13591359
n = self.order()
13601360
greater_than = self._leq_storage
13611361
D = {(i, j): 1 for i in range(n) for j in greater_than[i]}
1362-
return matrix(ZZ, n, n, D, sparse=True, immutable=True)
1362+
return matrix(ZZ, n, n, D, sparse=True, immutable=True) # noqa: F821
13631363

13641364
def lequal_matrix(self, boolean=False):
13651365
r"""
@@ -1544,7 +1544,7 @@ def _meet(self):
15441544
self._meet_semilattice_failure = ()
15451545
n = self.cardinality()
15461546
if n == 0:
1547-
return matrix(0)
1547+
return matrix(0) # noqa: F821
15481548
meet = [[-1 for x in range(n)] for x in range(n)]
15491549
lc = [self.neighbors_in(x) for x in range(n)] # Lc = lower covers
15501550

@@ -1564,7 +1564,7 @@ def _meet(self):
15641564
meet[y][x] = q
15651565
if q == -1:
15661566
self._meet_semilattice_failure += ((x, y),)
1567-
return matrix(ZZ, meet)
1567+
return matrix(ZZ, meet) # noqa: F821
15681568

15691569
def meet_matrix(self):
15701570
r"""
@@ -1708,7 +1708,7 @@ def _join(self):
17081708
self._join_semilattice_failure = ()
17091709
n = self.cardinality()
17101710
if n == 0:
1711-
return matrix(0)
1711+
return matrix(0) # noqa: F821
17121712
join = [[-1 for x in range(n)] for x in range(n)]
17131713
uc = [self.neighbors_out(x) for x in range(n)] # uc = upper covers
17141714

@@ -1729,7 +1729,7 @@ def _join(self):
17291729
if q == -1:
17301730
self._join_semilattice_failure += ((x, y),)
17311731

1732-
return matrix(ZZ, join)
1732+
return matrix(ZZ, join) # noqa: F821
17331733

17341734
def join_matrix(self):
17351735
r"""
@@ -1857,9 +1857,8 @@ def find_nonsemidistributive_elements(self, meet_or_join):
18571857
for x in range(n):
18581858
u = M1[e, x]
18591859
for y in range(x):
1860-
if u == M1[e, y]:
1861-
if u != M1[e, M2[x, y]]:
1862-
return (u, e, x, y)
1860+
if u == M1[e, y] and u != M1[e, M2[x, y]]:
1861+
return (u, e, x, y)
18631862

18641863
return None
18651864

@@ -2151,9 +2150,8 @@ def recursive_fit(orthocomplements, unbinded):
21512150
# Every element might have one possible orthocomplement,
21522151
# but so that they don't fit together. Must check that.
21532152
for lc in self.lower_covers_iterator(e):
2154-
if start[lc] is not None:
2155-
if not self.has_edge(e_, start[lc]):
2156-
return
2153+
if not (start[lc] is None or self.has_edge(e_, start[lc])):
2154+
return
21572155
if start[e_] is None:
21582156
start[e] = e_
21592157
start[e_] = e
@@ -2191,10 +2189,7 @@ def find_nonsemimodular_pair(self, upper):
21912189
sage: H_.find_nonsemimodular_pair(upper=False) is None
21922190
True
21932191
"""
2194-
if upper:
2195-
neighbors = self.neighbors_out
2196-
else:
2197-
neighbors = self.neighbors_in
2192+
neighbors = self.neighbors_out if upper else self.neighbors_in
21982193

21992194
n = self.order()
22002195
for e in range(n):
@@ -2481,7 +2476,7 @@ def is_linear_interval(self, t_min, t_max) -> bool:
24812476
return True
24822477
return False
24832478

2484-
def diamonds(self):
2479+
def diamonds(self) -> tuple:
24852480
r"""
24862481
Return the list of diamonds of ``self``.
24872482
@@ -2525,8 +2520,7 @@ def diamonds(self):
25252520
zs = self.common_upper_covers([x, y])
25262521
if len(zs) != 1:
25272522
all_diamonds_completed = False
2528-
for z in zs:
2529-
diamonds.append((w, x, y, z))
2523+
diamonds.extend((w, x, y, z) for z in zs)
25302524
return (diamonds, all_diamonds_completed)
25312525

25322526
def common_upper_covers(self, vertices):
@@ -2651,7 +2645,7 @@ def sublattices_iterator(self, elms, min_e):
26512645
if e in elms:
26522646
continue
26532647
current_set = set(elms)
2654-
gens = set([e])
2648+
gens = {e}
26552649
while gens:
26562650
g = gens.pop()
26572651
if g < e and g not in elms:
@@ -2684,7 +2678,7 @@ def sublattice(elms, e):
26842678
Helper function to get sublattice generated by list
26852679
of elements.
26862680
"""
2687-
gens_remaining = set([e])
2681+
gens_remaining = {e}
26882682
current_set = set(elms)
26892683

26902684
while gens_remaining:
@@ -2700,7 +2694,7 @@ def sublattice(elms, e):
27002694

27012695
N = self.cardinality()
27022696
elms = [0]
2703-
sublats = [set([0])]
2697+
sublats = [{0}]
27042698
result = []
27052699
skip = -1
27062700

@@ -2981,7 +2975,7 @@ def neutral_elements(self):
29812975
return set(range(n))
29822976

29832977
todo = set(range(1, n - 1))
2984-
neutrals = set([0, n - 1])
2978+
neutrals = {0, n - 1}
29852979
notneutrals = set()
29862980
all_elements = set(range(n))
29872981

@@ -3144,7 +3138,7 @@ def atoms_of_congruence_lattice(self):
31443138

31453139
return min_congruences
31463140

3147-
def congruence(self, parts, start=None, stop_pairs=[]):
3141+
def congruence(self, parts, start=None, stop_pairs=None):
31483142
"""
31493143
Return the congruence ``start`` "extended" by ``parts``.
31503144
@@ -3208,6 +3202,9 @@ def congruence(self, parts, start=None, stop_pairs=[]):
32083202
from sage.sets.disjoint_set import DisjointSet
32093203
from copy import copy
32103204

3205+
if stop_pairs is None:
3206+
stop_pairs = []
3207+
32113208
n = self.order()
32123209
mt = self.meet_matrix()
32133210
jn = self.join_matrix()
@@ -3242,7 +3239,7 @@ def fill_to_interval(S):
32423239
for v in fill_to_interval(c):
32433240
cong.union(r, v)
32443241

3245-
todo = set(cong.find(e) for part in parts for e in part)
3242+
todo = {cong.find(e) for part in parts for e in part}
32463243

32473244
while todo:
32483245

@@ -3307,7 +3304,7 @@ def fill_to_interval(S):
33073304
d = jn[d, m]
33083305

33093306
# This removes duplicates from todo.
3310-
todo = set(cong.find(x) for x in todo)
3307+
todo = {cong.find(x) for x in todo}
33113308

33123309
return cong
33133310

src/sage/combinat/posets/incidence_algebras.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class IncidenceAlgebra(CombinatorialFreeModule):
5252
5353
- :wikipedia:`Incidence_algebra`
5454
"""
55-
def __init__(self, R, P, prefix='I'):
55+
def __init__(self, R, P, prefix='I') -> None:
5656
"""
5757
Initialize ``self``.
5858
@@ -438,7 +438,7 @@ class ReducedIncidenceAlgebra(CombinatorialFreeModule):
438438
`[x, y]` is isomorphic to `[x', y']` as posets. Thus the delta, Möbius,
439439
and zeta functions are all elements of `R_P`.
440440
"""
441-
def __init__(self, I, prefix='R'):
441+
def __init__(self, I, prefix='R') -> None:
442442
"""
443443
Initialize ``self``.
444444

src/sage/combinat/posets/lattices.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2003,7 +2003,7 @@ def join(L):
20032003
return (B, [self._vertex_to_element(e) for e in A])
20042004
else:
20052005
return B
2006-
assert False, "BUG: breadth() in lattices.py have an error."
2006+
raise RuntimeError("BUG: breadth() in lattices.py have an error")
20072007

20082008
def complements(self, element=None):
20092009
r"""
@@ -3089,11 +3089,10 @@ def vertical_decomposition(self, elements_only=False):
30893089
self._hasse_diagram.vertical_decomposition(return_list=True) +
30903090
[self.cardinality() - 1])
30913091
n = len(elms)
3092-
result = []
3093-
for i in range(n - 1):
3094-
result.append(LatticePoset(
3095-
self.subposet([self[e] for e in range(elms[i], elms[i + 1] + 1)])))
3096-
return result
3092+
return [LatticePoset(self.subposet([self[e]
3093+
for e in range(elms[i],
3094+
elms[i + 1] + 1)]))
3095+
for i in range(n - 1)]
30973096

30983097
def is_vertically_decomposable(self, certificate=False):
30993098
r"""
@@ -3461,8 +3460,8 @@ def frattini_sublattice(self):
34613460
sage: sorted(L.frattini_sublattice().list())
34623461
[1, 2, 4, 10, 19, 22, 33]
34633462
"""
3464-
return LatticePoset(self.subposet([self[x] for x in
3465-
self._hasse_diagram.frattini_sublattice()]))
3463+
return LatticePoset(self.subposet([self[x]
3464+
for x in self._hasse_diagram.frattini_sublattice()]))
34663465

34673466
def moebius_algebra(self, R):
34683467
"""
@@ -3634,9 +3633,9 @@ def adjunct(self, other, a, b):
36343633
if not isinstance(other, FiniteLatticePoset):
36353634
raise ValueError("other is not a finite lattice")
36363635
if not self.is_greater_than(b, a):
3637-
raise ValueError("element %s is not greater than %s in the lattice" % (b, a))
3636+
raise ValueError(f"element {b} is not greater than {a} in the lattice")
36383637
if self.covers(a, b):
3639-
raise ValueError("element %s covers element %s in the lattice" % (b, a))
3638+
raise ValueError(f"element {b} covers element {a} in the lattice")
36403639

36413640
if other.cardinality() == 0:
36423641
return self.relabel(lambda e: (0, e))

src/sage/combinat/posets/linear_extensions.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def check(self):
141141
"""
142142
P = self.parent().poset()
143143
if not P.is_linear_extension(self):
144-
raise ValueError("%s is not a linear extension of %s" % (self, P))
144+
raise ValueError(f"{self} is not a linear extension of {P}")
145145

146146
def poset(self):
147147
r"""
@@ -513,7 +513,7 @@ def __classcall_private__(cls, poset, facade=False):
513513
"""
514514
return super().__classcall__(cls, poset, facade=facade)
515515

516-
def __init__(self, poset, facade):
516+
def __init__(self, poset, facade) -> None:
517517
"""
518518
TESTS::
519519
@@ -625,7 +625,7 @@ def cardinality(self):
625625
while K[j]:
626626
K.append([b for a in K[j] for b in Jup[a]])
627627
j += 1
628-
K = sorted(set(item for sublist in K for item in sublist))
628+
K = sorted({item for sublist in K for item in sublist})
629629
for j in range(len(K)):
630630
i = m + j + 1
631631
Jup[i] = [m + K.index(a) + 1 for a in Jup[K[j]]]
@@ -671,7 +671,7 @@ def __iter__(self):
671671
for lin_ext in linear_extension_iterator(self._poset._hasse_diagram):
672672
yield self._element_constructor_([vertex_to_element(_) for _ in lin_ext])
673673

674-
def __contains__(self, obj):
674+
def __contains__(self, obj) -> bool:
675675
"""
676676
Membership testing
677677

src/sage/combinat/posets/mobile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class MobilePoset(FinitePoset):
6464
_lin_ext_type = LinearExtensionsOfMobile
6565
_desc = 'Finite mobile poset'
6666

67-
def __init__(self, hasse_diagram, elements, category, facade, key, ribbon=None, check=True):
67+
def __init__(self, hasse_diagram, elements, category, facade, key, ribbon=None, check=True) -> None:
6868
r"""
6969
Initialize ``self``.
7070

0 commit comments

Comments
 (0)