CINXE.COM
PEP 676 – PEP Infrastructure Process | peps.python.org
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="color-scheme" content="light dark"> <title>PEP 676 – PEP Infrastructure Process | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-0676/"> <link rel="stylesheet" href="../_static/style.css" type="text/css"> <link rel="stylesheet" href="../_static/mq.css" type="text/css"> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light"> <link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark"> <link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss"> <meta property="og:title" content='PEP 676 – PEP Infrastructure Process | peps.python.org'> <meta property="og:description" content="This PEP addresses the infrastructure around rendering PEP files from reStructuredText files to HTML webpages. We aim to specify a self-contained and maintainable solution for PEP readers, authors, and editors."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-0676/"> <meta property="og:site_name" content="Python Enhancement Proposals (PEPs)"> <meta property="og:image" content="https://peps.python.org/_static/og-image.png"> <meta property="og:image:alt" content="Python PEPs"> <meta property="og:image:width" content="200"> <meta property="og:image:height" content="200"> <meta name="description" content="This PEP addresses the infrastructure around rendering PEP files from reStructuredText files to HTML webpages. We aim to specify a self-contained and maintainable solution for PEP readers, authors, and editors."> <meta name="theme-color" content="#3776ab"> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all"> <title>Following system colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="9"></circle> <path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all"> <title>Selected dark colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all"> <title>Selected light colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> </svg> <script> document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto" </script> <section id="pep-page-section"> <header> <h1>Python Enhancement Proposals</h1> <ul class="breadcrumbs"> <li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> » </li> <li><a href="../pep-0000/">PEP Index</a> » </li> <li>PEP 676</li> </ul> <button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())"> <svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg> <span class="visually-hidden">Toggle light / dark / auto colour theme</span> </button> </header> <article> <section id="pep-content"> <h1 class="page-title">PEP 676 – PEP Infrastructure Process</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">Adam Turner <python at quite.org.uk></dd> <dt class="field-even">Sponsor<span class="colon">:</span></dt> <dd class="field-even">Mariatta <mariatta at python.org></dd> <dt class="field-odd">PEP-Delegate<span class="colon">:</span></dt> <dd class="field-odd">Barry Warsaw <barry at python.org></dd> <dt class="field-even">Discussions-To<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="https://discuss.python.org/t/10774">Discourse thread</a></dd> <dt class="field-odd">Status<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Currently valid informational guidance, or an in-use process">Active</abbr></dd> <dt class="field-even">Type<span class="colon">:</span></dt> <dd class="field-even"><abbr title="Normative PEP describing or proposing a change to a Python community process, workflow or governance">Process</abbr></dd> <dt class="field-odd">Created<span class="colon">:</span></dt> <dd class="field-odd">01-Nov-2021</dd> <dt class="field-even">Post-History<span class="colon">:</span></dt> <dd class="field-even">23-Sep-2021, 30-Nov-2021</dd> <dt class="field-odd">Resolution<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://discuss.python.org/t/10774/99">Discourse message</a></dd> </dl> <hr class="docutils" /> <section id="contents"> <details><summary>Table of Contents</summary><ul class="simple"> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#motivation">Motivation</a></li> <li><a class="reference internal" href="#rationale">Rationale</a><ul> <li><a class="reference internal" href="#simplifying-and-centralising-infrastructure">Simplifying and Centralising Infrastructure</a></li> <li><a class="reference internal" href="#quality-of-life-improvements-and-resolving-issues">Quality-of-Life Improvements and Resolving Issues</a></li> </ul> </li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a></li> <li><a class="reference internal" href="#security-implications">Security Implications</a></li> <li><a class="reference internal" href="#how-to-teach-this">How to Teach This</a></li> <li><a class="reference internal" href="#reference-implementation">Reference Implementation</a></li> <li><a class="reference internal" href="#rejected-ideas">Rejected Ideas</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> <li><a class="reference internal" href="#footnotes">Footnotes</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> </details></section> <section id="abstract"> <h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2> <p>This PEP addresses the infrastructure around rendering PEP files from <a class="reference external" href="https://docutils.sourceforge.io/rst.html">reStructuredText</a> files to HTML webpages. We aim to specify a self-contained and maintainable solution for PEP readers, authors, and editors.</p> </section> <section id="motivation"> <h2><a class="toc-backref" href="#motivation" role="doc-backlink">Motivation</a></h2> <p>As of November 2021, Python Enhancement Proposals (PEPs) are rendered in a multi-system, multi-stage process. A continuous integration (CI) task runs a <a class="reference external" href="https://docutils.sourceforge.io">docutils</a> script to render all PEP files individually. The CI task then uploads a tar archive to a server, where it is retrieved and rendered into the <a class="reference external" href="https://www.python.org">python.org</a> website periodically.</p> <p>This places a constraint on the <a class="reference external" href="https://www.python.org">python.org</a> website to handle raw HTML uploads and handle PEP rendering, and makes the appropriate place to raise issues unclear in some cases <a class="footnote-reference brackets" href="#id11" id="id1">[1]</a>.</p> <p>This PEP provides a specification for self-contained rendering of PEPs. This would:</p> <ul class="simple"> <li>reduce the amount of distributed configuration for supporting PEPs</li> <li>enable quality-of-life improvements for those who read, write, and review PEPs</li> <li>solve a number of outstanding issues, and lay the path for improvements</li> <li>save volunteer maintainers’ time</li> </ul> <p>We propose that PEPs are accessed through <a class="reference external" href="https://peps.python.org/">peps.python.org</a> at the top-level (for example <a class="reference external" href="https://peps.python.org/pep-0008/">peps.python.org/pep-0008</a>), and that all custom tooling to support rendering PEPs is hosted in the <a class="reference external" href="https://github.com/python/peps">python/peps</a> repository.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <section id="simplifying-and-centralising-infrastructure"> <h3><a class="toc-backref" href="#simplifying-and-centralising-infrastructure" role="doc-backlink">Simplifying and Centralising Infrastructure</a></h3> <p>As of November 2021, to locally render a PEP file, a PEP author or editor needs to create a full local instance of the <a class="reference external" href="https://www.python.org">python.org</a> website and run a number of disparate scripts, following <a class="reference external" href="https://pythondotorg.readthedocs.io/pep_generation.html">documentation</a> that lives outside of the <a class="reference external" href="https://github.com/python/peps">python/peps</a> repository.</p> <p>By contrast, the proposed implementation provides a single <a class="reference external" href="https://www.gnu.org/software/make/manual/make.html#Introduction">Makefile</a> and a Python script to render all PEP files, with options to target a web-server or the local filesystem.</p> <p>Using a single repository to host all tooling will clarify where to raise issues, reducing volunteer time spent in triage.</p> <p>Simplified and centralised tooling may also reduce the barrier to entry to further improvements, as the scope of the PEP rendering infrastructure is well defined.</p> </section> <section id="quality-of-life-improvements-and-resolving-issues"> <h3><a class="toc-backref" href="#quality-of-life-improvements-and-resolving-issues" role="doc-backlink">Quality-of-Life Improvements and Resolving Issues</a></h3> <p>There are several requests for additional features in reading PEPs, such as:</p> <ul class="simple"> <li>syntax highlighting <a class="footnote-reference brackets" href="#id12" id="id2">[2]</a></li> <li>use of <code class="docutils literal notranslate"><span class="pre">..</span> <span class="pre">code-block::</span></code> directives <a class="footnote-reference brackets" href="#id12" id="id3">[2]</a></li> <li>support for SVG images <a class="footnote-reference brackets" href="#id13" id="id4">[3]</a></li> <li>typographic quotation marks <a class="footnote-reference brackets" href="#id14" id="id5">[4]</a></li> <li>additional footer information <a class="footnote-reference brackets" href="#id15" id="id6">[5]</a></li> <li>intersphinx functionality <a class="footnote-reference brackets" href="#id16" id="id7">[6]</a></li> <li>dark mode theme <a class="footnote-reference brackets" href="#id17" id="id8">[7]</a></li> </ul> <p>These are “easy wins” from this proposal, and would serve to improve the quality-of-life for consumers of PEPs (including reviewers and writers).</p> <p>For example, the current (as of November 2021) system runs periodically on a schedule. This means that updates to PEPs cannot be circulated immediately, reducing productivity. The reference implementation renders and publishes all PEPs on every commit to the repository, solving the issue by design.</p> <p>The reference implementation fixes several issues <a class="footnote-reference brackets" href="#id18" id="id9">[8]</a>. For example:</p> <ul class="simple"> <li>list styles are currently not respected by <a class="reference external" href="https://www.python.org">python.org</a>’s stylesheets</li> <li>support for updating images in PEPs is challenging in <a class="reference external" href="https://www.python.org">python.org</a></li> </ul> <p>Third-party providers such as <a class="reference external" href="https://readthedocs.org">Read the Docs</a> or <a class="reference external" href="https://www.netlify.com/">Netlify</a> can enhance this experience with features such as automatic rendering of pull requests.</p> </section> </section> <section id="specification"> <h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2> <p>The proposed specification for rendering the PEP files to HTML is as per the <a class="reference internal" href="#reference-implementation">reference implementation</a>.</p> <p>The rendered PEPs MUST be available at <a class="reference external" href="https://peps.python.org/">peps.python.org</a>. These SHOULD be hosted as static files, and MAY be behind a content delivery network (CDN).</p> <p>A service to render previews of pull requests SHOULD be provided. This service MAY be integrated with the hosting and deployment solution.</p> <p>The following redirect rules MUST be created for the <a class="reference external" href="https://www.python.org">python.org</a> domain:</p> <ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/peps/</span></code> -> <a class="reference external" href="https://peps.python.org/">https://peps.python.org/</a></li> <li><code class="docutils literal notranslate"><span class="pre">/dev/peps/</span></code> -> <a class="reference external" href="https://peps.python.org/">https://peps.python.org/</a></li> <li><code class="docutils literal notranslate"><span class="pre">/peps/(.*)\.html</span></code> -> <a class="reference external" href="https://peps.python.org/$1">https://peps.python.org/$1</a></li> <li><code class="docutils literal notranslate"><span class="pre">/dev/peps/(.*)</span></code> -> <a class="reference external" href="https://peps.python.org/$1">https://peps.python.org/$1</a></li> </ul> <p>The following nginx configuration would achieve this:</p> <div class="highlight-nginx notranslate"><div class="highlight"><pre><span></span><span class="k">location</span><span class="w"> </span><span class="p">~</span><span class="w"> </span><span class="sr">^/dev/peps/?(.*)$</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kn">return</span><span class="w"> </span><span class="mi">308</span><span class="w"> </span><span class="s">https://peps.python.org/</span><span class="nv">$1/</span><span class="p">;</span> <span class="p">}</span> <span class="k">location</span><span class="w"> </span><span class="p">~</span><span class="w"> </span><span class="sr">^/peps/(.*)\.html$</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kn">return</span><span class="w"> </span><span class="mi">308</span><span class="w"> </span><span class="s">https://peps.python.org/</span><span class="nv">$1/</span><span class="p">;</span> <span class="p">}</span> <span class="k">location</span><span class="w"> </span><span class="s">^/(dev/)?peps(/.*)?</span>$<span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kn">return</span><span class="w"> </span><span class="mi">308</span><span class="w"> </span><span class="s">https://peps.python.org/</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> <p>Redirects MUST be implemented to preserve <a class="reference external" href="https://url.spec.whatwg.org/#concept-url-fragment">URL fragments</a> for backward compatibility purposes.</p> </section> <section id="backwards-compatibility"> <h2><a class="toc-backref" href="#backwards-compatibility" role="doc-backlink">Backwards Compatibility</a></h2> <p>Due to server-side redirects to the new canonical URLs, links in previously published materials referring to the old URL schemes will be guaranteed to work. All PEPs will continue to render correctly, and a custom stylesheet in the reference implementation improves presentation for some elements (most notably code blocks and block quotes). Therefore, this PEP presents no backwards compatibility issues.</p> </section> <section id="security-implications"> <h2><a class="toc-backref" href="#security-implications" role="doc-backlink">Security Implications</a></h2> <p>The main <a class="reference external" href="https://www.python.org">python.org</a> website will no longer process raw HTML uploads, closing a potential threat vector. PEP rendering and deployment processes will use modern, well-maintained code and secure automated platforms, further reducing the potential attack surface. Therefore, we see no negative security impact.</p> </section> <section id="how-to-teach-this"> <h2><a class="toc-backref" href="#how-to-teach-this" role="doc-backlink">How to Teach This</a></h2> <p>The new canonical URLs will be publicised in the documentation. However, this is mainly a backend infrastructure change, and there should be minimal end-user impact. PEP 1 and PEP 12 will be updated as needed.</p> </section> <section id="reference-implementation"> <h2><a class="toc-backref" href="#reference-implementation" role="doc-backlink">Reference Implementation</a></h2> <p>The proposed implementation has been merged into the <a class="reference external" href="https://github.com/python/peps">python/peps</a> repository in a series of pull requests <a class="footnote-reference brackets" href="#id19" id="id10">[9]</a>. It uses the <a class="reference external" href="https://www.sphinx-doc.org/en/master/">Sphinx</a> documentation system with a custom theme (supporting light and dark colour schemes) and extensions.</p> <p>This already automatically renders all PEPs on every commit, and publishes them to <a class="reference external" href="https://python.github.io/peps">python.github.io/peps</a>. The high level documentation for the system covers <a class="reference external" href="https://python.github.io/peps/docs/build">how to render PEPs locally</a> and <a class="reference external" href="https://python.github.io/peps/docs/rendering_system">the implementation of the system</a>.</p> </section> <section id="rejected-ideas"> <h2><a class="toc-backref" href="#rejected-ideas" role="doc-backlink">Rejected Ideas</a></h2> <p>It would likely be possible to amend the current (as of November 2021) rendering process to include a subset of the quality-of-life improvements and issue mitigations mentioned above. However, we do not believe that this would solve the distributed tooling issue.</p> <p>It would be possible to use the output from the proposed rendering system and import it into <a class="reference external" href="https://www.python.org">python.org</a>. We would argue that this would be the worst of both worlds, as a great deal of complexity is added whilst none is removed.</p> </section> <section id="acknowledgements"> <h2><a class="toc-backref" href="#acknowledgements" role="doc-backlink">Acknowledgements</a></h2> <ul class="simple"> <li>Hugo van Kemenade</li> <li>Pablo Galindo Salgado</li> <li>Éric Araujo</li> <li>Mariatta</li> <li>C.A.M. Gerlach</li> </ul> </section> <section id="footnotes"> <h2><a class="toc-backref" href="#footnotes" role="doc-backlink">Footnotes</a></h2> <aside class="footnote-list brackets"> <aside class="footnote brackets" id="id11" role="doc-footnote"> <dt class="label" id="id11">[<a href="#id1">1</a>]</dt> <dd>For example, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1204">pythondotorg#1024</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1038">pythondotorg#1038</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1387">pythondotorg#1387</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1388">pythondotorg#1388</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1393">pythondotorg#1393</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1564">pythondotorg#1564</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1913">pythondotorg#1913</a>,</aside> <aside class="footnote brackets" id="id12" role="doc-footnote"> <dt class="label" id="id12">[2]<em> (<a href='#id2'>1</a>, <a href='#id3'>2</a>) </em></dt> <dd>Requested: <a class="reference external" href="https://github.com/python/pythondotorg/pull/1063">pythondotorg#1063</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/1206">pythondotorg#1206</a>, <a class="reference external" href="https://github.com/python/pythondotorg/pull/1638">pythondotorg#1638</a>, <a class="reference external" href="https://github.com/python/peps/issues/159">peps#159</a>, <a class="reference external" href="https://github.com/python/peps/pull/1571#discussion_r478701944">comment in peps#1571</a>, <a class="reference external" href="https://github.com/python/peps/pull/1577">peps#1577</a>,</aside> <aside class="footnote brackets" id="id13" role="doc-footnote"> <dt class="label" id="id13">[<a href="#id4">3</a>]</dt> <dd>Requested: <a class="reference external" href="https://github.com/python/peps/issues/701">peps#701</a></aside> <aside class="footnote brackets" id="id14" role="doc-footnote"> <dt class="label" id="id14">[<a href="#id5">4</a>]</dt> <dd>Requested: <a class="reference external" href="https://github.com/python/peps/issues/165">peps#165</a></aside> <aside class="footnote brackets" id="id15" role="doc-footnote"> <dt class="label" id="id15">[<a href="#id6">5</a>]</dt> <dd>Requested: <a class="reference external" href="https://github.com/python/pythondotorg/issues/1564">pythondotorg#1564</a></aside> <aside class="footnote brackets" id="id16" role="doc-footnote"> <dt class="label" id="id16">[<a href="#id7">6</a>]</dt> <dd>Requested: <a class="reference external" href="https://github.com/python/peps/issues/2#issuecomment-339195595">comment in peps#2</a></aside> <aside class="footnote brackets" id="id17" role="doc-footnote"> <dt class="label" id="id17">[<a href="#id8">7</a>]</dt> <dd>Requested: <a class="reference external" href="https://mail.python.org/archives/list/python-dev@python.org/message/E7PK6TLVDJIYXVGFA6ZYPB24KLJASPUI/">in python-dev</a></aside> <aside class="footnote brackets" id="id18" role="doc-footnote"> <dt class="label" id="id18">[<a href="#id9">8</a>]</dt> <dd>As of November 2021, see <a class="reference external" href="https://github.com/python/peps/issues/1387">peps#1387</a>, <a class="reference external" href="https://github.com/python/pythondotorg/issues/824">pythondotorg#824</a>, <a class="reference external" href="https://github.com/python/pythondotorg/pull/1556">pythondotorg#1556</a>,</aside> <aside class="footnote brackets" id="id19" role="doc-footnote"> <dt class="label" id="id19">[<a href="#id10">9</a>]</dt> <dd>Implementation PRs: <a class="reference external" href="https://github.com/python/peps/pull/1930">peps#1930</a>, <a class="reference external" href="https://github.com/python/peps/pull/1931">peps#1931</a>, <a class="reference external" href="https://github.com/python/peps/pull/1932">peps#1932</a>, <a class="reference external" href="https://github.com/python/peps/pull/1933">peps#1933</a>, <a class="reference external" href="https://github.com/python/peps/pull/1934">peps#1934</a></aside> </aside> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <p>This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.</p> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0676.rst">https://github.com/python/peps/blob/main/peps/pep-0676.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0676.rst">2025-02-01 08:55:40 GMT</a></p> </article> <nav id="pep-sidebar"> <h2>Contents</h2> <ul> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#motivation">Motivation</a></li> <li><a class="reference internal" href="#rationale">Rationale</a><ul> <li><a class="reference internal" href="#simplifying-and-centralising-infrastructure">Simplifying and Centralising Infrastructure</a></li> <li><a class="reference internal" href="#quality-of-life-improvements-and-resolving-issues">Quality-of-Life Improvements and Resolving Issues</a></li> </ul> </li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a></li> <li><a class="reference internal" href="#security-implications">Security Implications</a></li> <li><a class="reference internal" href="#how-to-teach-this">How to Teach This</a></li> <li><a class="reference internal" href="#reference-implementation">Reference Implementation</a></li> <li><a class="reference internal" href="#rejected-ideas">Rejected Ideas</a></li> <li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li> <li><a class="reference internal" href="#footnotes">Footnotes</a></li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> <br> <a id="source" href="https://github.com/python/peps/blob/main/peps/pep-0676.rst">Page Source (GitHub)</a> </nav> </section> <script src="../_static/colour_scheme.js"></script> <script src="../_static/wrap_tables.js"></script> <script src="../_static/sticky_banner.js"></script> </body> </html>