@@ -40,7 +40,7 @@ class LatticeError(ValueError):
40
40
a and b" instead of "No meet for 1 and 2".
41
41
"""
42
42
43
- def __init__ (self , fail , x , y ):
43
+ def __init__ (self , fail , x , y ) -> None :
44
44
"""
45
45
Initialize the exception.
46
46
@@ -56,7 +56,7 @@ def __init__(self, fail, x, y):
56
56
self .x = x
57
57
self .y = y
58
58
59
- def __str__ (self ):
59
+ def __str__ (self ) -> str :
60
60
"""
61
61
Return string representation of the exception.
62
62
@@ -67,7 +67,7 @@ def __str__(self):
67
67
sage: error.__str__()
68
68
'no meet for 15 and 18'
69
69
"""
70
- return "no {} for {} and {}" . format ( self .fail , self . x , self . y )
70
+ return f "no { self . fail } for { self . x } and { self .y } "
71
71
72
72
73
73
class HasseDiagram (DiGraph ):
@@ -792,8 +792,8 @@ def _rank(self):
792
792
while not_found :
793
793
y = not_found .pop ()
794
794
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 }
797
797
while queue :
798
798
# look at the neighbors of y and set the ranks;
799
799
# then look at the neighbors of the neighbors ...
@@ -1109,11 +1109,11 @@ def moebius_function_matrix(self, algorithm='cython'):
1109
1109
m [(i , k )] = - ZZ .sum (m [(j , k )]
1110
1110
for j in available
1111
1111
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
1113
1113
elif algorithm == "matrix" :
1114
1114
M = self .lequal_matrix ().inverse_of_unit ()
1115
1115
elif algorithm == "cython" :
1116
- M = moebius_matrix_fast (self ._leq_storage )
1116
+ M = moebius_matrix_fast (self ._leq_storage ) # noqa: F821
1117
1117
else :
1118
1118
raise ValueError ("unknown algorithm" )
1119
1119
self ._moebius_function_matrix = M
@@ -1187,7 +1187,7 @@ def coxeter_transformation(self, algorithm='cython'):
1187
1187
if algorithm == 'matrix' :
1188
1188
return - self .lequal_matrix () * self .moebius_function_matrix ().transpose ()
1189
1189
elif algorithm == 'cython' :
1190
- return coxeter_matrix_fast (self ._leq_storage )
1190
+ return coxeter_matrix_fast (self ._leq_storage ) # noqa: F821
1191
1191
else :
1192
1192
raise ValueError ("unknown algorithm" )
1193
1193
@@ -1286,7 +1286,7 @@ def _leq_storage(self):
1286
1286
[{0, 1, 2, 3, 4, 5, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6}]
1287
1287
"""
1288
1288
n = self .order ()
1289
- greater_than = [set ([ i ]) for i in range (n )]
1289
+ greater_than = [{ i } for i in range (n )]
1290
1290
for i in range (n - 1 , - 1 , - 1 ):
1291
1291
gt = greater_than [i ]
1292
1292
for j in self .neighbor_out_iterator (i ):
@@ -1324,11 +1324,11 @@ def _leq_matrix_boolean(self):
1324
1324
Finite Field of size 2
1325
1325
"""
1326
1326
n = self .order ()
1327
- R = GF (2 )
1327
+ R = GF (2 ) # noqa: F821
1328
1328
one = R .one ()
1329
1329
greater_than = self ._leq_storage
1330
1330
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
1332
1332
M .set_immutable ()
1333
1333
return M
1334
1334
@@ -1359,7 +1359,7 @@ def _leq_matrix(self):
1359
1359
n = self .order ()
1360
1360
greater_than = self ._leq_storage
1361
1361
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
1363
1363
1364
1364
def lequal_matrix (self , boolean = False ):
1365
1365
r"""
@@ -1544,7 +1544,7 @@ def _meet(self):
1544
1544
self ._meet_semilattice_failure = ()
1545
1545
n = self .cardinality ()
1546
1546
if n == 0 :
1547
- return matrix (0 )
1547
+ return matrix (0 ) # noqa: F821
1548
1548
meet = [[- 1 for x in range (n )] for x in range (n )]
1549
1549
lc = [self .neighbors_in (x ) for x in range (n )] # Lc = lower covers
1550
1550
@@ -1564,7 +1564,7 @@ def _meet(self):
1564
1564
meet [y ][x ] = q
1565
1565
if q == - 1 :
1566
1566
self ._meet_semilattice_failure += ((x , y ),)
1567
- return matrix (ZZ , meet )
1567
+ return matrix (ZZ , meet ) # noqa: F821
1568
1568
1569
1569
def meet_matrix (self ):
1570
1570
r"""
@@ -1708,7 +1708,7 @@ def _join(self):
1708
1708
self ._join_semilattice_failure = ()
1709
1709
n = self .cardinality ()
1710
1710
if n == 0 :
1711
- return matrix (0 )
1711
+ return matrix (0 ) # noqa: F821
1712
1712
join = [[- 1 for x in range (n )] for x in range (n )]
1713
1713
uc = [self .neighbors_out (x ) for x in range (n )] # uc = upper covers
1714
1714
@@ -1729,7 +1729,7 @@ def _join(self):
1729
1729
if q == - 1 :
1730
1730
self ._join_semilattice_failure += ((x , y ),)
1731
1731
1732
- return matrix (ZZ , join )
1732
+ return matrix (ZZ , join ) # noqa: F821
1733
1733
1734
1734
def join_matrix (self ):
1735
1735
r"""
@@ -1857,9 +1857,8 @@ def find_nonsemidistributive_elements(self, meet_or_join):
1857
1857
for x in range (n ):
1858
1858
u = M1 [e , x ]
1859
1859
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 )
1863
1862
1864
1863
return None
1865
1864
@@ -2151,9 +2150,8 @@ def recursive_fit(orthocomplements, unbinded):
2151
2150
# Every element might have one possible orthocomplement,
2152
2151
# but so that they don't fit together. Must check that.
2153
2152
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
2157
2155
if start [e_ ] is None :
2158
2156
start [e ] = e_
2159
2157
start [e_ ] = e
@@ -2191,10 +2189,7 @@ def find_nonsemimodular_pair(self, upper):
2191
2189
sage: H_.find_nonsemimodular_pair(upper=False) is None
2192
2190
True
2193
2191
"""
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
2198
2193
2199
2194
n = self .order ()
2200
2195
for e in range (n ):
@@ -2481,7 +2476,7 @@ def is_linear_interval(self, t_min, t_max) -> bool:
2481
2476
return True
2482
2477
return False
2483
2478
2484
- def diamonds (self ):
2479
+ def diamonds (self ) -> tuple :
2485
2480
r"""
2486
2481
Return the list of diamonds of ``self``.
2487
2482
@@ -2525,8 +2520,7 @@ def diamonds(self):
2525
2520
zs = self .common_upper_covers ([x , y ])
2526
2521
if len (zs ) != 1 :
2527
2522
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 )
2530
2524
return (diamonds , all_diamonds_completed )
2531
2525
2532
2526
def common_upper_covers (self , vertices ):
@@ -2651,7 +2645,7 @@ def sublattices_iterator(self, elms, min_e):
2651
2645
if e in elms :
2652
2646
continue
2653
2647
current_set = set (elms )
2654
- gens = set ([ e ])
2648
+ gens = { e }
2655
2649
while gens :
2656
2650
g = gens .pop ()
2657
2651
if g < e and g not in elms :
@@ -2684,7 +2678,7 @@ def sublattice(elms, e):
2684
2678
Helper function to get sublattice generated by list
2685
2679
of elements.
2686
2680
"""
2687
- gens_remaining = set ([ e ])
2681
+ gens_remaining = { e }
2688
2682
current_set = set (elms )
2689
2683
2690
2684
while gens_remaining :
@@ -2700,7 +2694,7 @@ def sublattice(elms, e):
2700
2694
2701
2695
N = self .cardinality ()
2702
2696
elms = [0 ]
2703
- sublats = [set ([ 0 ]) ]
2697
+ sublats = [{ 0 } ]
2704
2698
result = []
2705
2699
skip = - 1
2706
2700
@@ -2981,7 +2975,7 @@ def neutral_elements(self):
2981
2975
return set (range (n ))
2982
2976
2983
2977
todo = set (range (1 , n - 1 ))
2984
- neutrals = set ([ 0 , n - 1 ])
2978
+ neutrals = { 0 , n - 1 }
2985
2979
notneutrals = set ()
2986
2980
all_elements = set (range (n ))
2987
2981
@@ -3144,7 +3138,7 @@ def atoms_of_congruence_lattice(self):
3144
3138
3145
3139
return min_congruences
3146
3140
3147
- def congruence (self , parts , start = None , stop_pairs = [] ):
3141
+ def congruence (self , parts , start = None , stop_pairs = None ):
3148
3142
"""
3149
3143
Return the congruence ``start`` "extended" by ``parts``.
3150
3144
@@ -3208,6 +3202,9 @@ def congruence(self, parts, start=None, stop_pairs=[]):
3208
3202
from sage .sets .disjoint_set import DisjointSet
3209
3203
from copy import copy
3210
3204
3205
+ if stop_pairs is None :
3206
+ stop_pairs = []
3207
+
3211
3208
n = self .order ()
3212
3209
mt = self .meet_matrix ()
3213
3210
jn = self .join_matrix ()
@@ -3242,7 +3239,7 @@ def fill_to_interval(S):
3242
3239
for v in fill_to_interval (c ):
3243
3240
cong .union (r , v )
3244
3241
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 }
3246
3243
3247
3244
while todo :
3248
3245
@@ -3307,7 +3304,7 @@ def fill_to_interval(S):
3307
3304
d = jn [d , m ]
3308
3305
3309
3306
# This removes duplicates from todo.
3310
- todo = set ( cong .find (x ) for x in todo )
3307
+ todo = { cong .find (x ) for x in todo }
3311
3308
3312
3309
return cong
3313
3310
0 commit comments