diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml
index dbd8c99ff30..5eb3998feee 100644
--- a/.github/workflows/doc-build.yml
+++ b/.github/workflows/doc-build.yml
@@ -56,9 +56,23 @@ jobs:
git config --global --add safe.directory $(pwd)
git config --global user.email "ci-sage@example.com"
git config --global user.name "Build & Test workflow"
+ # mathjax path in old doc
+ mathjax_path_from=$(SAGE_USE_CDNS=no /sage/sage -python -c "from sage_docbuild.conf import mathjax_path; print(mathjax_path)")
.ci/retrofit-worktree.sh worktree-image /sage
- # Keep track of changes to built HTML
- new_version=$(cat src/VERSION.txt); (cd /sage/local/share/doc/sage/html/en && find . -name "*.html" | xargs sed -i '/class="sidebar-brand-text"/s/Sage [0-9a-z.]* /Sage '$new_version' /'; git init && (echo "*.svg binary"; echo "*.pdf binary") >> .gitattributes && (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore; git add -A && git commit --quiet -m "old")
+ # mathjax path in new doc
+ mathjax_path_to=$(SAGE_USE_CDNS=yes /sage/sage -python -c "from sage_docbuild.conf import mathjax_path; print(mathjax_path)")
+ new_version=$(cat src/VERSION.txt)
+ # Wipe out chronic diffs between old doc and new doc
+ (cd /sage/local/share/doc/sage/html/en && \
+ find . -name "*.html" | xargs sed -i -e '/class="sidebar-brand-text"/ s/Sage [0-9a-z.]* /Sage '"$new_version"' /' \
+ -e 's;'"$mathjax_path_from"';'"$mathjax_path_to"';' \
+ -e '\;; d')
+ # Create git repo from old doc
+ (cd /sage/local/share/doc/sage/html/en && \
+ git init && \
+ (echo "*.svg binary"; echo "*.pdf binary") >> .gitattributes && \
+ (echo ".buildinfo"; echo '*.inv'; echo '.git*'; echo '*.svg'; echo '*.pdf'; echo '*.png'; echo 'searchindex.js') > .gitignore; \
+ git add -A && git commit --quiet -m "old")
- name: Download upstream artifact
uses: actions/download-artifact@v3
@@ -77,7 +91,7 @@ jobs:
id: incremental
run: |
# Now re-bootstrap and build. The build is incremental because we were careful with the timestamps.
- ./bootstrap && make build
+ ./bootstrap && make sagemath_doc_html-build-deps
working-directory: ./worktree-image
env:
MAKE: make -j2 --output-sync=recurse
@@ -88,7 +102,7 @@ jobs:
if: always() && steps.worktree.outcome == 'success' && steps.incremental.outcome != 'success'
run: |
set -ex
- make sagelib-clean && git clean -fx src/sage && ./config.status && make build
+ make sagelib-clean && git clean -fx src/sage && ./config.status && make sagemath_doc_html-build-deps
working-directory: ./worktree-image
env:
MAKE: make -j2 --output-sync=recurse
@@ -105,7 +119,7 @@ jobs:
mv /sage/local/share/doc/sage/html/en/.git /sage/.git-doc
make doc-clean doc-uninstall
mkdir -p /sage/local/share/doc/sage/html/en/ && mv /sage/.git-doc /sage/local/share/doc/sage/html/en/.git
- ./config.status && make doc-html
+ ./config.status && make sagemath_doc_html-no-deps
working-directory: ./worktree-image
env:
MAKE: make -j2 --output-sync=recurse
@@ -117,12 +131,58 @@ jobs:
run: |
set -ex
mkdir -p ./docs
- # Create changelog
- echo '## Preview of CHANGES.html'
- (cd /sage/local/share/doc/sage/html/en && git diff --name-only) | tee ./docs/CHANGES.txt
- (cd /sage/local/share/doc/sage/html/en && git diff; rm -rf .git) > ./docs/html.diff
- echo '## Preview of html.diff'; head -n 400 ./docs/html.diff
- (echo '
HTML diff'; sed -E 's,(.*),
\1,' ./docs/CHANGES.txt) > ./docs/CHANGES.html
+ (cd /sage/local/share/doc/sage/html/en && git commit -a -m 'new')
+ # Wipe out chronic diffs between old doc and new doc
+ (cd /sage/local/share/doc/sage/html/en && \
+ find . -name "*.html" | xargs sed -i -e '\;; d')
+ # Create CHANGES.html
+ echo '' > ./docs/CHANGES.html
+ echo '
' >> ./docs/CHANGES.html
+ echo '' >> ./docs/CHANGES.html
+ echo '' >> ./docs/CHANGES.html
+ echo '' >> ./docs/CHANGES.html
+ cat >> ./docs/CHANGES.html << EOF
+
+ EOF
+ echo '' >> ./docs/CHANGES.html
+ echo '' >> ./docs/CHANGES.html
+ (cd /sage/local/share/doc/sage/html/en && git diff HEAD^; rm -rf .git) > ./docs/diff.txt
+ /sage/sage -python - << EOF
+ import re, html
+ with open('./docs/diff.txt', 'r') as f:
+ diff_text = f.read()
+ diff_blocks = re.split(r'^(?=diff --git)', diff_text, flags=re.MULTILINE)
+ out_blocks = []
+ for block in diff_blocks:
+ match = re.search(r'^diff --git a/(.*) b/\1', block, flags=re.MULTILINE)
+ if match:
+ path = match.group(1)
+ out_blocks.append(f'{path}
\n' + html.escape(block).strip() + '
')
+ output_text = '\n'.join(out_blocks)
+ with open('./docs/diff.html', 'w') as f:
+ f.write(output_text)
+ EOF
+ cat ./docs/diff.html >> ./docs/CHANGES.html
+ echo '' >> ./docs/CHANGES.html
+ echo '' >>./docs/CHANGES.html
+ rm ./docs/diff.txt ./docs/diff.html
+ (cd /sage/local/share/doc/sage/html/en && git reset --hard HEAD)
# For some reason the deploy step below cannot find /sage/...
# So copy everything from there to local folder
# We also need to replace the symlinks because netlify is not following them
diff --git a/src/sage/calculus/transforms/dft.py b/src/sage/calculus/transforms/dft.py
index b413bc0ea81..1b165fa6503 100644
--- a/src/sage/calculus/transforms/dft.py
+++ b/src/sage/calculus/transforms/dft.py
@@ -277,7 +277,7 @@ def plot(self):
S = self.list()
return line([[RR(I[i]), RR(S[i])] for i in range(len(I) - 1)])
- def dft(self, chi=lambda x: x):
+ def dft(self, chi=None):
r"""
A discrete Fourier transform "over `\QQ`" using exact
`N`-th roots of unity.
@@ -340,6 +340,8 @@ def dft(self, chi=lambda x: x):
implemented Group (permutation, matrix), call .characters()
and test if the index list is the set of conjugacy classes.
"""
+ if chi is None:
+ chi = lambda x: x
J = self.index_object() # index set of length N
N = len(J)
S = self.list()
diff --git a/src/sage/combinat/finite_state_machine.py b/src/sage/combinat/finite_state_machine.py
index acd0adb2718..045a5de379c 100644
--- a/src/sage/combinat/finite_state_machine.py
+++ b/src/sage/combinat/finite_state_machine.py
@@ -949,7 +949,7 @@
from sage.structure.sage_object import SageObject
-def full_group_by(l, key=lambda x: x):
+def full_group_by(l, key=None):
"""
Group iterable ``l`` by values of ``key``.
@@ -1003,6 +1003,8 @@ def full_group_by(l, key=lambda x: x):
Here, the result ``r`` has been sorted in order to guarantee a
consistent order for the doctest suite.
"""
+ if key is None:
+ key = lambda x: x
elements = defaultdict(list)
original_keys = {}
for item in l:
diff --git a/src/sage/combinat/root_system/type_A.py b/src/sage/combinat/root_system/type_A.py
index 96bcec25f39..48d1474c1f4 100644
--- a/src/sage/combinat/root_system/type_A.py
+++ b/src/sage/combinat/root_system/type_A.py
@@ -277,7 +277,7 @@ def dynkin_diagram(self):
g.add_edge(i, i+1)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -297,6 +297,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (0 cm, 0 cm) circle (.25cm) node[below=4pt]{$1$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n > 1:
@@ -306,7 +308,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
return ret + "".join(node((i-1)*node_dist, 0, label(i))
for i in self.index_set())
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the Dynkin diagram.
@@ -332,6 +334,8 @@ def ascii_art(self, label=lambda i: i, node=None):
n = self.n
if n == 0:
return ""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
ret = "---".join(node(label(i)) for i in range(1,n+1)) + "\n"
diff --git a/src/sage/combinat/root_system/type_A_affine.py b/src/sage/combinat/root_system/type_A_affine.py
index f10d15c7f0e..57ed18afd01 100644
--- a/src/sage/combinat/root_system/type_A_affine.py
+++ b/src/sage/combinat/root_system/type_A_affine.py
@@ -111,7 +111,7 @@ def dynkin_diagram(self):
g.add_edge(0, n)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -128,6 +128,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (3.0 cm, 1.2 cm) circle (.25cm) node[anchor=south east]{$0$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 1:
@@ -148,7 +150,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
ret += node(mid, 1.2, label(0), 'anchor=south east')
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -178,6 +180,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O<=>O
2 3
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
diff --git a/src/sage/combinat/root_system/type_A_infinity.py b/src/sage/combinat/root_system/type_A_infinity.py
index c3a2c603266..9e0f4711ccd 100644
--- a/src/sage/combinat/root_system/type_A_infinity.py
+++ b/src/sage/combinat/root_system/type_A_infinity.py
@@ -86,7 +86,7 @@ def _latex_(self):
"""
return 'A_{{{}}}'.format(self.n._latex_())
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -100,6 +100,8 @@ def ascii_art(self, label=lambda i: i, node=None):
0 1 2 3 4 5 6
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
diff --git a/src/sage/combinat/root_system/type_B.py b/src/sage/combinat/root_system/type_B.py
index 67794141adc..8e9cb6e75a5 100644
--- a/src/sage/combinat/root_system/type_B.py
+++ b/src/sage/combinat/root_system/type_B.py
@@ -245,7 +245,7 @@ def dynkin_diagram(self):
g.set_edge_label(n-1, n, 2)
return g
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the Dynkin diagram.
@@ -261,6 +261,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O---O=>=O
3 4 5 6 7
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
@@ -271,7 +273,7 @@ def ascii_art(self, label=lambda i: i, node=None):
ret += "".join("{!s:4}".format(label(i)) for i in range(1, n + 1))
return ret
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -307,6 +309,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
- :meth:`sage.combinat.root_system.type_C.CartanType._latex_dynkin_diagram`
- :meth:`sage.combinat.root_system.type_BC_affine.CartanType._latex_dynkin_diagram`
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 1:
diff --git a/src/sage/combinat/root_system/type_BC_affine.py b/src/sage/combinat/root_system/type_BC_affine.py
index bbc261902fb..740dfa2e5f3 100644
--- a/src/sage/combinat/root_system/type_BC_affine.py
+++ b/src/sage/combinat/root_system/type_BC_affine.py
@@ -138,7 +138,7 @@ def _latex_(self):
else:
return "BC_{%s}^{(2)}" % self.n
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -180,6 +180,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (0 cm, 0 cm) circle (.25cm) node[below=4pt]{$0$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 1:
@@ -206,7 +208,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += "}\n" + node(0, 0, label(0))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return a ascii art representation of the extended Dynkin diagram.
@@ -227,6 +229,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O=<=O
2 3
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
diff --git a/src/sage/combinat/root_system/type_B_affine.py b/src/sage/combinat/root_system/type_B_affine.py
index 6cfe46255ae..047144f02d6 100644
--- a/src/sage/combinat/root_system/type_B_affine.py
+++ b/src/sage/combinat/root_system/type_B_affine.py
@@ -96,7 +96,7 @@ def dynkin_diagram(self):
g.add_edge(0,2)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -130,6 +130,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (6 cm, 0 cm) circle (.25cm) node[below=4pt]{$4$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 1:
@@ -155,7 +157,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += node(i*node_dist, 0, label(i+1))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -184,6 +186,8 @@ def ascii_art(self, label=lambda i: i, node=None):
"""
n = self.n
from .cartan_type import CartanType
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
if n == 1:
diff --git a/src/sage/combinat/root_system/type_C.py b/src/sage/combinat/root_system/type_C.py
index 57669883bea..8c7ebce3359 100644
--- a/src/sage/combinat/root_system/type_C.py
+++ b/src/sage/combinat/root_system/type_C.py
@@ -232,7 +232,7 @@ def dynkin_diagram(self):
"""
return self.dual().dynkin_diagram().dual()
- def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -268,9 +268,11 @@ def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2, dual=
- :meth:`sage.combinat.root_system.type_C.CartanType._latex_dynkin_diagram`
- :meth:`sage.combinat.root_system.type_BC_affine.CartanType._latex_dynkin_diagram`
"""
+ if label is None:
+ label = lambda i: i
return self.dual()._latex_dynkin_diagram(label=label, node=node, node_dist=node_dist, dual=not dual)
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return a ascii art representation of the extended Dynkin diagram.
@@ -289,6 +291,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O---O=<=O
3 4 5 6 7
"""
+ if label is None:
+ label = lambda i: i
return self.dual().ascii_art(label=label, node=node).replace("=>=", "=<=")
def _default_folded_cartan_type(self):
diff --git a/src/sage/combinat/root_system/type_C_affine.py b/src/sage/combinat/root_system/type_C_affine.py
index 72843b4d0a9..adaf5c77562 100644
--- a/src/sage/combinat/root_system/type_C_affine.py
+++ b/src/sage/combinat/root_system/type_C_affine.py
@@ -76,7 +76,7 @@ def dynkin_diagram(self):
g.add_edge(0,1,2)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -117,6 +117,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (0 cm, 0 cm) circle (.25cm) node[below=4pt]{$0$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 1:
@@ -134,7 +136,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += "}\n" + node(0, 0, label(0))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return a ascii art representation of the extended Dynkin diagram.
@@ -156,6 +158,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O<=>O
0 1
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
diff --git a/src/sage/combinat/root_system/type_D.py b/src/sage/combinat/root_system/type_D.py
index 28d4cd29cb2..5f1469e48a8 100644
--- a/src/sage/combinat/root_system/type_D.py
+++ b/src/sage/combinat/root_system/type_D.py
@@ -272,7 +272,7 @@ def dynkin_diagram(self):
g.add_edge(n-2, n)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -288,6 +288,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (4 cm, -0.7 cm) circle (.25cm) node[right=3pt]{$3$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n == 2:
@@ -305,7 +307,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
ret += node(rt_most, -0.7, label(self.n-1), 'right=3pt')
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return a ascii art representation of the extended Dynkin diagram.
@@ -336,6 +338,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O---O---O
3 4 5 6 7
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
diff --git a/src/sage/combinat/root_system/type_D_affine.py b/src/sage/combinat/root_system/type_D_affine.py
index 3ea86f32438..f77204e4a01 100644
--- a/src/sage/combinat/root_system/type_D_affine.py
+++ b/src/sage/combinat/root_system/type_D_affine.py
@@ -111,7 +111,7 @@ def dynkin_diagram(self):
g.add_edge(0,2)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -130,6 +130,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (4 cm, -0.7 cm) circle (.25cm) node[right=3pt]{$3$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
n = self.n
@@ -152,7 +154,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += node(rt_most, -0.7, label(n-1), "right=3pt")
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -182,6 +184,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O
5 3 4
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
n = self.n
diff --git a/src/sage/combinat/root_system/type_E.py b/src/sage/combinat/root_system/type_E.py
index 478c628a5e9..5771d6d948f 100644
--- a/src/sage/combinat/root_system/type_E.py
+++ b/src/sage/combinat/root_system/type_E.py
@@ -573,7 +573,7 @@ def dynkin_diagram(self):
g.add_edge(i, i+1)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -591,6 +591,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (4 cm, 2 cm) circle (.25cm) node[right=3pt]{$2$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
ret = "\\draw (0 cm,0) -- (%s cm,0);\n" % ((self.n-2)*node_dist)
@@ -601,7 +603,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
ret += node(2*node_dist, node_dist, label(2), 'right=3pt')
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return a ascii art representation of the extended Dynkin diagram.
@@ -626,6 +628,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O---O---O---O---O
2 4 5 6 7 8 9
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
labels = [label(i) for i in [1,3,4,5,6] + list(range(7, self.n+1))] # We exclude 2 because of the special case
diff --git a/src/sage/combinat/root_system/type_E_affine.py b/src/sage/combinat/root_system/type_E_affine.py
index ac64cbfbdde..3268d0603e5 100644
--- a/src/sage/combinat/root_system/type_E_affine.py
+++ b/src/sage/combinat/root_system/type_E_affine.py
@@ -132,7 +132,7 @@ def dynkin_diagram(self):
raise ValueError("Invalid Cartan Type for Type E affine")
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -152,6 +152,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
"""
n = self.n
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
@@ -181,7 +183,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
ret += node(2*node_dist, node_dist, label(2), "right=3pt")
return ret
- def ascii_art(self, label=lambda x: x, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -210,6 +212,8 @@ def ascii_art(self, label=lambda x: x, node=None):
-2 0 1 2 3 4 5 -3
"""
n = self.n
+ if label is None:
+ label = lambda x: x
if node is None:
node = self._ascii_art_node
if n == 6:
diff --git a/src/sage/combinat/root_system/type_F.py b/src/sage/combinat/root_system/type_F.py
index ac33d97fbee..524dd1f7c35 100644
--- a/src/sage/combinat/root_system/type_F.py
+++ b/src/sage/combinat/root_system/type_F.py
@@ -290,7 +290,7 @@ def dynkin_diagram(self):
g.set_edge_label(2,3,2)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -308,6 +308,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (6 cm, 0 cm) circle (.25cm) node[below=4pt]{$4$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
ret = "\\draw (0 cm,0) -- (%s cm,0);\n" % node_dist
@@ -322,7 +324,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += node(i*node_dist, 0, label(i+1))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the extended Dynkin diagram.
@@ -335,6 +337,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O=>=O---O
-1 0 1 2
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
ret = "{}---{}=>={}---{}\n".format(node(label(1)), node(label(2)),
diff --git a/src/sage/combinat/root_system/type_F_affine.py b/src/sage/combinat/root_system/type_F_affine.py
index 403c5b6e8ad..3d2dc8350ee 100644
--- a/src/sage/combinat/root_system/type_F_affine.py
+++ b/src/sage/combinat/root_system/type_F_affine.py
@@ -72,7 +72,7 @@ def dynkin_diagram(self):
g.add_edge(0, 1)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -95,6 +95,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (0 cm, 0 cm) circle (.25cm) node[below=4pt]{$0$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
ret = "\\draw (0 cm,0) -- (%s cm,0);\n" % node_dist
@@ -103,7 +105,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += "}\n" + node(0, 0, label(0))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Returns a ascii art representation of the extended Dynkin diagram
@@ -113,6 +115,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O=>=O---O
2 3 4 5 6
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
ret = "{}---{}---{}=>={}---{}\n".format(node(label(0)), node(label(1)),
diff --git a/src/sage/combinat/root_system/type_G.py b/src/sage/combinat/root_system/type_G.py
index 15da57bc11c..21dae3effa7 100644
--- a/src/sage/combinat/root_system/type_G.py
+++ b/src/sage/combinat/root_system/type_G.py
@@ -200,7 +200,7 @@ def dynkin_diagram(self):
g.set_edge_label(2,1,3)
return g
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -215,6 +215,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
\draw[fill=white] (2 cm, 0 cm) circle (.25cm) node[below=4pt]{$2$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
ret = "\\draw (0,0) -- (%s cm,0);\n" % node_dist
@@ -228,7 +230,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2, dual=
ret += node(node_dist, 0, label(2))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the Dynkin diagram.
@@ -239,6 +241,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O=<=O
3 4
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
ret = " 3\n{}=<={}\n".format(node(label(1)), node(label(2)))
diff --git a/src/sage/combinat/root_system/type_G_affine.py b/src/sage/combinat/root_system/type_G_affine.py
index 2cb1487dfd8..582f7d9ed03 100644
--- a/src/sage/combinat/root_system/type_G_affine.py
+++ b/src/sage/combinat/root_system/type_G_affine.py
@@ -70,7 +70,7 @@ def dynkin_diagram(self):
g.add_edge(0, 2)
return g
- def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2, dual=False):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2, dual=False):
r"""
Return a latex representation of the Dynkin diagram.
@@ -89,6 +89,8 @@ def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2, dual=
\draw[fill=white] (4 cm, 0 cm) circle (.25cm) node[below=4pt]{$0$};
"""
+ if label is None:
+ label = lambda x: x
if node is None:
node = self._latex_draw_node
ret = "\\draw (%s cm,0) -- (%s cm,0);\n" % (node_dist, node_dist*2.0)
@@ -98,7 +100,7 @@ def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2, dual=
ret += node(2*node_dist, 0, label(0))
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Returns an ascii art representation of the Dynkin diagram
@@ -109,6 +111,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O=<=O---O
3 4 2
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
ret = " 3\n{}=<={}---{}".format(node(label(1)), node(label(2)), node(label(0)))
diff --git a/src/sage/combinat/root_system/type_dual.py b/src/sage/combinat/root_system/type_dual.py
index c2ea5d978d3..22c4fb809d4 100644
--- a/src/sage/combinat/root_system/type_dual.py
+++ b/src/sage/combinat/root_system/type_dual.py
@@ -209,7 +209,7 @@ def __reduce__(self):
"""
return (attrcall("dual"), (self._type,))
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
EXAMPLES::
@@ -229,11 +229,13 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
}
\draw[fill=white] (0 cm, 0 cm) circle (.25cm) node[below=4pt]{$0$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
return self._type._latex_dynkin_diagram(label, node, node_dist, dual=True)
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of this Cartan type
@@ -261,6 +263,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O=>=O---O---O=>=O
0 1 2 3 4
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
res = self._type.ascii_art(label, node)
diff --git a/src/sage/combinat/root_system/type_marked.py b/src/sage/combinat/root_system/type_marked.py
index 5d80ca1052a..a9ca7d15a35 100644
--- a/src/sage/combinat/root_system/type_marked.py
+++ b/src/sage/combinat/root_system/type_marked.py
@@ -278,7 +278,7 @@ def _latex_draw_mark(self, x, y, color='black', thickness='thin'):
ret += "\\draw[shift={{({}, {})}}, {}, {}] (0.25cm, -0.25cm) -- (-0.25cm, 0.25cm);\n".format(x, y, color, thickness)
return ret
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -296,11 +296,13 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (6 cm, 0 cm) circle (.25cm) node[below=4pt]{$4$};
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
return self._type._latex_dynkin_diagram(label, node, node_dist)
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of this Cartan type.
@@ -320,6 +322,8 @@ def ascii_art(self, label=lambda i: i, node=None):
X---O---X=>=O---O
0 1 2 3 4
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
return self._type.ascii_art(label, node)
diff --git a/src/sage/combinat/root_system/type_reducible.py b/src/sage/combinat/root_system/type_reducible.py
index 0f84b3f3b90..46cdccd2ab4 100644
--- a/src/sage/combinat/root_system/type_reducible.py
+++ b/src/sage/combinat/root_system/type_reducible.py
@@ -308,7 +308,7 @@ def dynkin_diagram(self):
g.add_edge(relabelling[i,e1], relabelling[i,e2], label=l)
return g
- def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -332,6 +332,8 @@ def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2):
\draw[fill=white] (2 cm, 0 cm) circle (.25cm) node[below=4pt]{$4$};
}
"""
+ if label is None:
+ label = lambda x: x
types = self.component_types()
relabelling = self._index_relabelling
ret = "{\n"
@@ -341,7 +343,7 @@ def _latex_dynkin_diagram(self, label=lambda x: x, node=None, node_dist=2):
ret += "}"
return ret
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of this reducible Cartan type.
@@ -367,6 +369,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O=<=O
11 12 13
"""
+ if label is None:
+ label = lambda i: i
types = self.component_types()
relabelling = self._index_relabelling
return "\n".join(types[i].ascii_art(lambda x: label(relabelling[i,x]), node)
diff --git a/src/sage/combinat/root_system/type_relabel.py b/src/sage/combinat/root_system/type_relabel.py
index 142ddeffa45..1cc633dc16c 100644
--- a/src/sage/combinat/root_system/type_relabel.py
+++ b/src/sage/combinat/root_system/type_relabel.py
@@ -271,7 +271,7 @@ def _latex_(self):
ret += " \\text{ relabelled by } " + latex(self._relabelling)
return ret
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -285,9 +285,11 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[fill=white] (6 cm, 0 cm) circle (.25cm) node[below=4pt]{$2$};
"""
+ if label is None:
+ label = lambda i: i
return self._type._latex_dynkin_diagram(lambda i: label(self._relabelling[i]), node, node_dist)
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of this Cartan type.
@@ -307,6 +309,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O=>=O---O
4 3 2 1 0
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._ascii_art_node
return self._type.ascii_art(lambda i: label(self._relabelling[i]), node)
diff --git a/src/sage/combinat/root_system/type_super_A.py b/src/sage/combinat/root_system/type_super_A.py
index dedc56b9011..c2717a572ff 100644
--- a/src/sage/combinat/root_system/type_super_A.py
+++ b/src/sage/combinat/root_system/type_super_A.py
@@ -737,7 +737,7 @@ def _latex_draw_node(self, x, y, label, position="below=4pt"):
x+.17, y-.17, x-.17, y+.17)
return ret
- def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
+ def _latex_dynkin_diagram(self, label=None, node=None, node_dist=2):
r"""
Return a latex representation of the Dynkin diagram.
@@ -775,6 +775,8 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
\draw[-,thick] (0.17 cm, 0.17 cm) -- (-0.17 cm, -0.17 cm);
\draw[-,thick] (0.17 cm, -0.17 cm) -- (-0.17 cm, 0.17 cm);
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = self._latex_draw_node
if self.n + self.m > 1:
@@ -784,7 +786,7 @@ def _latex_dynkin_diagram(self, label=lambda i: i, node=None, node_dist=2):
return ret + "".join(node((self.m+i)*node_dist, 0, label(i))
for i in self.index_set())
- def ascii_art(self, label=lambda i: i, node=None):
+ def ascii_art(self, label=None, node=None):
"""
Return an ascii art representation of the Dynkin diagram.
@@ -812,6 +814,8 @@ def ascii_art(self, label=lambda i: i, node=None):
O---O---O---O---O---X
-5 -4 -3 -2 -1 0
"""
+ if label is None:
+ label = lambda i: i
if node is None:
node = lambda i: 'O'
ret = "---".join(node(label(i)) for i in range(1,self.m+1))
diff --git a/src/sage/graphs/digraph_generators.py b/src/sage/graphs/digraph_generators.py
index ec2f608e28c..2b29e0e73ef 100644
--- a/src/sage/graphs/digraph_generators.py
+++ b/src/sage/graphs/digraph_generators.py
@@ -1331,7 +1331,7 @@ def RandomDirectedAcyclicGraph(self, n, p, weight_max=None):
return D
- def RandomDirectedGN(self, n, kernel=lambda x: x, seed=None):
+ def RandomDirectedGN(self, n, kernel=None, seed=None):
r"""
Return a random growing network (GN) digraph with `n` vertices.
@@ -1346,7 +1346,7 @@ def RandomDirectedGN(self, n, kernel=lambda x: x, seed=None):
- ``n`` -- integer; number of vertices
- - ``kernel`` -- the attachment kernel
+ - ``kernel`` -- the attachment kernel (default: identity function)
- ``seed`` -- a ``random.Random`` seed or a Python ``int`` for the
random number generator (default: ``None``)
@@ -1365,6 +1365,8 @@ def RandomDirectedGN(self, n, kernel=lambda x: x, seed=None):
True
sage: D.show() # long time
"""
+ if kernel is None:
+ kernel = lambda x: x
if seed is None:
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
diff --git a/src/sage/graphs/graph_generators.py b/src/sage/graphs/graph_generators.py
index e45371bc6d9..e7347c4a2c4 100644
--- a/src/sage/graphs/graph_generators.py
+++ b/src/sage/graphs/graph_generators.py
@@ -1192,7 +1192,7 @@ def nauty_genbg(self, options="", debug=False):
G = BipartiteGraph(s[:-1], format='graph6', partition=partition)
yield G
- def cospectral_graphs(self, vertices, matrix_function=lambda g: g.adjacency_matrix(), graphs=None):
+ def cospectral_graphs(self, vertices, matrix_function=None, graphs=None):
r"""
Find all sets of graphs on ``vertices`` vertices (with
possible restrictions) which are cospectral with respect to a
@@ -1288,6 +1288,9 @@ def cospectral_graphs(self, vertices, matrix_function=lambda g: g.adjacency_matr
....: == g[0][1].laplacian_matrix(normalized=True).charpoly())
True
"""
+ if matrix_function is None:
+ matrix_function = lambda g: g.adjacency_matrix()
+
from sage.graphs.graph_generators import graphs as graph_gen
if graphs is None:
graph_list = graph_gen(vertices, property=lambda _: True)
diff --git a/src/sage/misc/sageinspect.py b/src/sage/misc/sageinspect.py
index 811afc48755..195a2efb485 100644
--- a/src/sage/misc/sageinspect.py
+++ b/src/sage/misc/sageinspect.py
@@ -1810,10 +1810,10 @@ def formatannotation(annotation, base_module=None):
def sage_formatargspec(args, varargs=None, varkw=None, defaults=None,
kwonlyargs=(), kwonlydefaults=None, annotations={},
formatarg=str,
- formatvarargs=lambda name: '*' + name,
- formatvarkw=lambda name: '**' + name,
- formatvalue=lambda value: '=' + repr(value),
- formatreturns=lambda text: ' -> ' + text,
+ formatvarargs=None,
+ formatvarkw=None,
+ formatvalue=None,
+ formatreturns=None,
formatannotation=formatannotation):
"""
Format an argument spec from the values returned by getfullargspec.
@@ -1843,6 +1843,15 @@ def sage_formatargspec(args, varargs=None, varkw=None, defaults=None,
sage: sage_formatargspec(args, defaults=defaults)
'(a, b, c=3)'
"""
+ if formatvarargs is None:
+ formatvarargs = lambda name: '*' + name
+ if formatvarkw is None:
+ formatvarkw = lambda name: '**' + name
+ if formatvalue is None:
+ formatvalue = lambda value: '=' + repr(value)
+ if formatreturns is None:
+ formatreturns = lambda text: ' -> ' + text
+
def formatargandannotation(arg):
result = formatarg(arg)
if arg in annotations:
diff --git a/src/sage/rings/polynomial/groebner_fan.py b/src/sage/rings/polynomial/groebner_fan.py
index 7e067a3a087..eb8928d09b5 100644
--- a/src/sage/rings/polynomial/groebner_fan.py
+++ b/src/sage/rings/polynomial/groebner_fan.py
@@ -1234,7 +1234,7 @@ def homogeneity_space(self):
return h
def render(self, file=None, larger=False, shift=0, rgbcolor=(0, 0, 0),
- polyfill=max_degree, scale_colors=True):
+ polyfill=True, scale_colors=True):
"""
Render a Groebner fan as sage graphics or save as an xfig file.
@@ -1295,6 +1295,8 @@ def render(self, file=None, larger=False, shift=0, rgbcolor=(0, 0, 0),
...
NotImplementedError
"""
+ if polyfill is True:
+ polyfill = max_degree
S = self.__ring
if S.ngens() < 3:
print("For 2-D fan rendering the polynomial ring must have 3 variables (or more, which are ignored).")