Skip to content

Commit

Permalink
sagemathgh-39439: using next in isogeny plotting
Browse files Browse the repository at this point in the history
just code formatting and using next in a few places

### 📝 Checklist

- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.

URL: sagemath#39439
Reported by: Frédéric Chapoton
Reviewer(s): David Coudert
  • Loading branch information
Release Manager committed Feb 4, 2025
2 parents 9e086c2 + e315d77 commit bde3823
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 29 deletions.
4 changes: 2 additions & 2 deletions build/pkgs/configure/checksums.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
tarball=configure-VERSION.tar.gz
sha1=86711d4cbef2cd4e7bb4afcde36965e5dea908e0
sha256=9793cf92ebdceb09050a585294de93c242c033745a0012cae1bd301d307a45df
sha1=cbdd36b1f59c1fe294a0d9ad356fc3cbc566e9a3
sha256=0094d0ebdcb21e47b10eb1c4a0edeb2ff3ae14374f5d0321019db01c4205c07b
2 changes: 1 addition & 1 deletion build/pkgs/configure/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
efc0914cd8d72a9bdfdcca4511b55e290b9b6674
7d9b6939fb8237dbc7bfafedb1722616965efc60
63 changes: 37 additions & 26 deletions src/sage/schemes/elliptic_curves/isogeny_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,60 +434,71 @@ def graph(self):
elif n == 2:
# one edge, two vertices. We align horizontally and put
# the lower number on the left vertex.
G.set_pos(pos={0:[-0.5,0],1:[0.5,0]})
G.set_pos(pos={0: [-0.5, 0], 1: [0.5, 0]})
else:
maxdegree = max(max(N))
if n == 3:
# o--o--o
centervert = [i for i in range(3) if max(N.row(i)) < maxdegree][0]
centervert = next(i for i in range(3) if max(N.row(i)) < maxdegree)
other = [i for i in range(3) if i != centervert]
G.set_pos(pos={centervert:[0,0],other[0]:[-1,0],other[1]:[1,0]})
G.set_pos(pos={centervert: [0, 0], other[0]: [-1, 0], other[1]: [1, 0]})
elif maxdegree == 4:
# o--o<8
centervert = [i for i in range(4) if max(N.row(i)) < maxdegree][0]
centervert = next(i for i in range(4) if max(N.row(i)) < maxdegree)
other = [i for i in range(4) if i != centervert]
G.set_pos(pos={centervert:[0,0],other[0]:[0,1],other[1]:[-0.8660254,-0.5],other[2]:[0.8660254,-0.5]})
G.set_pos(pos={centervert: [0, 0], other[0]: [0, 1],
other[1]: [-0.8660254, -0.5], other[2]: [0.8660254, -0.5]})
elif maxdegree == 27:
# o--o--o--o
centers = [i for i in range(4) if list(N.row(i)).count(3) == 2]
left = [j for j in range(4) if N[centers[0],j] == 3 and j not in centers][0]
right = [j for j in range(4) if N[centers[1],j] == 3 and j not in centers][0]
G.set_pos(pos={left:[-1.5,0],centers[0]:[-0.5,0],centers[1]:[0.5,0],right:[1.5,0]})
left = next(j for j in range(4) if N[centers[0], j] == 3 and j not in centers)
right = next(j for j in range(4) if N[centers[1], j] == 3 and j not in centers)
G.set_pos(pos={left: [-1.5, 0], centers[0]: [-0.5, 0],
centers[1]: [0.5, 0], right: [1.5, 0]})
elif n == 4:
# square
opp = [i for i in range(1,4) if not N[0,i].is_prime()][0]
other = [i for i in range(1,4) if i != opp]
G.set_pos(pos={0:[1,1],other[0]:[-1,1],opp:[-1,-1],other[1]:[1,-1]})
opp = next(i for i in range(1, 4) if not N[0, i].is_prime())
other = [i for i in range(1, 4) if i != opp]
G.set_pos(pos={0: [1, 1], other[0]: [-1, 1],
opp: [-1, -1], other[1]: [1, -1]})
elif maxdegree == 8:
# 8>o--o<8
centers = [i for i in range(6) if list(N.row(i)).count(2) == 3]
left = [j for j in range(6) if N[centers[0],j] == 2 and j not in centers]
right = [j for j in range(6) if N[centers[1],j] == 2 and j not in centers]
G.set_pos(pos={centers[0]:[-0.5,0],left[0]:[-1,0.8660254],left[1]:[-1,-0.8660254],centers[1]:[0.5,0],right[0]:[1,0.8660254],right[1]:[1,-0.8660254]})
left = [j for j in range(6) if N[centers[0], j] == 2 and j not in centers]
right = [j for j in range(6) if N[centers[1], j] == 2 and j not in centers]
G.set_pos(pos={centers[0]: [-0.5, 0], left[0]: [-1, 0.8660254],
left[1]: [-1, -0.8660254], centers[1]: [0.5, 0],
right[0]: [1, 0.8660254], right[1]: [1, -0.8660254]})
elif maxdegree == 18:
# two squares joined on an edge
centers = [i for i in range(6) if list(N.row(i)).count(3) == 2]
top = [j for j in range(6) if N[centers[0],j] == 3]
bl = [j for j in range(6) if N[top[0],j] == 2][0]
br = [j for j in range(6) if N[top[1],j] == 2][0]
G.set_pos(pos={centers[0]:[0,0.5],centers[1]:[0,-0.5],top[0]:[-1,0.5],top[1]:[1,0.5],bl:[-1,-0.5],br:[1,-0.5]})
top = [j for j in range(6) if N[centers[0], j] == 3]
bl = next(j for j in range(6) if N[top[0], j] == 2)
br = next(j for j in range(6) if N[top[1], j] == 2)
G.set_pos(pos={centers[0]: [0, 0.5], centers[1]: [0, -0.5],
top[0]: [-1, 0.5], top[1]: [1, 0.5],
bl: [-1, -0.5], br: [1, -0.5]})
elif maxdegree == 16:
# tree from bottom, 3 regular except for the leaves.
centers = [i for i in range(8) if list(N.row(i)).count(2) == 3]
center = [i for i in centers if len([j for j in centers if N[i,j] == 2]) == 2][0]
center = next(i for i in centers if len([j for j in centers if N[i, j] == 2]) == 2)
centers.remove(center)
bottom = [j for j in range(8) if N[center,j] == 2 and j not in centers][0]
left = [j for j in range(8) if N[centers[0],j] == 2 and j != center]
right = [j for j in range(8) if N[centers[1],j] == 2 and j != center]
G.set_pos(pos={center:[0,0],bottom:[0,-1],centers[0]:[-0.8660254,0.5],centers[1]:[0.8660254,0.5],left[0]:[-0.8660254,1.5],right[0]:[0.8660254,1.5],left[1]:[-1.7320508,0],right[1]:[1.7320508,0]})
bottom = next(j for j in range(8) if N[center, j] == 2 and j not in centers)
left = [j for j in range(8) if N[centers[0], j] == 2 and j != center]
right = [j for j in range(8) if N[centers[1], j] == 2 and j != center]
G.set_pos(pos={center: [0, 0], bottom: [0, -1], centers[0]: [-0.8660254, 0.5],
centers[1]: [0.8660254, 0.5], left[0]: [-0.8660254, 1.5],
right[0]: [0.8660254, 1.5], left[1]: [-1.7320508, 0], right[1]: [1.7320508, 0]})
elif maxdegree == 12:
# tent
centers = [i for i in range(8) if list(N.row(i)).count(2) == 3]
left = [j for j in range(8) if N[centers[0],j] == 2]
left = [j for j in range(8) if N[centers[0], j] == 2]
right = []
for i in range(3):
right.append([j for j in range(8) if N[centers[1],j] == 2 and N[left[i],j] == 3][0])
G.set_pos(pos={centers[0]:[-0.75,0],centers[1]:[0.75,0],left[0]:[-0.75,1],right[0]:[0.75,1],left[1]:[-1.25,-0.75],right[1]:[0.25,-0.75],left[2]:[-0.25,-0.25],right[2]:[1.25,-0.25]})
right.append(next(j for j in range(8) if N[centers[1], j] == 2 and N[left[i], j] == 3))
G.set_pos(pos={centers[0]: [-0.75, 0], centers[1]: [0.75, 0], left[0]: [-0.75, 1],
right[0]: [0.75, 1], left[1]: [-1.25, -0.75], right[1]: [0.25, -0.75],
left[2]: [-0.25, -0.25], right[2]: [1.25, -0.25]})
G.set_vertices(D)
G.relabel(list(range(1, n + 1)))
return G
Expand Down

0 comments on commit bde3823

Please sign in to comment.