Full Code of NulAsh/cpython for AI

3.10.1-win7 830a41fd9d09 cached
4350 files
81.5 MB
21.6M tokens
1 requests
Copy disabled (too large) Download .txt
Showing preview only (86,213K chars total). Download the full file to get everything.
Repository: NulAsh/cpython
Branch: 3.10.1-win7
Commit: 830a41fd9d09
Files: 4350
Total size: 81.5 MB

Directory structure:
gitextract_qq8bwfw7/

├── .azure-pipelines/
│   ├── ci.yml
│   ├── docs-steps.yml
│   ├── macos-steps.yml
│   ├── posix-deps-apt.sh
│   ├── posix-steps.yml
│   ├── pr.yml
│   ├── prebuild-checks.yml
│   ├── windows-layout-steps.yml
│   ├── windows-release/
│   │   ├── build-steps.yml
│   │   ├── checkout.yml
│   │   ├── find-sdk.yml
│   │   ├── gpg-sign.yml
│   │   ├── layout-command.yml
│   │   ├── mingw-lib.yml
│   │   ├── msi-steps.yml
│   │   ├── stage-build.yml
│   │   ├── stage-layout-embed.yml
│   │   ├── stage-layout-full.yml
│   │   ├── stage-layout-msix.yml
│   │   ├── stage-layout-nuget.yml
│   │   ├── stage-msi.yml
│   │   ├── stage-pack-msix.yml
│   │   ├── stage-pack-nuget.yml
│   │   ├── stage-publish-nugetorg.yml
│   │   ├── stage-publish-pythonorg.yml
│   │   ├── stage-publish-store.yml
│   │   ├── stage-sign.yml
│   │   ├── stage-test-embed.yml
│   │   ├── stage-test-msi.yml
│   │   └── stage-test-nuget.yml
│   ├── windows-release.yml
│   └── windows-steps.yml
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── CONTRIBUTING.rst
│   ├── FUNDING.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── SECURITY.md
│   ├── dependabot.yml
│   ├── problem-matchers/
│   │   ├── gcc.json
│   │   ├── msvc.json
│   │   └── sphinx.json
│   └── workflows/
│       ├── build.yml
│       ├── build_msi.yml
│       ├── doc.yml
│       ├── posix-deps-apt.sh
│       └── stale.yml
├── .gitignore
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── Doc/
│   ├── Makefile
│   ├── README.rst
│   ├── about.rst
│   ├── bugs.rst
│   ├── c-api/
│   │   ├── abstract.rst
│   │   ├── allocation.rst
│   │   ├── apiabiversion.rst
│   │   ├── arg.rst
│   │   ├── bool.rst
│   │   ├── buffer.rst
│   │   ├── bytearray.rst
│   │   ├── bytes.rst
│   │   ├── call.rst
│   │   ├── capsule.rst
│   │   ├── cell.rst
│   │   ├── code.rst
│   │   ├── codec.rst
│   │   ├── complex.rst
│   │   ├── concrete.rst
│   │   ├── contextvars.rst
│   │   ├── conversion.rst
│   │   ├── coro.rst
│   │   ├── datetime.rst
│   │   ├── descriptor.rst
│   │   ├── dict.rst
│   │   ├── exceptions.rst
│   │   ├── file.rst
│   │   ├── float.rst
│   │   ├── function.rst
│   │   ├── gcsupport.rst
│   │   ├── gen.rst
│   │   ├── import.rst
│   │   ├── index.rst
│   │   ├── init.rst
│   │   ├── init_config.rst
│   │   ├── intro.rst
│   │   ├── iter.rst
│   │   ├── iterator.rst
│   │   ├── list.rst
│   │   ├── long.rst
│   │   ├── mapping.rst
│   │   ├── marshal.rst
│   │   ├── memory.rst
│   │   ├── memoryview.rst
│   │   ├── method.rst
│   │   ├── module.rst
│   │   ├── none.rst
│   │   ├── number.rst
│   │   ├── objbuffer.rst
│   │   ├── object.rst
│   │   ├── objimpl.rst
│   │   ├── refcounting.rst
│   │   ├── reflection.rst
│   │   ├── sequence.rst
│   │   ├── set.rst
│   │   ├── slice.rst
│   │   ├── stable.rst
│   │   ├── structures.rst
│   │   ├── sys.rst
│   │   ├── tuple.rst
│   │   ├── type.rst
│   │   ├── typehints.rst
│   │   ├── typeobj.rst
│   │   ├── unicode.rst
│   │   ├── utilities.rst
│   │   ├── veryhigh.rst
│   │   └── weakref.rst
│   ├── conf.py
│   ├── contents.rst
│   ├── copyright.rst
│   ├── data/
│   │   └── python3.10.abi
│   ├── distributing/
│   │   └── index.rst
│   ├── distutils/
│   │   ├── _setuptools_disclaimer.rst
│   │   ├── apiref.rst
│   │   ├── builtdist.rst
│   │   ├── commandref.rst
│   │   ├── configfile.rst
│   │   ├── examples.rst
│   │   ├── extending.rst
│   │   ├── index.rst
│   │   ├── introduction.rst
│   │   ├── packageindex.rst
│   │   ├── setupscript.rst
│   │   ├── sourcedist.rst
│   │   └── uploading.rst
│   ├── extending/
│   │   ├── building.rst
│   │   ├── embedding.rst
│   │   ├── extending.rst
│   │   ├── index.rst
│   │   ├── newtypes.rst
│   │   ├── newtypes_tutorial.rst
│   │   └── windows.rst
│   ├── faq/
│   │   ├── design.rst
│   │   ├── extending.rst
│   │   ├── general.rst
│   │   ├── gui.rst
│   │   ├── index.rst
│   │   ├── installed.rst
│   │   ├── library.rst
│   │   ├── programming.rst
│   │   └── windows.rst
│   ├── glossary.rst
│   ├── howto/
│   │   ├── annotations.rst
│   │   ├── argparse.rst
│   │   ├── clinic.rst
│   │   ├── cporting.rst
│   │   ├── curses.rst
│   │   ├── descriptor.rst
│   │   ├── functional.rst
│   │   ├── index.rst
│   │   ├── instrumentation.rst
│   │   ├── ipaddress.rst
│   │   ├── logging-cookbook.rst
│   │   ├── logging.rst
│   │   ├── pyporting.rst
│   │   ├── regex.rst
│   │   ├── sockets.rst
│   │   ├── sorting.rst
│   │   ├── unicode.rst
│   │   └── urllib2.rst
│   ├── includes/
│   │   ├── custom.c
│   │   ├── custom2.c
│   │   ├── custom3.c
│   │   ├── custom4.c
│   │   ├── dbpickle.py
│   │   ├── email-alternative.py
│   │   ├── email-dir.py
│   │   ├── email-headers.py
│   │   ├── email-mime.py
│   │   ├── email-read-alternative.py
│   │   ├── email-simple.py
│   │   ├── email-unpack.py
│   │   ├── minidom-example.py
│   │   ├── mp_newtype.py
│   │   ├── mp_pool.py
│   │   ├── mp_workers.py
│   │   ├── run-func.c
│   │   ├── setup.py
│   │   ├── sqlite3/
│   │   │   ├── adapter_datetime.py
│   │   │   ├── adapter_point_1.py
│   │   │   ├── adapter_point_2.py
│   │   │   ├── collation_reverse.py
│   │   │   ├── complete_statement.py
│   │   │   ├── converter_point.py
│   │   │   ├── ctx_manager.py
│   │   │   ├── execute_1.py
│   │   │   ├── executemany_1.py
│   │   │   ├── executemany_2.py
│   │   │   ├── executescript.py
│   │   │   ├── load_extension.py
│   │   │   ├── md5func.py
│   │   │   ├── mysumaggr.py
│   │   │   ├── pysqlite_datetime.py
│   │   │   ├── row_factory.py
│   │   │   ├── rowclass.py
│   │   │   ├── shortcut_methods.py
│   │   │   └── text_factory.py
│   │   ├── sublist.c
│   │   ├── test.py
│   │   ├── turtle-star.py
│   │   ├── typestruct.h
│   │   └── tzinfo_examples.py
│   ├── install/
│   │   └── index.rst
│   ├── installing/
│   │   └── index.rst
│   ├── library/
│   │   ├── 2to3.rst
│   │   ├── __future__.rst
│   │   ├── __main__.rst
│   │   ├── _thread.rst
│   │   ├── abc.rst
│   │   ├── aifc.rst
│   │   ├── allos.rst
│   │   ├── archiving.rst
│   │   ├── argparse.rst
│   │   ├── array.rst
│   │   ├── ast.rst
│   │   ├── asynchat.rst
│   │   ├── asyncio-api-index.rst
│   │   ├── asyncio-dev.rst
│   │   ├── asyncio-eventloop.rst
│   │   ├── asyncio-exceptions.rst
│   │   ├── asyncio-future.rst
│   │   ├── asyncio-llapi-index.rst
│   │   ├── asyncio-platforms.rst
│   │   ├── asyncio-policy.rst
│   │   ├── asyncio-protocol.rst
│   │   ├── asyncio-queue.rst
│   │   ├── asyncio-stream.rst
│   │   ├── asyncio-subprocess.rst
│   │   ├── asyncio-sync.rst
│   │   ├── asyncio-task.rst
│   │   ├── asyncio.rst
│   │   ├── asyncore.rst
│   │   ├── atexit.rst
│   │   ├── audioop.rst
│   │   ├── audit_events.rst
│   │   ├── base64.rst
│   │   ├── bdb.rst
│   │   ├── binary.rst
│   │   ├── binascii.rst
│   │   ├── binhex.rst
│   │   ├── bisect.rst
│   │   ├── builtins.rst
│   │   ├── bz2.rst
│   │   ├── calendar.rst
│   │   ├── cgi.rst
│   │   ├── cgitb.rst
│   │   ├── chunk.rst
│   │   ├── cmath.rst
│   │   ├── cmd.rst
│   │   ├── code.rst
│   │   ├── codecs.rst
│   │   ├── codeop.rst
│   │   ├── collections.abc.rst
│   │   ├── collections.rst
│   │   ├── colorsys.rst
│   │   ├── compileall.rst
│   │   ├── concurrency.rst
│   │   ├── concurrent.futures.rst
│   │   ├── concurrent.rst
│   │   ├── configparser.rst
│   │   ├── constants.rst
│   │   ├── contextlib.rst
│   │   ├── contextvars.rst
│   │   ├── copy.rst
│   │   ├── copyreg.rst
│   │   ├── crypt.rst
│   │   ├── crypto.rst
│   │   ├── csv.rst
│   │   ├── ctypes.rst
│   │   ├── curses.ascii.rst
│   │   ├── curses.panel.rst
│   │   ├── curses.rst
│   │   ├── custominterp.rst
│   │   ├── dataclasses.rst
│   │   ├── datatypes.rst
│   │   ├── datetime.rst
│   │   ├── dbm.rst
│   │   ├── debug.rst
│   │   ├── decimal.rst
│   │   ├── development.rst
│   │   ├── devmode.rst
│   │   ├── dialog.rst
│   │   ├── difflib.rst
│   │   ├── dis.rst
│   │   ├── distribution.rst
│   │   ├── distutils.rst
│   │   ├── doctest.rst
│   │   ├── email.charset.rst
│   │   ├── email.compat32-message.rst
│   │   ├── email.contentmanager.rst
│   │   ├── email.encoders.rst
│   │   ├── email.errors.rst
│   │   ├── email.examples.rst
│   │   ├── email.generator.rst
│   │   ├── email.header.rst
│   │   ├── email.headerregistry.rst
│   │   ├── email.iterators.rst
│   │   ├── email.message.rst
│   │   ├── email.mime.rst
│   │   ├── email.parser.rst
│   │   ├── email.policy.rst
│   │   ├── email.rst
│   │   ├── email.utils.rst
│   │   ├── ensurepip.rst
│   │   ├── enum.rst
│   │   ├── errno.rst
│   │   ├── exceptions.rst
│   │   ├── faulthandler.rst
│   │   ├── fcntl.rst
│   │   ├── filecmp.rst
│   │   ├── fileformats.rst
│   │   ├── fileinput.rst
│   │   ├── filesys.rst
│   │   ├── fnmatch.rst
│   │   ├── fractions.rst
│   │   ├── frameworks.rst
│   │   ├── ftplib.rst
│   │   ├── functional.rst
│   │   ├── functions.rst
│   │   ├── functools.rst
│   │   ├── gc.rst
│   │   ├── getopt.rst
│   │   ├── getpass.rst
│   │   ├── gettext.rst
│   │   ├── glob.rst
│   │   ├── graphlib.rst
│   │   ├── grp.rst
│   │   ├── gzip.rst
│   │   ├── hashlib.rst
│   │   ├── heapq.rst
│   │   ├── hmac.rst
│   │   ├── html.entities.rst
│   │   ├── html.parser.rst
│   │   ├── html.rst
│   │   ├── http.client.rst
│   │   ├── http.cookiejar.rst
│   │   ├── http.cookies.rst
│   │   ├── http.rst
│   │   ├── http.server.rst
│   │   ├── i18n.rst
│   │   ├── idle.rst
│   │   ├── imaplib.rst
│   │   ├── imghdr.rst
│   │   ├── imp.rst
│   │   ├── importlib.metadata.rst
│   │   ├── importlib.rst
│   │   ├── index.rst
│   │   ├── inspect.rst
│   │   ├── internet.rst
│   │   ├── intro.rst
│   │   ├── io.rst
│   │   ├── ipaddress.rst
│   │   ├── ipc.rst
│   │   ├── itertools.rst
│   │   ├── json.rst
│   │   ├── keyword.rst
│   │   ├── language.rst
│   │   ├── linecache.rst
│   │   ├── locale.rst
│   │   ├── logging.config.rst
│   │   ├── logging.handlers.rst
│   │   ├── logging.rst
│   │   ├── lzma.rst
│   │   ├── mailbox.rst
│   │   ├── mailcap.rst
│   │   ├── markup.rst
│   │   ├── marshal.rst
│   │   ├── math.rst
│   │   ├── mimetypes.rst
│   │   ├── mm.rst
│   │   ├── mmap.rst
│   │   ├── modulefinder.rst
│   │   ├── modules.rst
│   │   ├── msilib.rst
│   │   ├── msvcrt.rst
│   │   ├── multiprocessing.rst
│   │   ├── multiprocessing.shared_memory.rst
│   │   ├── netdata.rst
│   │   ├── netrc.rst
│   │   ├── nis.rst
│   │   ├── nntplib.rst
│   │   ├── numbers.rst
│   │   ├── numeric.rst
│   │   ├── operator.rst
│   │   ├── optparse.rst
│   │   ├── os.path.rst
│   │   ├── os.rst
│   │   ├── ossaudiodev.rst
│   │   ├── pathlib.rst
│   │   ├── pdb.rst
│   │   ├── persistence.rst
│   │   ├── pickle.rst
│   │   ├── pickletools.rst
│   │   ├── pipes.rst
│   │   ├── pkgutil.rst
│   │   ├── platform.rst
│   │   ├── plistlib.rst
│   │   ├── poplib.rst
│   │   ├── posix.rst
│   │   ├── pprint.rst
│   │   ├── profile.rst
│   │   ├── pty.rst
│   │   ├── pwd.rst
│   │   ├── py_compile.rst
│   │   ├── pyclbr.rst
│   │   ├── pydoc.rst
│   │   ├── pyexpat.rst
│   │   ├── python.rst
│   │   ├── queue.rst
│   │   ├── quopri.rst
│   │   ├── random.rst
│   │   ├── re.rst
│   │   ├── readline.rst
│   │   ├── reprlib.rst
│   │   ├── resource.rst
│   │   ├── rlcompleter.rst
│   │   ├── runpy.rst
│   │   ├── sched.rst
│   │   ├── secrets.rst
│   │   ├── security_warnings.rst
│   │   ├── select.rst
│   │   ├── selectors.rst
│   │   ├── shelve.rst
│   │   ├── shlex.rst
│   │   ├── shutil.rst
│   │   ├── signal.rst
│   │   ├── site.rst
│   │   ├── smtpd.rst
│   │   ├── smtplib.rst
│   │   ├── sndhdr.rst
│   │   ├── socket.rst
│   │   ├── socketserver.rst
│   │   ├── spwd.rst
│   │   ├── sqlite3.rst
│   │   ├── ssl.rst
│   │   ├── stat.rst
│   │   ├── statistics.rst
│   │   ├── stdtypes.rst
│   │   ├── string.rst
│   │   ├── stringprep.rst
│   │   ├── struct.rst
│   │   ├── subprocess.rst
│   │   ├── sunau.rst
│   │   ├── superseded.rst
│   │   ├── symtable.rst
│   │   ├── sys.rst
│   │   ├── sysconfig.rst
│   │   ├── syslog.rst
│   │   ├── tabnanny.rst
│   │   ├── tarfile.rst
│   │   ├── telnetlib.rst
│   │   ├── tempfile.rst
│   │   ├── termios.rst
│   │   ├── test.rst
│   │   ├── text.rst
│   │   ├── textwrap.rst
│   │   ├── threading.rst
│   │   ├── time.rst
│   │   ├── timeit.rst
│   │   ├── tk.rst
│   │   ├── tkinter.colorchooser.rst
│   │   ├── tkinter.dnd.rst
│   │   ├── tkinter.font.rst
│   │   ├── tkinter.messagebox.rst
│   │   ├── tkinter.rst
│   │   ├── tkinter.scrolledtext.rst
│   │   ├── tkinter.tix.rst
│   │   ├── tkinter.ttk.rst
│   │   ├── token-list.inc
│   │   ├── token.rst
│   │   ├── tokenize.rst
│   │   ├── trace.rst
│   │   ├── traceback.rst
│   │   ├── tracemalloc.rst
│   │   ├── tty.rst
│   │   ├── tulip_coro.dia
│   │   ├── turtle-star.ps
│   │   ├── turtle.rst
│   │   ├── types.rst
│   │   ├── typing.rst
│   │   ├── undoc.rst
│   │   ├── unicodedata.rst
│   │   ├── unittest.mock-examples.rst
│   │   ├── unittest.mock.rst
│   │   ├── unittest.rst
│   │   ├── unix.rst
│   │   ├── urllib.error.rst
│   │   ├── urllib.parse.rst
│   │   ├── urllib.request.rst
│   │   ├── urllib.robotparser.rst
│   │   ├── urllib.rst
│   │   ├── uu.rst
│   │   ├── uuid.rst
│   │   ├── venv.rst
│   │   ├── warnings.rst
│   │   ├── wave.rst
│   │   ├── weakref.rst
│   │   ├── webbrowser.rst
│   │   ├── windows.rst
│   │   ├── winreg.rst
│   │   ├── winsound.rst
│   │   ├── wsgiref.rst
│   │   ├── xdrlib.rst
│   │   ├── xml.dom.minidom.rst
│   │   ├── xml.dom.pulldom.rst
│   │   ├── xml.dom.rst
│   │   ├── xml.etree.elementtree.rst
│   │   ├── xml.rst
│   │   ├── xml.sax.handler.rst
│   │   ├── xml.sax.reader.rst
│   │   ├── xml.sax.rst
│   │   ├── xml.sax.utils.rst
│   │   ├── xmlrpc.client.rst
│   │   ├── xmlrpc.rst
│   │   ├── xmlrpc.server.rst
│   │   ├── zipapp.rst
│   │   ├── zipfile.rst
│   │   ├── zipimport.rst
│   │   ├── zlib.rst
│   │   └── zoneinfo.rst
│   ├── license.rst
│   ├── make.bat
│   ├── reference/
│   │   ├── compound_stmts.rst
│   │   ├── datamodel.rst
│   │   ├── executionmodel.rst
│   │   ├── expressions.rst
│   │   ├── grammar.rst
│   │   ├── import.rst
│   │   ├── index.rst
│   │   ├── introduction.rst
│   │   ├── lexical_analysis.rst
│   │   ├── simple_stmts.rst
│   │   └── toplevel_components.rst
│   ├── requirements.txt
│   ├── runtime.txt
│   ├── tools/
│   │   ├── extensions/
│   │   │   ├── asdl_highlight.py
│   │   │   ├── c_annotations.py
│   │   │   ├── escape4chm.py
│   │   │   ├── glossary_search.py
│   │   │   ├── patchlevel.py
│   │   │   ├── peg_highlight.py
│   │   │   ├── pyspecific.py
│   │   │   └── suspicious.py
│   │   ├── rstlint.py
│   │   ├── static/
│   │   │   └── changelog_search.js
│   │   ├── susp-ignored.csv
│   │   └── templates/
│   │       ├── customsourcelink.html
│   │       ├── download.html
│   │       ├── dummy.html
│   │       ├── indexcontent.html
│   │       ├── indexsidebar.html
│   │       ├── layout.html
│   │       ├── opensearch.xml
│   │       └── search.html
│   ├── tutorial/
│   │   ├── appendix.rst
│   │   ├── appetite.rst
│   │   ├── classes.rst
│   │   ├── controlflow.rst
│   │   ├── datastructures.rst
│   │   ├── errors.rst
│   │   ├── floatingpoint.rst
│   │   ├── index.rst
│   │   ├── inputoutput.rst
│   │   ├── interactive.rst
│   │   ├── interpreter.rst
│   │   ├── introduction.rst
│   │   ├── modules.rst
│   │   ├── stdlib.rst
│   │   ├── stdlib2.rst
│   │   ├── venv.rst
│   │   └── whatnow.rst
│   ├── using/
│   │   ├── cmdline.rst
│   │   ├── configure.rst
│   │   ├── editors.rst
│   │   ├── index.rst
│   │   ├── mac.rst
│   │   ├── unix.rst
│   │   ├── venv-create.inc
│   │   └── windows.rst
│   └── whatsnew/
│       ├── 2.0.rst
│       ├── 2.1.rst
│       ├── 2.2.rst
│       ├── 2.3.rst
│       ├── 2.4.rst
│       ├── 2.5.rst
│       ├── 2.6.rst
│       ├── 2.7.rst
│       ├── 3.0.rst
│       ├── 3.1.rst
│       ├── 3.10.rst
│       ├── 3.2.rst
│       ├── 3.3.rst
│       ├── 3.4.rst
│       ├── 3.5.rst
│       ├── 3.6.rst
│       ├── 3.7.rst
│       ├── 3.8.rst
│       ├── 3.9.rst
│       ├── changelog.rst
│       └── index.rst
├── Grammar/
│   ├── Tokens
│   └── python.gram
├── Include/
│   ├── Python.h
│   ├── README.rst
│   ├── abstract.h
│   ├── bltinmodule.h
│   ├── boolobject.h
│   ├── bytearrayobject.h
│   ├── bytesobject.h
│   ├── cellobject.h
│   ├── ceval.h
│   ├── classobject.h
│   ├── code.h
│   ├── codecs.h
│   ├── compile.h
│   ├── complexobject.h
│   ├── context.h
│   ├── cpython/
│   │   ├── abstract.h
│   │   ├── bytearrayobject.h
│   │   ├── bytesobject.h
│   │   ├── ceval.h
│   │   ├── code.h
│   │   ├── compile.h
│   │   ├── dictobject.h
│   │   ├── fileobject.h
│   │   ├── fileutils.h
│   │   ├── frameobject.h
│   │   ├── import.h
│   │   ├── initconfig.h
│   │   ├── interpreteridobject.h
│   │   ├── listobject.h
│   │   ├── methodobject.h
│   │   ├── object.h
│   │   ├── objimpl.h
│   │   ├── odictobject.h
│   │   ├── picklebufobject.h
│   │   ├── pyctype.h
│   │   ├── pydebug.h
│   │   ├── pyerrors.h
│   │   ├── pyfpe.h
│   │   ├── pylifecycle.h
│   │   ├── pymem.h
│   │   ├── pystate.h
│   │   ├── pythonrun.h
│   │   ├── pytime.h
│   │   ├── sysmodule.h
│   │   ├── traceback.h
│   │   ├── tupleobject.h
│   │   └── unicodeobject.h
│   ├── datetime.h
│   ├── descrobject.h
│   ├── dictobject.h
│   ├── dynamic_annotations.h
│   ├── enumobject.h
│   ├── errcode.h
│   ├── eval.h
│   ├── exports.h
│   ├── fileobject.h
│   ├── fileutils.h
│   ├── floatobject.h
│   ├── frameobject.h
│   ├── funcobject.h
│   ├── genericaliasobject.h
│   ├── genobject.h
│   ├── import.h
│   ├── internal/
│   │   ├── pycore_abstract.h
│   │   ├── pycore_accu.h
│   │   ├── pycore_asdl.h
│   │   ├── pycore_ast.h
│   │   ├── pycore_ast_state.h
│   │   ├── pycore_atomic.h
│   │   ├── pycore_atomic_funcs.h
│   │   ├── pycore_bitutils.h
│   │   ├── pycore_blocks_output_buffer.h
│   │   ├── pycore_bytes_methods.h
│   │   ├── pycore_call.h
│   │   ├── pycore_ceval.h
│   │   ├── pycore_code.h
│   │   ├── pycore_compile.h
│   │   ├── pycore_condvar.h
│   │   ├── pycore_context.h
│   │   ├── pycore_dtoa.h
│   │   ├── pycore_fileutils.h
│   │   ├── pycore_format.h
│   │   ├── pycore_gc.h
│   │   ├── pycore_getopt.h
│   │   ├── pycore_gil.h
│   │   ├── pycore_hamt.h
│   │   ├── pycore_hashtable.h
│   │   ├── pycore_import.h
│   │   ├── pycore_initconfig.h
│   │   ├── pycore_interp.h
│   │   ├── pycore_list.h
│   │   ├── pycore_long.h
│   │   ├── pycore_moduleobject.h
│   │   ├── pycore_object.h
│   │   ├── pycore_parser.h
│   │   ├── pycore_pathconfig.h
│   │   ├── pycore_pyarena.h
│   │   ├── pycore_pyerrors.h
│   │   ├── pycore_pyhash.h
│   │   ├── pycore_pylifecycle.h
│   │   ├── pycore_pymem.h
│   │   ├── pycore_pystate.h
│   │   ├── pycore_runtime.h
│   │   ├── pycore_structseq.h
│   │   ├── pycore_symtable.h
│   │   ├── pycore_sysmodule.h
│   │   ├── pycore_traceback.h
│   │   ├── pycore_tuple.h
│   │   ├── pycore_ucnhash.h
│   │   ├── pycore_unionobject.h
│   │   └── pycore_warnings.h
│   ├── interpreteridobject.h
│   ├── intrcheck.h
│   ├── iterobject.h
│   ├── listobject.h
│   ├── longintrepr.h
│   ├── longobject.h
│   ├── marshal.h
│   ├── memoryobject.h
│   ├── methodobject.h
│   ├── modsupport.h
│   ├── moduleobject.h
│   ├── namespaceobject.h
│   ├── object.h
│   ├── objimpl.h
│   ├── opcode.h
│   ├── osdefs.h
│   ├── osmodule.h
│   ├── patchlevel.h
│   ├── py_curses.h
│   ├── pycapsule.h
│   ├── pydtrace.d
│   ├── pydtrace.h
│   ├── pyerrors.h
│   ├── pyexpat.h
│   ├── pyframe.h
│   ├── pyhash.h
│   ├── pylifecycle.h
│   ├── pymacconfig.h
│   ├── pymacro.h
│   ├── pymath.h
│   ├── pymem.h
│   ├── pyport.h
│   ├── pystate.h
│   ├── pystrcmp.h
│   ├── pystrhex.h
│   ├── pystrtod.h
│   ├── pythonrun.h
│   ├── pythread.h
│   ├── rangeobject.h
│   ├── setobject.h
│   ├── sliceobject.h
│   ├── structmember.h
│   ├── structseq.h
│   ├── sysmodule.h
│   ├── token.h
│   ├── traceback.h
│   ├── tracemalloc.h
│   ├── tupleobject.h
│   ├── typeslots.h
│   ├── unicodeobject.h
│   ├── warnings.h
│   ├── weakrefobject.h
│   └── win7compat.h
├── LICENSE
├── Lib/
│   ├── __future__.py
│   ├── __phello__.foo.py
│   ├── _aix_support.py
│   ├── _bootsubprocess.py
│   ├── _collections_abc.py
│   ├── _compat_pickle.py
│   ├── _compression.py
│   ├── _markupbase.py
│   ├── _osx_support.py
│   ├── _py_abc.py
│   ├── _pydecimal.py
│   ├── _pyio.py
│   ├── _sitebuiltins.py
│   ├── _strptime.py
│   ├── _threading_local.py
│   ├── _weakrefset.py
│   ├── abc.py
│   ├── aifc.py
│   ├── antigravity.py
│   ├── argparse.py
│   ├── ast.py
│   ├── asynchat.py
│   ├── asyncio/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── base_events.py
│   │   ├── base_futures.py
│   │   ├── base_subprocess.py
│   │   ├── base_tasks.py
│   │   ├── constants.py
│   │   ├── coroutines.py
│   │   ├── events.py
│   │   ├── exceptions.py
│   │   ├── format_helpers.py
│   │   ├── futures.py
│   │   ├── locks.py
│   │   ├── log.py
│   │   ├── mixins.py
│   │   ├── proactor_events.py
│   │   ├── protocols.py
│   │   ├── queues.py
│   │   ├── runners.py
│   │   ├── selector_events.py
│   │   ├── sslproto.py
│   │   ├── staggered.py
│   │   ├── streams.py
│   │   ├── subprocess.py
│   │   ├── tasks.py
│   │   ├── threads.py
│   │   ├── transports.py
│   │   ├── trsock.py
│   │   ├── unix_events.py
│   │   ├── windows_events.py
│   │   └── windows_utils.py
│   ├── asyncore.py
│   ├── base64.py
│   ├── bdb.py
│   ├── binhex.py
│   ├── bisect.py
│   ├── bz2.py
│   ├── cProfile.py
│   ├── calendar.py
│   ├── cgi.py
│   ├── cgitb.py
│   ├── chunk.py
│   ├── cmd.py
│   ├── code.py
│   ├── codecs.py
│   ├── codeop.py
│   ├── collections/
│   │   ├── __init__.py
│   │   └── abc.py
│   ├── colorsys.py
│   ├── compileall.py
│   ├── concurrent/
│   │   ├── __init__.py
│   │   └── futures/
│   │       ├── __init__.py
│   │       ├── _base.py
│   │       ├── process.py
│   │       └── thread.py
│   ├── configparser.py
│   ├── contextlib.py
│   ├── contextvars.py
│   ├── copy.py
│   ├── copyreg.py
│   ├── crypt.py
│   ├── csv.py
│   ├── ctypes/
│   │   ├── __init__.py
│   │   ├── _aix.py
│   │   ├── _endian.py
│   │   ├── macholib/
│   │   │   ├── README.ctypes
│   │   │   ├── __init__.py
│   │   │   ├── dyld.py
│   │   │   ├── dylib.py
│   │   │   ├── fetch_macholib
│   │   │   ├── fetch_macholib.bat
│   │   │   └── framework.py
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_anon.py
│   │   │   ├── test_array_in_pointer.py
│   │   │   ├── test_arrays.py
│   │   │   ├── test_as_parameter.py
│   │   │   ├── test_bitfields.py
│   │   │   ├── test_buffers.py
│   │   │   ├── test_bytes.py
│   │   │   ├── test_byteswap.py
│   │   │   ├── test_callbacks.py
│   │   │   ├── test_cast.py
│   │   │   ├── test_cfuncs.py
│   │   │   ├── test_checkretval.py
│   │   │   ├── test_delattr.py
│   │   │   ├── test_errno.py
│   │   │   ├── test_find.py
│   │   │   ├── test_frombuffer.py
│   │   │   ├── test_funcptr.py
│   │   │   ├── test_functions.py
│   │   │   ├── test_incomplete.py
│   │   │   ├── test_init.py
│   │   │   ├── test_internals.py
│   │   │   ├── test_keeprefs.py
│   │   │   ├── test_libc.py
│   │   │   ├── test_loading.py
│   │   │   ├── test_macholib.py
│   │   │   ├── test_memfunctions.py
│   │   │   ├── test_numbers.py
│   │   │   ├── test_objects.py
│   │   │   ├── test_parameters.py
│   │   │   ├── test_pep3118.py
│   │   │   ├── test_pickling.py
│   │   │   ├── test_pointers.py
│   │   │   ├── test_prototypes.py
│   │   │   ├── test_python_api.py
│   │   │   ├── test_random_things.py
│   │   │   ├── test_refcounts.py
│   │   │   ├── test_repr.py
│   │   │   ├── test_returnfuncptrs.py
│   │   │   ├── test_simplesubclasses.py
│   │   │   ├── test_sizes.py
│   │   │   ├── test_slicing.py
│   │   │   ├── test_stringptr.py
│   │   │   ├── test_strings.py
│   │   │   ├── test_struct_fields.py
│   │   │   ├── test_structures.py
│   │   │   ├── test_unaligned_structures.py
│   │   │   ├── test_unicode.py
│   │   │   ├── test_values.py
│   │   │   ├── test_varsize_struct.py
│   │   │   ├── test_win32.py
│   │   │   └── test_wintypes.py
│   │   ├── util.py
│   │   └── wintypes.py
│   ├── curses/
│   │   ├── __init__.py
│   │   ├── ascii.py
│   │   ├── has_key.py
│   │   ├── panel.py
│   │   └── textpad.py
│   ├── dataclasses.py
│   ├── datetime.py
│   ├── dbm/
│   │   ├── __init__.py
│   │   ├── dumb.py
│   │   ├── gnu.py
│   │   └── ndbm.py
│   ├── decimal.py
│   ├── difflib.py
│   ├── dis.py
│   ├── distutils/
│   │   ├── README
│   │   ├── __init__.py
│   │   ├── _msvccompiler.py
│   │   ├── archive_util.py
│   │   ├── bcppcompiler.py
│   │   ├── ccompiler.py
│   │   ├── cmd.py
│   │   ├── command/
│   │   │   ├── __init__.py
│   │   │   ├── bdist.py
│   │   │   ├── bdist_dumb.py
│   │   │   ├── bdist_msi.py
│   │   │   ├── bdist_rpm.py
│   │   │   ├── build.py
│   │   │   ├── build_clib.py
│   │   │   ├── build_ext.py
│   │   │   ├── build_py.py
│   │   │   ├── build_scripts.py
│   │   │   ├── check.py
│   │   │   ├── clean.py
│   │   │   ├── command_template
│   │   │   ├── config.py
│   │   │   ├── install.py
│   │   │   ├── install_data.py
│   │   │   ├── install_egg_info.py
│   │   │   ├── install_headers.py
│   │   │   ├── install_lib.py
│   │   │   ├── install_scripts.py
│   │   │   ├── register.py
│   │   │   ├── sdist.py
│   │   │   └── upload.py
│   │   ├── config.py
│   │   ├── core.py
│   │   ├── cygwinccompiler.py
│   │   ├── debug.py
│   │   ├── dep_util.py
│   │   ├── dir_util.py
│   │   ├── dist.py
│   │   ├── errors.py
│   │   ├── extension.py
│   │   ├── fancy_getopt.py
│   │   ├── file_util.py
│   │   ├── filelist.py
│   │   ├── log.py
│   │   ├── msvc9compiler.py
│   │   ├── msvccompiler.py
│   │   ├── spawn.py
│   │   ├── sysconfig.py
│   │   ├── tests/
│   │   │   ├── Setup.sample
│   │   │   ├── __init__.py
│   │   │   ├── includetest.rst
│   │   │   ├── support.py
│   │   │   ├── test_archive_util.py
│   │   │   ├── test_bdist.py
│   │   │   ├── test_bdist_dumb.py
│   │   │   ├── test_bdist_msi.py
│   │   │   ├── test_bdist_rpm.py
│   │   │   ├── test_build.py
│   │   │   ├── test_build_clib.py
│   │   │   ├── test_build_ext.py
│   │   │   ├── test_build_py.py
│   │   │   ├── test_build_scripts.py
│   │   │   ├── test_check.py
│   │   │   ├── test_clean.py
│   │   │   ├── test_cmd.py
│   │   │   ├── test_config.py
│   │   │   ├── test_config_cmd.py
│   │   │   ├── test_core.py
│   │   │   ├── test_cygwinccompiler.py
│   │   │   ├── test_dep_util.py
│   │   │   ├── test_dir_util.py
│   │   │   ├── test_dist.py
│   │   │   ├── test_extension.py
│   │   │   ├── test_file_util.py
│   │   │   ├── test_filelist.py
│   │   │   ├── test_install.py
│   │   │   ├── test_install_data.py
│   │   │   ├── test_install_headers.py
│   │   │   ├── test_install_lib.py
│   │   │   ├── test_install_scripts.py
│   │   │   ├── test_log.py
│   │   │   ├── test_msvc9compiler.py
│   │   │   ├── test_msvccompiler.py
│   │   │   ├── test_register.py
│   │   │   ├── test_sdist.py
│   │   │   ├── test_spawn.py
│   │   │   ├── test_sysconfig.py
│   │   │   ├── test_text_file.py
│   │   │   ├── test_unixccompiler.py
│   │   │   ├── test_upload.py
│   │   │   ├── test_util.py
│   │   │   ├── test_version.py
│   │   │   └── test_versionpredicate.py
│   │   ├── text_file.py
│   │   ├── unixccompiler.py
│   │   ├── util.py
│   │   ├── version.py
│   │   └── versionpredicate.py
│   ├── doctest.py
│   ├── email/
│   │   ├── __init__.py
│   │   ├── _encoded_words.py
│   │   ├── _header_value_parser.py
│   │   ├── _parseaddr.py
│   │   ├── _policybase.py
│   │   ├── architecture.rst
│   │   ├── base64mime.py
│   │   ├── charset.py
│   │   ├── contentmanager.py
│   │   ├── encoders.py
│   │   ├── errors.py
│   │   ├── feedparser.py
│   │   ├── generator.py
│   │   ├── header.py
│   │   ├── headerregistry.py
│   │   ├── iterators.py
│   │   ├── message.py
│   │   ├── mime/
│   │   │   ├── __init__.py
│   │   │   ├── application.py
│   │   │   ├── audio.py
│   │   │   ├── base.py
│   │   │   ├── image.py
│   │   │   ├── message.py
│   │   │   ├── multipart.py
│   │   │   ├── nonmultipart.py
│   │   │   └── text.py
│   │   ├── parser.py
│   │   ├── policy.py
│   │   ├── quoprimime.py
│   │   └── utils.py
│   ├── encodings/
│   │   ├── __init__.py
│   │   ├── aliases.py
│   │   ├── ascii.py
│   │   ├── base64_codec.py
│   │   ├── big5.py
│   │   ├── big5hkscs.py
│   │   ├── bz2_codec.py
│   │   ├── charmap.py
│   │   ├── cp037.py
│   │   ├── cp1006.py
│   │   ├── cp1026.py
│   │   ├── cp1125.py
│   │   ├── cp1140.py
│   │   ├── cp1250.py
│   │   ├── cp1251.py
│   │   ├── cp1252.py
│   │   ├── cp1253.py
│   │   ├── cp1254.py
│   │   ├── cp1255.py
│   │   ├── cp1256.py
│   │   ├── cp1257.py
│   │   ├── cp1258.py
│   │   ├── cp273.py
│   │   ├── cp424.py
│   │   ├── cp437.py
│   │   ├── cp500.py
│   │   ├── cp720.py
│   │   ├── cp737.py
│   │   ├── cp775.py
│   │   ├── cp850.py
│   │   ├── cp852.py
│   │   ├── cp855.py
│   │   ├── cp856.py
│   │   ├── cp857.py
│   │   ├── cp858.py
│   │   ├── cp860.py
│   │   ├── cp861.py
│   │   ├── cp862.py
│   │   ├── cp863.py
│   │   ├── cp864.py
│   │   ├── cp865.py
│   │   ├── cp866.py
│   │   ├── cp869.py
│   │   ├── cp874.py
│   │   ├── cp875.py
│   │   ├── cp932.py
│   │   ├── cp949.py
│   │   ├── cp950.py
│   │   ├── euc_jis_2004.py
│   │   ├── euc_jisx0213.py
│   │   ├── euc_jp.py
│   │   ├── euc_kr.py
│   │   ├── gb18030.py
│   │   ├── gb2312.py
│   │   ├── gbk.py
│   │   ├── hex_codec.py
│   │   ├── hp_roman8.py
│   │   ├── hz.py
│   │   ├── idna.py
│   │   ├── iso2022_jp.py
│   │   ├── iso2022_jp_1.py
│   │   ├── iso2022_jp_2.py
│   │   ├── iso2022_jp_2004.py
│   │   ├── iso2022_jp_3.py
│   │   ├── iso2022_jp_ext.py
│   │   ├── iso2022_kr.py
│   │   ├── iso8859_1.py
│   │   ├── iso8859_10.py
│   │   ├── iso8859_11.py
│   │   ├── iso8859_13.py
│   │   ├── iso8859_14.py
│   │   ├── iso8859_15.py
│   │   ├── iso8859_16.py
│   │   ├── iso8859_2.py
│   │   ├── iso8859_3.py
│   │   ├── iso8859_4.py
│   │   ├── iso8859_5.py
│   │   ├── iso8859_6.py
│   │   ├── iso8859_7.py
│   │   ├── iso8859_8.py
│   │   ├── iso8859_9.py
│   │   ├── johab.py
│   │   ├── koi8_r.py
│   │   ├── koi8_t.py
│   │   ├── koi8_u.py
│   │   ├── kz1048.py
│   │   ├── latin_1.py
│   │   ├── mac_arabic.py
│   │   ├── mac_croatian.py
│   │   ├── mac_cyrillic.py
│   │   ├── mac_farsi.py
│   │   ├── mac_greek.py
│   │   ├── mac_iceland.py
│   │   ├── mac_latin2.py
│   │   ├── mac_roman.py
│   │   ├── mac_romanian.py
│   │   ├── mac_turkish.py
│   │   ├── mbcs.py
│   │   ├── oem.py
│   │   ├── palmos.py
│   │   ├── ptcp154.py
│   │   ├── punycode.py
│   │   ├── quopri_codec.py
│   │   ├── raw_unicode_escape.py
│   │   ├── rot_13.py
│   │   ├── shift_jis.py
│   │   ├── shift_jis_2004.py
│   │   ├── shift_jisx0213.py
│   │   ├── tis_620.py
│   │   ├── undefined.py
│   │   ├── unicode_escape.py
│   │   ├── utf_16.py
│   │   ├── utf_16_be.py
│   │   ├── utf_16_le.py
│   │   ├── utf_32.py
│   │   ├── utf_32_be.py
│   │   ├── utf_32_le.py
│   │   ├── utf_7.py
│   │   ├── utf_8.py
│   │   ├── utf_8_sig.py
│   │   ├── uu_codec.py
│   │   └── zlib_codec.py
│   ├── ensurepip/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _bundled/
│   │   │   ├── __init__.py
│   │   │   ├── pip-21.2.4-py3-none-any.whl
│   │   │   └── setuptools-58.1.0-py3-none-any.whl
│   │   └── _uninstall.py
│   ├── enum.py
│   ├── filecmp.py
│   ├── fileinput.py
│   ├── fnmatch.py
│   ├── fractions.py
│   ├── ftplib.py
│   ├── functools.py
│   ├── genericpath.py
│   ├── getopt.py
│   ├── getpass.py
│   ├── gettext.py
│   ├── glob.py
│   ├── graphlib.py
│   ├── gzip.py
│   ├── hashlib.py
│   ├── heapq.py
│   ├── hmac.py
│   ├── html/
│   │   ├── __init__.py
│   │   ├── entities.py
│   │   └── parser.py
│   ├── http/
│   │   ├── __init__.py
│   │   ├── client.py
│   │   ├── cookiejar.py
│   │   ├── cookies.py
│   │   └── server.py
│   ├── idlelib/
│   │   ├── CREDITS.txt
│   │   ├── ChangeLog
│   │   ├── HISTORY.txt
│   │   ├── Icons/
│   │   │   └── README.txt
│   │   ├── NEWS.txt
│   │   ├── NEWS2x.txt
│   │   ├── README.txt
│   │   ├── TODO.txt
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── autocomplete.py
│   │   ├── autocomplete_w.py
│   │   ├── autoexpand.py
│   │   ├── browser.py
│   │   ├── calltip.py
│   │   ├── calltip_w.py
│   │   ├── codecontext.py
│   │   ├── colorizer.py
│   │   ├── config-extensions.def
│   │   ├── config-highlight.def
│   │   ├── config-keys.def
│   │   ├── config-main.def
│   │   ├── config.py
│   │   ├── config_key.py
│   │   ├── configdialog.py
│   │   ├── debugger.py
│   │   ├── debugger_r.py
│   │   ├── debugobj.py
│   │   ├── debugobj_r.py
│   │   ├── delegator.py
│   │   ├── dynoption.py
│   │   ├── editor.py
│   │   ├── extend.txt
│   │   ├── filelist.py
│   │   ├── format.py
│   │   ├── grep.py
│   │   ├── help.html
│   │   ├── help.py
│   │   ├── help_about.py
│   │   ├── history.py
│   │   ├── hyperparser.py
│   │   ├── idle.bat
│   │   ├── idle.py
│   │   ├── idle.pyw
│   │   ├── idle_test/
│   │   │   ├── README.txt
│   │   │   ├── __init__.py
│   │   │   ├── htest.py
│   │   │   ├── mock_idle.py
│   │   │   ├── mock_tk.py
│   │   │   ├── template.py
│   │   │   ├── test_autocomplete.py
│   │   │   ├── test_autocomplete_w.py
│   │   │   ├── test_autoexpand.py
│   │   │   ├── test_browser.py
│   │   │   ├── test_calltip.py
│   │   │   ├── test_calltip_w.py
│   │   │   ├── test_codecontext.py
│   │   │   ├── test_colorizer.py
│   │   │   ├── test_config.py
│   │   │   ├── test_config_key.py
│   │   │   ├── test_configdialog.py
│   │   │   ├── test_debugger.py
│   │   │   ├── test_debugger_r.py
│   │   │   ├── test_debugobj.py
│   │   │   ├── test_debugobj_r.py
│   │   │   ├── test_delegator.py
│   │   │   ├── test_editmenu.py
│   │   │   ├── test_editor.py
│   │   │   ├── test_filelist.py
│   │   │   ├── test_format.py
│   │   │   ├── test_grep.py
│   │   │   ├── test_help.py
│   │   │   ├── test_help_about.py
│   │   │   ├── test_history.py
│   │   │   ├── test_hyperparser.py
│   │   │   ├── test_iomenu.py
│   │   │   ├── test_macosx.py
│   │   │   ├── test_mainmenu.py
│   │   │   ├── test_multicall.py
│   │   │   ├── test_outwin.py
│   │   │   ├── test_parenmatch.py
│   │   │   ├── test_pathbrowser.py
│   │   │   ├── test_percolator.py
│   │   │   ├── test_pyparse.py
│   │   │   ├── test_pyshell.py
│   │   │   ├── test_query.py
│   │   │   ├── test_redirector.py
│   │   │   ├── test_replace.py
│   │   │   ├── test_rpc.py
│   │   │   ├── test_run.py
│   │   │   ├── test_runscript.py
│   │   │   ├── test_scrolledlist.py
│   │   │   ├── test_search.py
│   │   │   ├── test_searchbase.py
│   │   │   ├── test_searchengine.py
│   │   │   ├── test_sidebar.py
│   │   │   ├── test_squeezer.py
│   │   │   ├── test_stackviewer.py
│   │   │   ├── test_statusbar.py
│   │   │   ├── test_text.py
│   │   │   ├── test_textview.py
│   │   │   ├── test_tooltip.py
│   │   │   ├── test_tree.py
│   │   │   ├── test_undo.py
│   │   │   ├── test_warning.py
│   │   │   ├── test_window.py
│   │   │   ├── test_zoomheight.py
│   │   │   ├── test_zzdummy.py
│   │   │   └── tkinter_testing_utils.py
│   │   ├── iomenu.py
│   │   ├── macosx.py
│   │   ├── mainmenu.py
│   │   ├── multicall.py
│   │   ├── outwin.py
│   │   ├── parenmatch.py
│   │   ├── pathbrowser.py
│   │   ├── percolator.py
│   │   ├── pyparse.py
│   │   ├── pyshell.py
│   │   ├── query.py
│   │   ├── redirector.py
│   │   ├── replace.py
│   │   ├── rpc.py
│   │   ├── run.py
│   │   ├── runscript.py
│   │   ├── scrolledlist.py
│   │   ├── search.py
│   │   ├── searchbase.py
│   │   ├── searchengine.py
│   │   ├── sidebar.py
│   │   ├── squeezer.py
│   │   ├── stackviewer.py
│   │   ├── statusbar.py
│   │   ├── textview.py
│   │   ├── tooltip.py
│   │   ├── tree.py
│   │   ├── undo.py
│   │   ├── window.py
│   │   ├── zoomheight.py
│   │   └── zzdummy.py
│   ├── imaplib.py
│   ├── imghdr.py
│   ├── imp.py
│   ├── importlib/
│   │   ├── __init__.py
│   │   ├── _abc.py
│   │   ├── _adapters.py
│   │   ├── _bootstrap.py
│   │   ├── _bootstrap_external.py
│   │   ├── _common.py
│   │   ├── abc.py
│   │   ├── machinery.py
│   │   ├── metadata/
│   │   │   ├── __init__.py
│   │   │   ├── _adapters.py
│   │   │   ├── _collections.py
│   │   │   ├── _functools.py
│   │   │   ├── _itertools.py
│   │   │   ├── _meta.py
│   │   │   └── _text.py
│   │   ├── readers.py
│   │   ├── resources.py
│   │   └── util.py
│   ├── inspect.py
│   ├── io.py
│   ├── ipaddress.py
│   ├── json/
│   │   ├── __init__.py
│   │   ├── decoder.py
│   │   ├── encoder.py
│   │   ├── scanner.py
│   │   └── tool.py
│   ├── keyword.py
│   ├── lib2to3/
│   │   ├── Grammar.txt
│   │   ├── PatternGrammar.txt
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── btm_matcher.py
│   │   ├── btm_utils.py
│   │   ├── fixer_base.py
│   │   ├── fixer_util.py
│   │   ├── fixes/
│   │   │   ├── __init__.py
│   │   │   ├── fix_apply.py
│   │   │   ├── fix_asserts.py
│   │   │   ├── fix_basestring.py
│   │   │   ├── fix_buffer.py
│   │   │   ├── fix_dict.py
│   │   │   ├── fix_except.py
│   │   │   ├── fix_exec.py
│   │   │   ├── fix_execfile.py
│   │   │   ├── fix_exitfunc.py
│   │   │   ├── fix_filter.py
│   │   │   ├── fix_funcattrs.py
│   │   │   ├── fix_future.py
│   │   │   ├── fix_getcwdu.py
│   │   │   ├── fix_has_key.py
│   │   │   ├── fix_idioms.py
│   │   │   ├── fix_import.py
│   │   │   ├── fix_imports.py
│   │   │   ├── fix_imports2.py
│   │   │   ├── fix_input.py
│   │   │   ├── fix_intern.py
│   │   │   ├── fix_isinstance.py
│   │   │   ├── fix_itertools.py
│   │   │   ├── fix_itertools_imports.py
│   │   │   ├── fix_long.py
│   │   │   ├── fix_map.py
│   │   │   ├── fix_metaclass.py
│   │   │   ├── fix_methodattrs.py
│   │   │   ├── fix_ne.py
│   │   │   ├── fix_next.py
│   │   │   ├── fix_nonzero.py
│   │   │   ├── fix_numliterals.py
│   │   │   ├── fix_operator.py
│   │   │   ├── fix_paren.py
│   │   │   ├── fix_print.py
│   │   │   ├── fix_raise.py
│   │   │   ├── fix_raw_input.py
│   │   │   ├── fix_reduce.py
│   │   │   ├── fix_reload.py
│   │   │   ├── fix_renames.py
│   │   │   ├── fix_repr.py
│   │   │   ├── fix_set_literal.py
│   │   │   ├── fix_standarderror.py
│   │   │   ├── fix_sys_exc.py
│   │   │   ├── fix_throw.py
│   │   │   ├── fix_tuple_params.py
│   │   │   ├── fix_types.py
│   │   │   ├── fix_unicode.py
│   │   │   ├── fix_urllib.py
│   │   │   ├── fix_ws_comma.py
│   │   │   ├── fix_xrange.py
│   │   │   ├── fix_xreadlines.py
│   │   │   └── fix_zip.py
│   │   ├── main.py
│   │   ├── patcomp.py
│   │   ├── pgen2/
│   │   │   ├── __init__.py
│   │   │   ├── conv.py
│   │   │   ├── driver.py
│   │   │   ├── grammar.py
│   │   │   ├── literals.py
│   │   │   ├── parse.py
│   │   │   ├── pgen.py
│   │   │   ├── token.py
│   │   │   └── tokenize.py
│   │   ├── pygram.py
│   │   ├── pytree.py
│   │   ├── refactor.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── __main__.py
│   │       ├── data/
│   │       │   ├── README
│   │       │   ├── bom.py
│   │       │   ├── crlf.py
│   │       │   ├── different_encoding.py
│   │       │   ├── false_encoding.py
│   │       │   ├── fixers/
│   │       │   │   ├── bad_order.py
│   │       │   │   ├── myfixes/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── fix_explicit.py
│   │       │   │   │   ├── fix_first.py
│   │       │   │   │   ├── fix_last.py
│   │       │   │   │   ├── fix_parrot.py
│   │       │   │   │   └── fix_preorder.py
│   │       │   │   ├── no_fixer_cls.py
│   │       │   │   └── parrot_example.py
│   │       │   ├── infinite_recursion.py
│   │       │   ├── py2_test_grammar.py
│   │       │   └── py3_test_grammar.py
│   │       ├── pytree_idempotency.py
│   │       ├── support.py
│   │       ├── test_all_fixers.py
│   │       ├── test_fixers.py
│   │       ├── test_main.py
│   │       ├── test_parser.py
│   │       ├── test_pytree.py
│   │       ├── test_refactor.py
│   │       └── test_util.py
│   ├── linecache.py
│   ├── locale.py
│   ├── logging/
│   │   ├── __init__.py
│   │   ├── config.py
│   │   └── handlers.py
│   ├── lzma.py
│   ├── mailbox.py
│   ├── mailcap.py
│   ├── mimetypes.py
│   ├── modulefinder.py
│   ├── msilib/
│   │   ├── __init__.py
│   │   ├── schema.py
│   │   ├── sequence.py
│   │   └── text.py
│   ├── multiprocessing/
│   │   ├── __init__.py
│   │   ├── connection.py
│   │   ├── context.py
│   │   ├── dummy/
│   │   │   ├── __init__.py
│   │   │   └── connection.py
│   │   ├── forkserver.py
│   │   ├── heap.py
│   │   ├── managers.py
│   │   ├── pool.py
│   │   ├── popen_fork.py
│   │   ├── popen_forkserver.py
│   │   ├── popen_spawn_posix.py
│   │   ├── popen_spawn_win32.py
│   │   ├── process.py
│   │   ├── queues.py
│   │   ├── reduction.py
│   │   ├── resource_sharer.py
│   │   ├── resource_tracker.py
│   │   ├── shared_memory.py
│   │   ├── sharedctypes.py
│   │   ├── spawn.py
│   │   ├── synchronize.py
│   │   └── util.py
│   ├── netrc.py
│   ├── nntplib.py
│   ├── ntpath.py
│   ├── nturl2path.py
│   ├── numbers.py
│   ├── opcode.py
│   ├── operator.py
│   ├── optparse.py
│   ├── os.py
│   ├── pathlib.py
│   ├── pdb.py
│   ├── pickle.py
│   ├── pickletools.py
│   ├── pipes.py
│   ├── pkgutil.py
│   ├── platform.py
│   ├── plistlib.py
│   ├── poplib.py
│   ├── posixpath.py
│   ├── pprint.py
│   ├── profile.py
│   ├── pstats.py
│   ├── pty.py
│   ├── py_compile.py
│   ├── pyclbr.py
│   ├── pydoc.py
│   ├── pydoc_data/
│   │   ├── __init__.py
│   │   ├── _pydoc.css
│   │   └── topics.py
│   ├── queue.py
│   ├── quopri.py
│   ├── random.py
│   ├── re.py
│   ├── reprlib.py
│   ├── rlcompleter.py
│   ├── runpy.py
│   ├── sched.py
│   ├── secrets.py
│   ├── selectors.py
│   ├── shelve.py
│   ├── shlex.py
│   ├── shutil.py
│   ├── signal.py
│   ├── site-packages/
│   │   └── README.txt
│   ├── site.py
│   ├── smtpd.py
│   ├── smtplib.py
│   ├── sndhdr.py
│   ├── socket.py
│   ├── socketserver.py
│   ├── sqlite3/
│   │   ├── __init__.py
│   │   ├── dbapi2.py
│   │   ├── dump.py
│   │   └── test/
│   │       ├── __init__.py
│   │       ├── backup.py
│   │       ├── dbapi.py
│   │       ├── dump.py
│   │       ├── factory.py
│   │       ├── hooks.py
│   │       ├── regression.py
│   │       ├── transactions.py
│   │       ├── types.py
│   │       └── userfunctions.py
│   ├── sre_compile.py
│   ├── sre_constants.py
│   ├── sre_parse.py
│   ├── ssl.py
│   ├── stat.py
│   ├── statistics.py
│   ├── string.py
│   ├── stringprep.py
│   ├── struct.py
│   ├── subprocess.py
│   ├── sunau.py
│   ├── symtable.py
│   ├── sysconfig.py
│   ├── tabnanny.py
│   ├── tarfile.py
│   ├── telnetlib.py
│   ├── tempfile.py
│   ├── test/
│   │   ├── Sine-1000Hz-300ms.aif
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _test_atexit.py
│   │   ├── _test_eintr.py
│   │   ├── _test_embed_set_config.py
│   │   ├── _test_multiprocessing.py
│   │   ├── _typed_dict_helper.py
│   │   ├── allsans.pem
│   │   ├── ann_module.py
│   │   ├── ann_module2.py
│   │   ├── ann_module3.py
│   │   ├── ann_module4.py
│   │   ├── ann_module5.py
│   │   ├── ann_module6.py
│   │   ├── audiodata/
│   │   │   ├── pluck-alaw.aifc
│   │   │   ├── pluck-pcm16.aiff
│   │   │   ├── pluck-pcm16.au
│   │   │   ├── pluck-pcm24.aiff
│   │   │   ├── pluck-pcm24.au
│   │   │   ├── pluck-pcm32.aiff
│   │   │   ├── pluck-pcm32.au
│   │   │   ├── pluck-pcm8.aiff
│   │   │   ├── pluck-pcm8.au
│   │   │   ├── pluck-ulaw.aifc
│   │   │   └── pluck-ulaw.au
│   │   ├── audiotest.au
│   │   ├── audiotests.py
│   │   ├── audit-tests.py
│   │   ├── autotest.py
│   │   ├── bad_coding.py
│   │   ├── bad_coding2.py
│   │   ├── bad_getattr.py
│   │   ├── bad_getattr2.py
│   │   ├── bad_getattr3.py
│   │   ├── badcert.pem
│   │   ├── badkey.pem
│   │   ├── badsyntax_3131.py
│   │   ├── badsyntax_future10.py
│   │   ├── badsyntax_future3.py
│   │   ├── badsyntax_future4.py
│   │   ├── badsyntax_future5.py
│   │   ├── badsyntax_future6.py
│   │   ├── badsyntax_future7.py
│   │   ├── badsyntax_future8.py
│   │   ├── badsyntax_future9.py
│   │   ├── badsyntax_pep3120.py
│   │   ├── bisect_cmd.py
│   │   ├── capath/
│   │   │   ├── 4e1295a3.0
│   │   │   ├── 5ed36f99.0
│   │   │   ├── 6e88d7b8.0
│   │   │   ├── 99d0fa06.0
│   │   │   ├── b1930218.0
│   │   │   └── ceff1710.0
│   │   ├── cfgparser.1
│   │   ├── cfgparser.2
│   │   ├── cfgparser.3
│   │   ├── cjkencodings/
│   │   │   ├── big5-utf8.txt
│   │   │   ├── big5.txt
│   │   │   ├── big5hkscs-utf8.txt
│   │   │   ├── big5hkscs.txt
│   │   │   ├── cp949-utf8.txt
│   │   │   ├── cp949.txt
│   │   │   ├── euc_jisx0213-utf8.txt
│   │   │   ├── euc_jisx0213.txt
│   │   │   ├── euc_jp-utf8.txt
│   │   │   ├── euc_jp.txt
│   │   │   ├── euc_kr-utf8.txt
│   │   │   ├── euc_kr.txt
│   │   │   ├── gb18030-utf8.txt
│   │   │   ├── gb18030.txt
│   │   │   ├── gb2312-utf8.txt
│   │   │   ├── gb2312.txt
│   │   │   ├── gbk-utf8.txt
│   │   │   ├── gbk.txt
│   │   │   ├── hz-utf8.txt
│   │   │   ├── hz.txt
│   │   │   ├── iso2022_jp-utf8.txt
│   │   │   ├── iso2022_jp.txt
│   │   │   ├── iso2022_kr-utf8.txt
│   │   │   ├── iso2022_kr.txt
│   │   │   ├── johab-utf8.txt
│   │   │   ├── johab.txt
│   │   │   ├── shift_jis-utf8.txt
│   │   │   ├── shift_jis.txt
│   │   │   ├── shift_jisx0213-utf8.txt
│   │   │   └── shift_jisx0213.txt
│   │   ├── clinic.test
│   │   ├── cmath_testcases.txt
│   │   ├── coding20731.py
│   │   ├── crashers/
│   │   │   ├── README
│   │   │   ├── bogus_code_obj.py
│   │   │   ├── gc_inspection.py
│   │   │   ├── infinite_loop_re.py
│   │   │   ├── mutation_inside_cyclegc.py
│   │   │   ├── recursive_call.py
│   │   │   ├── trace_at_recursion_limit.py
│   │   │   └── underlying_dict.py
│   │   ├── curses_tests.py
│   │   ├── data/
│   │   │   └── README
│   │   ├── dataclass_module_1.py
│   │   ├── dataclass_module_1_str.py
│   │   ├── dataclass_module_2.py
│   │   ├── dataclass_module_2_str.py
│   │   ├── dataclass_textanno.py
│   │   ├── datetimetester.py
│   │   ├── decimaltestdata/
│   │   │   ├── abs.decTest
│   │   │   ├── add.decTest
│   │   │   ├── and.decTest
│   │   │   ├── base.decTest
│   │   │   ├── clamp.decTest
│   │   │   ├── class.decTest
│   │   │   ├── compare.decTest
│   │   │   ├── comparetotal.decTest
│   │   │   ├── comparetotmag.decTest
│   │   │   ├── copy.decTest
│   │   │   ├── copyabs.decTest
│   │   │   ├── copynegate.decTest
│   │   │   ├── copysign.decTest
│   │   │   ├── ddAbs.decTest
│   │   │   ├── ddAdd.decTest
│   │   │   ├── ddAnd.decTest
│   │   │   ├── ddBase.decTest
│   │   │   ├── ddCanonical.decTest
│   │   │   ├── ddClass.decTest
│   │   │   ├── ddCompare.decTest
│   │   │   ├── ddCompareSig.decTest
│   │   │   ├── ddCompareTotal.decTest
│   │   │   ├── ddCompareTotalMag.decTest
│   │   │   ├── ddCopy.decTest
│   │   │   ├── ddCopyAbs.decTest
│   │   │   ├── ddCopyNegate.decTest
│   │   │   ├── ddCopySign.decTest
│   │   │   ├── ddDivide.decTest
│   │   │   ├── ddDivideInt.decTest
│   │   │   ├── ddEncode.decTest
│   │   │   ├── ddFMA.decTest
│   │   │   ├── ddInvert.decTest
│   │   │   ├── ddLogB.decTest
│   │   │   ├── ddMax.decTest
│   │   │   ├── ddMaxMag.decTest
│   │   │   ├── ddMin.decTest
│   │   │   ├── ddMinMag.decTest
│   │   │   ├── ddMinus.decTest
│   │   │   ├── ddMultiply.decTest
│   │   │   ├── ddNextMinus.decTest
│   │   │   ├── ddNextPlus.decTest
│   │   │   ├── ddNextToward.decTest
│   │   │   ├── ddOr.decTest
│   │   │   ├── ddPlus.decTest
│   │   │   ├── ddQuantize.decTest
│   │   │   ├── ddReduce.decTest
│   │   │   ├── ddRemainder.decTest
│   │   │   ├── ddRemainderNear.decTest
│   │   │   ├── ddRotate.decTest
│   │   │   ├── ddSameQuantum.decTest
│   │   │   ├── ddScaleB.decTest
│   │   │   ├── ddShift.decTest
│   │   │   ├── ddSubtract.decTest
│   │   │   ├── ddToIntegral.decTest
│   │   │   ├── ddXor.decTest
│   │   │   ├── decDouble.decTest
│   │   │   ├── decQuad.decTest
│   │   │   ├── decSingle.decTest
│   │   │   ├── divide.decTest
│   │   │   ├── divideint.decTest
│   │   │   ├── dqAbs.decTest
│   │   │   ├── dqAdd.decTest
│   │   │   ├── dqAnd.decTest
│   │   │   ├── dqBase.decTest
│   │   │   ├── dqCanonical.decTest
│   │   │   ├── dqClass.decTest
│   │   │   ├── dqCompare.decTest
│   │   │   ├── dqCompareSig.decTest
│   │   │   ├── dqCompareTotal.decTest
│   │   │   ├── dqCompareTotalMag.decTest
│   │   │   ├── dqCopy.decTest
│   │   │   ├── dqCopyAbs.decTest
│   │   │   ├── dqCopyNegate.decTest
│   │   │   ├── dqCopySign.decTest
│   │   │   ├── dqDivide.decTest
│   │   │   ├── dqDivideInt.decTest
│   │   │   ├── dqEncode.decTest
│   │   │   ├── dqFMA.decTest
│   │   │   ├── dqInvert.decTest
│   │   │   ├── dqLogB.decTest
│   │   │   ├── dqMax.decTest
│   │   │   ├── dqMaxMag.decTest
│   │   │   ├── dqMin.decTest
│   │   │   ├── dqMinMag.decTest
│   │   │   ├── dqMinus.decTest
│   │   │   ├── dqMultiply.decTest
│   │   │   ├── dqNextMinus.decTest
│   │   │   ├── dqNextPlus.decTest
│   │   │   ├── dqNextToward.decTest
│   │   │   ├── dqOr.decTest
│   │   │   ├── dqPlus.decTest
│   │   │   ├── dqQuantize.decTest
│   │   │   ├── dqReduce.decTest
│   │   │   ├── dqRemainder.decTest
│   │   │   ├── dqRemainderNear.decTest
│   │   │   ├── dqRotate.decTest
│   │   │   ├── dqSameQuantum.decTest
│   │   │   ├── dqScaleB.decTest
│   │   │   ├── dqShift.decTest
│   │   │   ├── dqSubtract.decTest
│   │   │   ├── dqToIntegral.decTest
│   │   │   ├── dqXor.decTest
│   │   │   ├── dsBase.decTest
│   │   │   ├── dsEncode.decTest
│   │   │   ├── exp.decTest
│   │   │   ├── extra.decTest
│   │   │   ├── fma.decTest
│   │   │   ├── inexact.decTest
│   │   │   ├── invert.decTest
│   │   │   ├── ln.decTest
│   │   │   ├── log10.decTest
│   │   │   ├── logb.decTest
│   │   │   ├── max.decTest
│   │   │   ├── maxmag.decTest
│   │   │   ├── min.decTest
│   │   │   ├── minmag.decTest
│   │   │   ├── minus.decTest
│   │   │   ├── multiply.decTest
│   │   │   ├── nextminus.decTest
│   │   │   ├── nextplus.decTest
│   │   │   ├── nexttoward.decTest
│   │   │   ├── or.decTest
│   │   │   ├── plus.decTest
│   │   │   ├── power.decTest
│   │   │   ├── powersqrt.decTest
│   │   │   ├── quantize.decTest
│   │   │   ├── randomBound32.decTest
│   │   │   ├── randoms.decTest
│   │   │   ├── reduce.decTest
│   │   │   ├── remainder.decTest
│   │   │   ├── remainderNear.decTest
│   │   │   ├── rescale.decTest
│   │   │   ├── rotate.decTest
│   │   │   ├── rounding.decTest
│   │   │   ├── samequantum.decTest
│   │   │   ├── scaleb.decTest
│   │   │   ├── shift.decTest
│   │   │   ├── squareroot.decTest
│   │   │   ├── subtract.decTest
│   │   │   ├── testall.decTest
│   │   │   ├── tointegral.decTest
│   │   │   ├── tointegralx.decTest
│   │   │   └── xor.decTest
│   │   ├── dis_module.py
│   │   ├── doctest_aliases.py
│   │   ├── double_const.py
│   │   ├── dtracedata/
│   │   │   ├── assert_usable.d
│   │   │   ├── assert_usable.stp
│   │   │   ├── call_stack.d
│   │   │   ├── call_stack.d.expected
│   │   │   ├── call_stack.py
│   │   │   ├── call_stack.stp
│   │   │   ├── call_stack.stp.expected
│   │   │   ├── gc.d
│   │   │   ├── gc.d.expected
│   │   │   ├── gc.py
│   │   │   ├── gc.stp
│   │   │   ├── gc.stp.expected
│   │   │   ├── instance.py
│   │   │   ├── line.d
│   │   │   ├── line.d.expected
│   │   │   └── line.py
│   │   ├── empty.vbs
│   │   ├── encoded_modules/
│   │   │   ├── __init__.py
│   │   │   ├── module_iso_8859_1.py
│   │   │   └── module_koi8_r.py
│   │   ├── exception_hierarchy.txt
│   │   ├── ffdh3072.pem
│   │   ├── final_a.py
│   │   ├── final_b.py
│   │   ├── floating_points.txt
│   │   ├── fork_wait.py
│   │   ├── formatfloat_testcases.txt
│   │   ├── future_test1.py
│   │   ├── future_test2.py
│   │   ├── gdb_sample.py
│   │   ├── good_getattr.py
│   │   ├── idnsans.pem
│   │   ├── ieee754.txt
│   │   ├── imghdrdata/
│   │   │   ├── python.exr
│   │   │   ├── python.pbm
│   │   │   ├── python.pgm
│   │   │   ├── python.ppm
│   │   │   ├── python.ras
│   │   │   ├── python.sgi
│   │   │   ├── python.tiff
│   │   │   └── python.xbm
│   │   ├── imp_dummy.py
│   │   ├── inspect_fodder.py
│   │   ├── inspect_fodder2.py
│   │   ├── inspect_stock_annotations.py
│   │   ├── inspect_stringized_annotations.py
│   │   ├── inspect_stringized_annotations_2.py
│   │   ├── keycert.passwd.pem
│   │   ├── keycert.pem
│   │   ├── keycert2.pem
│   │   ├── keycert3.pem
│   │   ├── keycert4.pem
│   │   ├── keycertecc.pem
│   │   ├── leakers/
│   │   │   ├── README.txt
│   │   │   ├── __init__.py
│   │   │   ├── test_ctypes.py
│   │   │   └── test_selftype.py
│   │   ├── libregrtest/
│   │   │   ├── __init__.py
│   │   │   ├── cmdline.py
│   │   │   ├── main.py
│   │   │   ├── pgo.py
│   │   │   ├── refleak.py
│   │   │   ├── runtest.py
│   │   │   ├── runtest_mp.py
│   │   │   ├── save_env.py
│   │   │   ├── setup.py
│   │   │   ├── utils.py
│   │   │   └── win_utils.py
│   │   ├── list_tests.py
│   │   ├── lock_tests.py
│   │   ├── mailcap.txt
│   │   ├── make_ssl_certs.py
│   │   ├── mapping_tests.py
│   │   ├── math_testcases.txt
│   │   ├── memory_watchdog.py
│   │   ├── mime.types
│   │   ├── mock_socket.py
│   │   ├── mod_generics_cache.py
│   │   ├── mp_fork_bomb.py
│   │   ├── mp_preload.py
│   │   ├── multibytecodec_support.py
│   │   ├── nokia.pem
│   │   ├── nosan.pem
│   │   ├── nullbytecert.pem
│   │   ├── nullcert.pem
│   │   ├── pickletester.py
│   │   ├── profilee.py
│   │   ├── pstats.pck
│   │   ├── pycacert.pem
│   │   ├── pycakey.pem
│   │   ├── pyclbr_input.py
│   │   ├── pydoc_mod.py
│   │   ├── pydocfodder.py
│   │   ├── pythoninfo.py
│   │   ├── randv2_32.pck
│   │   ├── randv2_64.pck
│   │   ├── randv3.pck
│   │   ├── re_tests.py
│   │   ├── regrtest.py
│   │   ├── relimport.py
│   │   ├── reperf.py
│   │   ├── revocation.crl
│   │   ├── sample_doctest.py
│   │   ├── sample_doctest_no_docstrings.py
│   │   ├── sample_doctest_no_doctests.py
│   │   ├── secp384r1.pem
│   │   ├── selfsigned_pythontestdotnet.pem
│   │   ├── seq_tests.py
│   │   ├── sgml_input.html
│   │   ├── signalinterproctester.py
│   │   ├── sndhdrdata/
│   │   │   ├── README
│   │   │   ├── sndhdr.8svx
│   │   │   ├── sndhdr.aifc
│   │   │   ├── sndhdr.aiff
│   │   │   ├── sndhdr.au
│   │   │   ├── sndhdr.hcom
│   │   │   ├── sndhdr.sndt
│   │   │   └── sndhdr.voc
│   │   ├── sortperf.py
│   │   ├── ssl_cert.pem
│   │   ├── ssl_key.passwd.pem
│   │   ├── ssl_key.pem
│   │   ├── ssl_servers.py
│   │   ├── ssltests.py
│   │   ├── string_tests.py
│   │   ├── subprocessdata/
│   │   │   ├── fd_status.py
│   │   │   ├── input_reader.py
│   │   │   ├── qcat.py
│   │   │   ├── qgrep.py
│   │   │   └── sigchild_ignore.py
│   │   ├── support/
│   │   │   ├── __init__.py
│   │   │   ├── bytecode_helper.py
│   │   │   ├── hashlib_helper.py
│   │   │   ├── import_helper.py
│   │   │   ├── interpreters.py
│   │   │   ├── logging_helper.py
│   │   │   ├── os_helper.py
│   │   │   ├── script_helper.py
│   │   │   ├── socket_helper.py
│   │   │   ├── testresult.py
│   │   │   ├── threading_helper.py
│   │   │   └── warnings_helper.py
│   │   ├── talos-2019-0758.pem
│   │   ├── test___all__.py
│   │   ├── test___future__.py
│   │   ├── test__locale.py
│   │   ├── test__opcode.py
│   │   ├── test__osx_support.py
│   │   ├── test__xxsubinterpreters.py
│   │   ├── test_abc.py
│   │   ├── test_abstract_numbers.py
│   │   ├── test_aifc.py
│   │   ├── test_argparse.py
│   │   ├── test_array.py
│   │   ├── test_asdl_parser.py
│   │   ├── test_ast.py
│   │   ├── test_asyncgen.py
│   │   ├── test_asynchat.py
│   │   ├── test_asyncio/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── echo.py
│   │   │   ├── echo2.py
│   │   │   ├── echo3.py
│   │   │   ├── functional.py
│   │   │   ├── test_asyncio_waitfor.py
│   │   │   ├── test_base_events.py
│   │   │   ├── test_buffered_proto.py
│   │   │   ├── test_context.py
│   │   │   ├── test_events.py
│   │   │   ├── test_futures.py
│   │   │   ├── test_futures2.py
│   │   │   ├── test_locks.py
│   │   │   ├── test_pep492.py
│   │   │   ├── test_proactor_events.py
│   │   │   ├── test_protocols.py
│   │   │   ├── test_queues.py
│   │   │   ├── test_runners.py
│   │   │   ├── test_selector_events.py
│   │   │   ├── test_sendfile.py
│   │   │   ├── test_server.py
│   │   │   ├── test_sock_lowlevel.py
│   │   │   ├── test_sslproto.py
│   │   │   ├── test_streams.py
│   │   │   ├── test_subprocess.py
│   │   │   ├── test_tasks.py
│   │   │   ├── test_threads.py
│   │   │   ├── test_transports.py
│   │   │   ├── test_unix_events.py
│   │   │   ├── test_windows_events.py
│   │   │   ├── test_windows_utils.py
│   │   │   └── utils.py
│   │   ├── test_asyncore.py
│   │   ├── test_atexit.py
│   │   ├── test_audioop.py
│   │   ├── test_audit.py
│   │   ├── test_augassign.py
│   │   ├── test_base64.py
│   │   ├── test_baseexception.py
│   │   ├── test_bdb.py
│   │   ├── test_bigaddrspace.py
│   │   ├── test_bigmem.py
│   │   ├── test_binascii.py
│   │   ├── test_binhex.py
│   │   ├── test_binop.py
│   │   ├── test_bisect.py
│   │   ├── test_bool.py
│   │   ├── test_buffer.py
│   │   ├── test_bufio.py
│   │   ├── test_builtin.py
│   │   ├── test_bytes.py
│   │   ├── test_bz2.py
│   │   ├── test_c_locale_coercion.py
│   │   ├── test_calendar.py
│   │   ├── test_call.py
│   │   ├── test_capi.py
│   │   ├── test_cgi.py
│   │   ├── test_cgitb.py
│   │   ├── test_charmapcodec.py
│   │   ├── test_check_c_globals.py
│   │   ├── test_class.py
│   │   ├── test_clinic.py
│   │   ├── test_cmath.py
│   │   ├── test_cmd.py
│   │   ├── test_cmd_line.py
│   │   ├── test_cmd_line_script.py
│   │   ├── test_code.py
│   │   ├── test_code_module.py
│   │   ├── test_codeccallbacks.py
│   │   ├── test_codecencodings_cn.py
│   │   ├── test_codecencodings_hk.py
│   │   ├── test_codecencodings_iso2022.py
│   │   ├── test_codecencodings_jp.py
│   │   ├── test_codecencodings_kr.py
│   │   ├── test_codecencodings_tw.py
│   │   ├── test_codecmaps_cn.py
│   │   ├── test_codecmaps_hk.py
│   │   ├── test_codecmaps_jp.py
│   │   ├── test_codecmaps_kr.py
│   │   ├── test_codecmaps_tw.py
│   │   ├── test_codecs.py
│   │   ├── test_codeop.py
│   │   ├── test_collections.py
│   │   ├── test_colorsys.py
│   │   ├── test_compare.py
│   │   ├── test_compile.py
│   │   ├── test_compileall.py
│   │   ├── test_complex.py
│   │   ├── test_concurrent_futures.py
│   │   ├── test_configparser.py
│   │   ├── test_contains.py
│   │   ├── test_context.py
│   │   ├── test_contextlib.py
│   │   ├── test_contextlib_async.py
│   │   ├── test_copy.py
│   │   ├── test_copyreg.py
│   │   ├── test_coroutines.py
│   │   ├── test_cprofile.py
│   │   ├── test_crashers.py
│   │   ├── test_crypt.py
│   │   ├── test_csv.py
│   │   ├── test_ctypes.py
│   │   ├── test_curses.py
│   │   ├── test_dataclasses.py
│   │   ├── test_datetime.py
│   │   ├── test_dbm.py
│   │   ├── test_dbm_dumb.py
│   │   ├── test_dbm_gnu.py
│   │   ├── test_dbm_ndbm.py
│   │   ├── test_decimal.py
│   │   ├── test_decorators.py
│   │   ├── test_defaultdict.py
│   │   ├── test_deque.py
│   │   ├── test_descr.py
│   │   ├── test_descrtut.py
│   │   ├── test_devpoll.py
│   │   ├── test_dict.py
│   │   ├── test_dict_version.py
│   │   ├── test_dictcomps.py
│   │   ├── test_dictviews.py
│   │   ├── test_difflib.py
│   │   ├── test_difflib_expect.html
│   │   ├── test_dis.py
│   │   ├── test_distutils.py
│   │   ├── test_doctest.py
│   │   ├── test_doctest.txt
│   │   ├── test_doctest2.py
│   │   ├── test_doctest2.txt
│   │   ├── test_doctest3.txt
│   │   ├── test_doctest4.txt
│   │   ├── test_docxmlrpc.py
│   │   ├── test_dtrace.py
│   │   ├── test_dynamic.py
│   │   ├── test_dynamicclassattribute.py
│   │   ├── test_eintr.py
│   │   ├── test_email/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── data/
│   │   │   │   ├── audiotest.au
│   │   │   │   ├── msg_01.txt
│   │   │   │   ├── msg_02.txt
│   │   │   │   ├── msg_03.txt
│   │   │   │   ├── msg_04.txt
│   │   │   │   ├── msg_05.txt
│   │   │   │   ├── msg_06.txt
│   │   │   │   ├── msg_07.txt
│   │   │   │   ├── msg_08.txt
│   │   │   │   ├── msg_09.txt
│   │   │   │   ├── msg_10.txt
│   │   │   │   ├── msg_11.txt
│   │   │   │   ├── msg_12.txt
│   │   │   │   ├── msg_12a.txt
│   │   │   │   ├── msg_13.txt
│   │   │   │   ├── msg_14.txt
│   │   │   │   ├── msg_15.txt
│   │   │   │   ├── msg_16.txt
│   │   │   │   ├── msg_17.txt
│   │   │   │   ├── msg_18.txt
│   │   │   │   ├── msg_19.txt
│   │   │   │   ├── msg_20.txt
│   │   │   │   ├── msg_21.txt
│   │   │   │   ├── msg_22.txt
│   │   │   │   ├── msg_23.txt
│   │   │   │   ├── msg_24.txt
│   │   │   │   ├── msg_25.txt
│   │   │   │   ├── msg_26.txt
│   │   │   │   ├── msg_27.txt
│   │   │   │   ├── msg_28.txt
│   │   │   │   ├── msg_29.txt
│   │   │   │   ├── msg_30.txt
│   │   │   │   ├── msg_31.txt
│   │   │   │   ├── msg_32.txt
│   │   │   │   ├── msg_33.txt
│   │   │   │   ├── msg_34.txt
│   │   │   │   ├── msg_35.txt
│   │   │   │   ├── msg_36.txt
│   │   │   │   ├── msg_37.txt
│   │   │   │   ├── msg_38.txt
│   │   │   │   ├── msg_39.txt
│   │   │   │   ├── msg_40.txt
│   │   │   │   ├── msg_41.txt
│   │   │   │   ├── msg_42.txt
│   │   │   │   ├── msg_43.txt
│   │   │   │   ├── msg_44.txt
│   │   │   │   ├── msg_45.txt
│   │   │   │   └── msg_46.txt
│   │   │   ├── test__encoded_words.py
│   │   │   ├── test__header_value_parser.py
│   │   │   ├── test_asian_codecs.py
│   │   │   ├── test_contentmanager.py
│   │   │   ├── test_defect_handling.py
│   │   │   ├── test_email.py
│   │   │   ├── test_generator.py
│   │   │   ├── test_headerregistry.py
│   │   │   ├── test_inversion.py
│   │   │   ├── test_message.py
│   │   │   ├── test_parser.py
│   │   │   ├── test_pickleable.py
│   │   │   ├── test_policy.py
│   │   │   ├── test_utils.py
│   │   │   └── torture_test.py
│   │   ├── test_embed.py
│   │   ├── test_ensurepip.py
│   │   ├── test_enum.py
│   │   ├── test_enumerate.py
│   │   ├── test_eof.py
│   │   ├── test_epoll.py
│   │   ├── test_errno.py
│   │   ├── test_exception_hierarchy.py
│   │   ├── test_exception_variations.py
│   │   ├── test_exceptions.py
│   │   ├── test_extcall.py
│   │   ├── test_faulthandler.py
│   │   ├── test_fcntl.py
│   │   ├── test_file.py
│   │   ├── test_file_eintr.py
│   │   ├── test_filecmp.py
│   │   ├── test_fileinput.py
│   │   ├── test_fileio.py
│   │   ├── test_finalization.py
│   │   ├── test_float.py
│   │   ├── test_flufl.py
│   │   ├── test_fnmatch.py
│   │   ├── test_fork1.py
│   │   ├── test_format.py
│   │   ├── test_fractions.py
│   │   ├── test_frame.py
│   │   ├── test_frozen.py
│   │   ├── test_fstring.py
│   │   ├── test_ftplib.py
│   │   ├── test_funcattrs.py
│   │   ├── test_functools.py
│   │   ├── test_future.py
│   │   ├── test_future3.py
│   │   ├── test_future4.py
│   │   ├── test_future5.py
│   │   ├── test_gc.py
│   │   ├── test_gdb.py
│   │   ├── test_generator_stop.py
│   │   ├── test_generators.py
│   │   ├── test_genericalias.py
│   │   ├── test_genericclass.py
│   │   ├── test_genericpath.py
│   │   ├── test_genexps.py
│   │   ├── test_getargs2.py
│   │   ├── test_getopt.py
│   │   ├── test_getpass.py
│   │   ├── test_gettext.py
│   │   ├── test_glob.py
│   │   ├── test_global.py
│   │   ├── test_grammar.py
│   │   ├── test_graphlib.py
│   │   ├── test_grp.py
│   │   ├── test_gzip.py
│   │   ├── test_hash.py
│   │   ├── test_hashlib.py
│   │   ├── test_heapq.py
│   │   ├── test_hmac.py
│   │   ├── test_html.py
│   │   ├── test_htmlparser.py
│   │   ├── test_http_cookiejar.py
│   │   ├── test_http_cookies.py
│   │   ├── test_httplib.py
│   │   ├── test_httpservers.py
│   │   ├── test_idle.py
│   │   ├── test_imaplib.py
│   │   ├── test_imghdr.py
│   │   ├── test_imp.py
│   │   ├── test_import/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── data/
│   │   │       ├── circular_imports/
│   │   │       │   ├── basic.py
│   │   │       │   ├── basic2.py
│   │   │       │   ├── binding.py
│   │   │       │   ├── binding2.py
│   │   │       │   ├── from_cycle1.py
│   │   │       │   ├── from_cycle2.py
│   │   │       │   ├── indirect.py
│   │   │       │   ├── rebinding.py
│   │   │       │   ├── rebinding2.py
│   │   │       │   ├── source.py
│   │   │       │   ├── subpackage.py
│   │   │       │   ├── subpkg/
│   │   │       │   │   ├── subpackage2.py
│   │   │       │   │   └── util.py
│   │   │       │   ├── use.py
│   │   │       │   └── util.py
│   │   │       ├── package/
│   │   │       │   ├── __init__.py
│   │   │       │   └── submodule.py
│   │   │       ├── package2/
│   │   │       │   ├── submodule1.py
│   │   │       │   └── submodule2.py
│   │   │       └── unwritable/
│   │   │           ├── __init__.py
│   │   │           └── x.py
│   │   ├── test_importlib/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── abc.py
│   │   │   ├── builtin/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_finder.py
│   │   │   │   └── test_loader.py
│   │   │   ├── data/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── example-21.12-py3-none-any.whl
│   │   │   │   └── example-21.12-py3.6.egg
│   │   │   ├── data01/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── binary.file
│   │   │   │   ├── subdirectory/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── binary.file
│   │   │   │   ├── utf-16.file
│   │   │   │   └── utf-8.file
│   │   │   ├── data02/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── one/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── resource1.txt
│   │   │   │   └── two/
│   │   │   │       ├── __init__.py
│   │   │   │       └── resource2.txt
│   │   │   ├── data03/
│   │   │   │   ├── __init__.py
│   │   │   │   └── namespace/
│   │   │   │       ├── portion1/
│   │   │   │       │   └── __init__.py
│   │   │   │       ├── portion2/
│   │   │   │       │   └── __init__.py
│   │   │   │       └── resource1.txt
│   │   │   ├── extension/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_case_sensitivity.py
│   │   │   │   ├── test_finder.py
│   │   │   │   ├── test_loader.py
│   │   │   │   └── test_path_hook.py
│   │   │   ├── fixtures.py
│   │   │   ├── frozen/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_finder.py
│   │   │   │   └── test_loader.py
│   │   │   ├── import_/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test___loader__.py
│   │   │   │   ├── test___package__.py
│   │   │   │   ├── test_api.py
│   │   │   │   ├── test_caching.py
│   │   │   │   ├── test_fromlist.py
│   │   │   │   ├── test_meta_path.py
│   │   │   │   ├── test_packages.py
│   │   │   │   ├── test_path.py
│   │   │   │   └── test_relative_imports.py
│   │   │   ├── namespace_pkgs/
│   │   │   │   ├── both_portions/
│   │   │   │   │   └── foo/
│   │   │   │   │       ├── one.py
│   │   │   │   │       └── two.py
│   │   │   │   ├── module_and_namespace_package/
│   │   │   │   │   ├── a_test/
│   │   │   │   │   │   └── empty
│   │   │   │   │   └── a_test.py
│   │   │   │   ├── not_a_namespace_pkg/
│   │   │   │   │   └── foo/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── one.py
│   │   │   │   ├── portion1/
│   │   │   │   │   └── foo/
│   │   │   │   │       └── one.py
│   │   │   │   ├── portion2/
│   │   │   │   │   └── foo/
│   │   │   │   │       └── two.py
│   │   │   │   ├── project1/
│   │   │   │   │   └── parent/
│   │   │   │   │       └── child/
│   │   │   │   │           └── one.py
│   │   │   │   ├── project2/
│   │   │   │   │   └── parent/
│   │   │   │   │       └── child/
│   │   │   │   │           └── two.py
│   │   │   │   └── project3/
│   │   │   │       └── parent/
│   │   │   │           └── child/
│   │   │   │               └── three.py
│   │   │   ├── namespacedata01/
│   │   │   │   ├── binary.file
│   │   │   │   ├── utf-16.file
│   │   │   │   └── utf-8.file
│   │   │   ├── partial/
│   │   │   │   ├── cfimport.py
│   │   │   │   └── pool_in_threads.py
│   │   │   ├── source/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_case_sensitivity.py
│   │   │   │   ├── test_file_loader.py
│   │   │   │   ├── test_finder.py
│   │   │   │   ├── test_path_hook.py
│   │   │   │   └── test_source_encoding.py
│   │   │   ├── stubs.py
│   │   │   ├── test_abc.py
│   │   │   ├── test_api.py
│   │   │   ├── test_files.py
│   │   │   ├── test_lazy.py
│   │   │   ├── test_locks.py
│   │   │   ├── test_main.py
│   │   │   ├── test_metadata_api.py
│   │   │   ├── test_namespace_pkgs.py
│   │   │   ├── test_open.py
│   │   │   ├── test_path.py
│   │   │   ├── test_pkg_import.py
│   │   │   ├── test_read.py
│   │   │   ├── test_reader.py
│   │   │   ├── test_resource.py
│   │   │   ├── test_spec.py
│   │   │   ├── test_threaded_import.py
│   │   │   ├── test_util.py
│   │   │   ├── test_windows.py
│   │   │   ├── test_zip.py
│   │   │   ├── threaded_import_hangers.py
│   │   │   ├── update-zips.py
│   │   │   ├── util.py
│   │   │   ├── zipdata01/
│   │   │   │   └── __init__.py
│   │   │   └── zipdata02/
│   │   │       └── __init__.py
│   │   ├── test_index.py
│   │   ├── test_inspect.py
│   │   ├── test_int.py
│   │   ├── test_int_literal.py
│   │   ├── test_interpreters.py
│   │   ├── test_io.py
│   │   ├── test_ioctl.py
│   │   ├── test_ipaddress.py
│   │   ├── test_isinstance.py
│   │   ├── test_iter.py
│   │   ├── test_iterlen.py
│   │   ├── test_itertools.py
│   │   ├── test_json/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_decode.py
│   │   │   ├── test_default.py
│   │   │   ├── test_dump.py
│   │   │   ├── test_encode_basestring_ascii.py
│   │   │   ├── test_enum.py
│   │   │   ├── test_fail.py
│   │   │   ├── test_float.py
│   │   │   ├── test_indent.py
│   │   │   ├── test_pass1.py
│   │   │   ├── test_pass2.py
│   │   │   ├── test_pass3.py
│   │   │   ├── test_recursion.py
│   │   │   ├── test_scanstring.py
│   │   │   ├── test_separators.py
│   │   │   ├── test_speedups.py
│   │   │   ├── test_tool.py
│   │   │   └── test_unicode.py
│   │   ├── test_keyword.py
│   │   ├── test_keywordonlyarg.py
│   │   ├── test_kqueue.py
│   │   ├── test_largefile.py
│   │   ├── test_lib2to3.py
│   │   ├── test_linecache.py
│   │   ├── test_list.py
│   │   ├── test_listcomps.py
│   │   ├── test_lltrace.py
│   │   ├── test_locale.py
│   │   ├── test_logging.py
│   │   ├── test_long.py
│   │   ├── test_longexp.py
│   │   ├── test_lzma.py
│   │   ├── test_mailbox.py
│   │   ├── test_mailcap.py
│   │   ├── test_marshal.py
│   │   ├── test_math.py
│   │   ├── test_memoryio.py
│   │   ├── test_memoryview.py
│   │   ├── test_metaclass.py
│   │   ├── test_mimetypes.py
│   │   ├── test_minidom.py
│   │   ├── test_mmap.py
│   │   ├── test_module.py
│   │   ├── test_modulefinder.py
│   │   ├── test_msilib.py
│   │   ├── test_multibytecodec.py
│   │   ├── test_multiprocessing_fork.py
│   │   ├── test_multiprocessing_forkserver.py
│   │   ├── test_multiprocessing_main_handling.py
│   │   ├── test_multiprocessing_spawn.py
│   │   ├── test_named_expressions.py
│   │   ├── test_netrc.py
│   │   ├── test_nis.py
│   │   ├── test_nntplib.py
│   │   ├── test_ntpath.py
│   │   ├── test_numeric_tower.py
│   │   ├── test_opcache.py
│   │   ├── test_opcodes.py
│   │   ├── test_openpty.py
│   │   ├── test_operator.py
│   │   ├── test_optparse.py
│   │   ├── test_ordered_dict.py
│   │   ├── test_os.py
│   │   ├── test_ossaudiodev.py
│   │   ├── test_osx_env.py
│   │   ├── test_pathlib.py
│   │   ├── test_patma.py
│   │   ├── test_pdb.py
│   │   ├── test_peepholer.py
│   │   ├── test_peg_generator/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_c_parser.py
│   │   │   ├── test_first_sets.py
│   │   │   ├── test_grammar_validator.py
│   │   │   └── test_pegen.py
│   │   ├── test_pickle.py
│   │   ├── test_picklebuffer.py
│   │   ├── test_pickletools.py
│   │   ├── test_pipes.py
│   │   ├── test_pkg.py
│   │   ├── test_pkgutil.py
│   │   ├── test_platform.py
│   │   ├── test_plistlib.py
│   │   ├── test_poll.py
│   │   ├── test_popen.py
│   │   ├── test_poplib.py
│   │   ├── test_positional_only_arg.py
│   │   ├── test_posix.py
│   │   ├── test_posixpath.py
│   │   ├── test_pow.py
│   │   ├── test_pprint.py
│   │   ├── test_print.py
│   │   ├── test_profile.py
│   │   ├── test_property.py
│   │   ├── test_pstats.py
│   │   ├── test_pty.py
│   │   ├── test_pulldom.py
│   │   ├── test_pwd.py
│   │   ├── test_py_compile.py
│   │   ├── test_pyclbr.py
│   │   ├── test_pydoc.py
│   │   ├── test_pyexpat.py
│   │   ├── test_queue.py
│   │   ├── test_quopri.py
│   │   ├── test_raise.py
│   │   ├── test_random.py
│   │   ├── test_range.py
│   │   ├── test_re.py
│   │   ├── test_readline.py
│   │   ├── test_regrtest.py
│   │   ├── test_repl.py
│   │   ├── test_reprlib.py
│   │   ├── test_resource.py
│   │   ├── test_richcmp.py
│   │   ├── test_rlcompleter.py
│   │   ├── test_robotparser.py
│   │   ├── test_runpy.py
│   │   ├── test_sax.py
│   │   ├── test_sched.py
│   │   ├── test_scope.py
│   │   ├── test_script_helper.py
│   │   ├── test_secrets.py
│   │   ├── test_select.py
│   │   ├── test_selectors.py
│   │   ├── test_set.py
│   │   ├── test_setcomps.py
│   │   ├── test_shelve.py
│   │   ├── test_shlex.py
│   │   ├── test_shutil.py
│   │   ├── test_signal.py
│   │   ├── test_site.py
│   │   ├── test_slice.py
│   │   ├── test_smtpd.py
│   │   ├── test_smtplib.py
│   │   ├── test_smtpnet.py
│   │   ├── test_sndhdr.py
│   │   ├── test_socket.py
│   │   ├── test_socketserver.py
│   │   ├── test_sort.py
│   │   ├── test_source_encoding.py
│   │   ├── test_spwd.py
│   │   ├── test_sqlite.py
│   │   ├── test_ssl.py
│   │   ├── test_startfile.py
│   │   ├── test_stat.py
│   │   ├── test_statistics.py
│   │   ├── test_strftime.py
│   │   ├── test_string.py
│   │   ├── test_string_literals.py
│   │   ├── test_stringprep.py
│   │   ├── test_strptime.py
│   │   ├── test_strtod.py
│   │   ├── test_struct.py
│   │   ├── test_structmembers.py
│   │   ├── test_structseq.py
│   │   ├── test_subclassinit.py
│   │   ├── test_subprocess.py
│   │   ├── test_sunau.py
│   │   ├── test_sundry.py
│   │   ├── test_super.py
│   │   ├── test_support.py
│   │   ├── test_symtable.py
│   │   ├── test_syntax.py
│   │   ├── test_sys.py
│   │   ├── test_sys_setprofile.py
│   │   ├── test_sys_settrace.py
│   │   ├── test_sysconfig.py
│   │   ├── test_syslog.py
│   │   ├── test_tabnanny.py
│   │   ├── test_tarfile.py
│   │   ├── test_tcl.py
│   │   ├── test_telnetlib.py
│   │   ├── test_tempfile.py
│   │   ├── test_textwrap.py
│   │   ├── test_thread.py
│   │   ├── test_threadedtempfile.py
│   │   ├── test_threading.py
│   │   ├── test_threading_local.py
│   │   ├── test_threadsignals.py
│   │   ├── test_time.py
│   │   ├── test_timeit.py
│   │   ├── test_timeout.py
│   │   ├── test_tix.py
│   │   ├── test_tk.py
│   │   ├── test_tokenize.py
│   │   ├── test_tools/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_fixcid.py
│   │   │   ├── test_gprof2html.py
│   │   │   ├── test_i18n.py
│   │   │   ├── test_lll.py
│   │   │   ├── test_md5sum.py
│   │   │   ├── test_pathfix.py
│   │   │   ├── test_pdeps.py
│   │   │   ├── test_pindent.py
│   │   │   ├── test_reindent.py
│   │   │   └── test_sundry.py
│   │   ├── test_trace.py
│   │   ├── test_traceback.py
│   │   ├── test_tracemalloc.py
│   │   ├── test_ttk_guionly.py
│   │   ├── test_ttk_textonly.py
│   │   ├── test_tuple.py
│   │   ├── test_turtle.py
│   │   ├── test_type_annotations.py
│   │   ├── test_type_comments.py
│   │   ├── test_typechecks.py
│   │   ├── test_types.py
│   │   ├── test_typing.py
│   │   ├── test_ucn.py
│   │   ├── test_unary.py
│   │   ├── test_unicode.py
│   │   ├── test_unicode_file.py
│   │   ├── test_unicode_file_functions.py
│   │   ├── test_unicode_identifiers.py
│   │   ├── test_unicodedata.py
│   │   ├── test_unittest.py
│   │   ├── test_univnewlines.py
│   │   ├── test_unpack.py
│   │   ├── test_unpack_ex.py
│   │   ├── test_unparse.py
│   │   ├── test_urllib.py
│   │   ├── test_urllib2.py
│   │   ├── test_urllib2_localnet.py
│   │   ├── test_urllib2net.py
│   │   ├── test_urllib_response.py
│   │   ├── test_urllibnet.py
│   │   ├── test_urlparse.py
│   │   ├── test_userdict.py
│   │   ├── test_userlist.py
│   │   ├── test_userstring.py
│   │   ├── test_utf8_mode.py
│   │   ├── test_utf8source.py
│   │   ├── test_uu.py
│   │   ├── test_uuid.py
│   │   ├── test_venv.py
│   │   ├── test_wait3.py
│   │   ├── test_wait4.py
│   │   ├── test_warnings/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── data/
│   │   │       ├── import_warning.py
│   │   │       └── stacklevel.py
│   │   ├── test_wave.py
│   │   ├── test_weakref.py
│   │   ├── test_weakset.py
│   │   ├── test_webbrowser.py
│   │   ├── test_winconsoleio.py
│   │   ├── test_winreg.py
│   │   ├── test_winsound.py
│   │   ├── test_with.py
│   │   ├── test_wsgiref.py
│   │   ├── test_xdrlib.py
│   │   ├── test_xml_dom_minicompat.py
│   │   ├── test_xml_etree.py
│   │   ├── test_xml_etree_c.py
│   │   ├── test_xmlrpc.py
│   │   ├── test_xmlrpc_net.py
│   │   ├── test_xxlimited.py
│   │   ├── test_xxtestfuzz.py
│   │   ├── test_yield_from.py
│   │   ├── test_zipapp.py
│   │   ├── test_zipfile.py
│   │   ├── test_zipfile64.py
│   │   ├── test_zipimport.py
│   │   ├── test_zipimport_support.py
│   │   ├── test_zlib.py
│   │   ├── test_zoneinfo/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _support.py
│   │   │   ├── data/
│   │   │   │   ├── update_test_data.py
│   │   │   │   └── zoneinfo_data.json
│   │   │   └── test_zoneinfo.py
│   │   ├── testcodec.py
│   │   ├── testtar.tar.xz
│   │   ├── tf_inherit_check.py
│   │   ├── time_hashlib.py
│   │   ├── tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
│   │   ├── tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
│   │   ├── tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
│   │   ├── tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
│   │   ├── tokenize_tests.txt
│   │   ├── tracedmodules/
│   │   │   ├── __init__.py
│   │   │   └── testmod.py
│   │   ├── win_console_handler.py
│   │   ├── xmltestdata/
│   │   │   ├── c14n-20/
│   │   │   │   ├── README
│   │   │   │   ├── c14nComment.xml
│   │   │   │   ├── c14nDefault.xml
│   │   │   │   ├── c14nPrefix.xml
│   │   │   │   ├── c14nPrefixQname.xml
│   │   │   │   ├── c14nPrefixQnameXpathElem.xml
│   │   │   │   ├── c14nQname.xml
│   │   │   │   ├── c14nQnameElem.xml
│   │   │   │   ├── c14nQnameXpathElem.xml
│   │   │   │   ├── c14nTrim.xml
│   │   │   │   ├── doc.dtd
│   │   │   │   ├── doc.xsl
│   │   │   │   ├── inC14N1.xml
│   │   │   │   ├── inC14N2.xml
│   │   │   │   ├── inC14N3.xml
│   │   │   │   ├── inC14N4.xml
│   │   │   │   ├── inC14N5.xml
│   │   │   │   ├── inC14N6.xml
│   │   │   │   ├── inNsContent.xml
│   │   │   │   ├── inNsDefault.xml
│   │   │   │   ├── inNsPushdown.xml
│   │   │   │   ├── inNsRedecl.xml
│   │   │   │   ├── inNsSort.xml
│   │   │   │   ├── inNsSuperfluous.xml
│   │   │   │   ├── inNsXml.xml
│   │   │   │   ├── out_inC14N1_c14nComment.xml
│   │   │   │   ├── out_inC14N1_c14nDefault.xml
│   │   │   │   ├── out_inC14N2_c14nDefault.xml
│   │   │   │   ├── out_inC14N2_c14nTrim.xml
│   │   │   │   ├── out_inC14N3_c14nDefault.xml
│   │   │   │   ├── out_inC14N3_c14nPrefix.xml
│   │   │   │   ├── out_inC14N3_c14nTrim.xml
│   │   │   │   ├── out_inC14N4_c14nDefault.xml
│   │   │   │   ├── out_inC14N4_c14nTrim.xml
│   │   │   │   ├── out_inC14N5_c14nDefault.xml
│   │   │   │   ├── out_inC14N5_c14nTrim.xml
│   │   │   │   ├── out_inC14N6_c14nDefault.xml
│   │   │   │   ├── out_inNsContent_c14nDefault.xml
│   │   │   │   ├── out_inNsContent_c14nPrefixQnameXpathElem.xml
│   │   │   │   ├── out_inNsContent_c14nQnameElem.xml
│   │   │   │   ├── out_inNsContent_c14nQnameXpathElem.xml
│   │   │   │   ├── out_inNsDefault_c14nDefault.xml
│   │   │   │   ├── out_inNsDefault_c14nPrefix.xml
│   │   │   │   ├── out_inNsPushdown_c14nDefault.xml
│   │   │   │   ├── out_inNsPushdown_c14nPrefix.xml
│   │   │   │   ├── out_inNsRedecl_c14nDefault.xml
│   │   │   │   ├── out_inNsRedecl_c14nPrefix.xml
│   │   │   │   ├── out_inNsSort_c14nDefault.xml
│   │   │   │   ├── out_inNsSort_c14nPrefix.xml
│   │   │   │   ├── out_inNsSuperfluous_c14nDefault.xml
│   │   │   │   ├── out_inNsSuperfluous_c14nPrefix.xml
│   │   │   │   ├── out_inNsXml_c14nDefault.xml
│   │   │   │   ├── out_inNsXml_c14nPrefix.xml
│   │   │   │   ├── out_inNsXml_c14nPrefixQname.xml
│   │   │   │   ├── out_inNsXml_c14nQname.xml
│   │   │   │   └── world.txt
│   │   │   ├── expat224_utf8_bug.xml
│   │   │   ├── simple-ns.xml
│   │   │   ├── simple.xml
│   │   │   ├── test.xml
│   │   │   └── test.xml.out
│   │   ├── xmltests.py
│   │   └── ziptestdata/
│   │       ├── README.md
│   │       ├── exe_with_z64
│   │       ├── exe_with_zip
│   │       ├── header.sh
│   │       └── testdata_module_inside_zip.py
│   ├── textwrap.py
│   ├── this.py
│   ├── threading.py
│   ├── timeit.py
│   ├── tkinter/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── colorchooser.py
│   │   ├── commondialog.py
│   │   ├── constants.py
│   │   ├── dialog.py
│   │   ├── dnd.py
│   │   ├── filedialog.py
│   │   ├── font.py
│   │   ├── messagebox.py
│   │   ├── scrolledtext.py
│   │   ├── simpledialog.py
│   │   ├── test/
│   │   │   ├── README
│   │   │   ├── __init__.py
│   │   │   ├── support.py
│   │   │   ├── test_tkinter/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_colorchooser.py
│   │   │   │   ├── test_font.py
│   │   │   │   ├── test_geometry_managers.py
│   │   │   │   ├── test_images.py
│   │   │   │   ├── test_loadtk.py
│   │   │   │   ├── test_messagebox.py
│   │   │   │   ├── test_misc.py
│   │   │   │   ├── test_simpledialog.py
│   │   │   │   ├── test_text.py
│   │   │   │   ├── test_variables.py
│   │   │   │   └── test_widgets.py
│   │   │   ├── test_ttk/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_extensions.py
│   │   │   │   ├── test_style.py
│   │   │   │   └── test_widgets.py
│   │   │   └── widget_tests.py
│   │   ├── tix.py
│   │   └── ttk.py
│   ├── token.py
│   ├── tokenize.py
│   ├── trace.py
│   ├── traceback.py
│   ├── tracemalloc.py
│   ├── tty.py
│   ├── turtle.py
│   ├── turtledemo/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── bytedesign.py
│   │   ├── chaos.py
│   │   ├── clock.py
│   │   ├── colormixer.py
│   │   ├── forest.py
│   │   ├── fractalcurves.py
│   │   ├── lindenmayer.py
│   │   ├── minimal_hanoi.py
│   │   ├── nim.py
│   │   ├── paint.py
│   │   ├── peace.py
│   │   ├── penrose.py
│   │   ├── planet_and_moon.py
│   │   ├── rosette.py
│   │   ├── round_dance.py
│   │   ├── sorting_animate.py
│   │   ├── tree.py
│   │   ├── turtle.cfg
│   │   ├── two_canvases.py
│   │   └── yinyang.py
│   ├── types.py
│   ├── typing.py
│   ├── unittest/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _log.py
│   │   ├── async_case.py
│   │   ├── case.py
│   │   ├── loader.py
│   │   ├── main.py
│   │   ├── mock.py
│   │   ├── result.py
│   │   ├── runner.py
│   │   ├── signals.py
│   │   ├── suite.py
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _test_warnings.py
│   │   │   ├── dummy.py
│   │   │   ├── support.py
│   │   │   ├── test_assertions.py
│   │   │   ├── test_async_case.py
│   │   │   ├── test_break.py
│   │   │   ├── test_case.py
│   │   │   ├── test_discovery.py
│   │   │   ├── test_functiontestcase.py
│   │   │   ├── test_loader.py
│   │   │   ├── test_program.py
│   │   │   ├── test_result.py
│   │   │   ├── test_runner.py
│   │   │   ├── test_setups.py
│   │   │   ├── test_skipping.py
│   │   │   ├── test_suite.py
│   │   │   └── testmock/
│   │   │       ├── __init__.py
│   │   │       ├── __main__.py
│   │   │       ├── support.py
│   │   │       ├── testasync.py
│   │   │       ├── testcallable.py
│   │   │       ├── testhelpers.py
│   │   │       ├── testmagicmethods.py
│   │   │       ├── testmock.py
│   │   │       ├── testpatch.py
│   │   │       ├── testsealable.py
│   │   │       ├── testsentinel.py
│   │   │       └── testwith.py
│   │   └── util.py
│   ├── urllib/
│   │   ├── __init__.py
│   │   ├── error.py
│   │   ├── parse.py
│   │   ├── request.py
│   │   ├── response.py
│   │   └── robotparser.py
│   ├── uu.py
│   ├── uuid.py
│   ├── venv/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   └── scripts/
│   │       ├── common/
│   │       │   ├── Activate.ps1
│   │       │   └── activate
│   │       ├── nt/
│   │       │   ├── activate.bat
│   │       │   └── deactivate.bat
│   │       └── posix/
│   │           ├── activate.csh
│   │           └── activate.fish
│   ├── warnings.py
│   ├── wave.py
│   ├── weakref.py
│   ├── webbrowser.py
│   ├── wsgiref/
│   │   ├── __init__.py
│   │   ├── handlers.py
│   │   ├── headers.py
│   │   ├── simple_server.py
│   │   ├── util.py
│   │   └── validate.py
│   ├── xdrlib.py
│   ├── xml/
│   │   ├── __init__.py
│   │   ├── dom/
│   │   │   ├── NodeFilter.py
│   │   │   ├── __init__.py
│   │   │   ├── domreg.py
│   │   │   ├── expatbuilder.py
│   │   │   ├── minicompat.py
│   │   │   ├── minidom.py
│   │   │   ├── pulldom.py
│   │   │   └── xmlbuilder.py
│   │   ├── etree/
│   │   │   ├── ElementInclude.py
│   │   │   ├── ElementPath.py
│   │   │   ├── ElementTree.py
│   │   │   ├── __init__.py
│   │   │   └── cElementTree.py
│   │   ├── parsers/
│   │   │   ├── __init__.py
│   │   │   └── expat.py
│   │   └── sax/
│   │       ├── __init__.py
│   │       ├── _exceptions.py
│   │       ├── expatreader.py
│   │       ├── handler.py
│   │       ├── saxutils.py
│   │       └── xmlreader.py
│   ├── xmlrpc/
│   │   ├── __init__.py
│   │   ├── client.py
│   │   └── server.py
│   ├── zipapp.py
│   ├── zipfile.py
│   ├── zipimport.py
│   └── zoneinfo/
│       ├── __init__.py
│       ├── _common.py
│       ├── _tzpath.py
│       └── _zoneinfo.py
├── Mac/
│   ├── BuildScript/
│   │   ├── 0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch
│   │   ├── README.rst
│   │   ├── build-installer.py
│   │   ├── resources/
│   │   │   ├── Conclusion.rtf
│   │   │   ├── License.rtf
│   │   │   ├── ReadMe.rtf
│   │   │   ├── Welcome.rtf
│   │   │   └── install_certificates.command
│   │   ├── scripts/
│   │   │   ├── postflight.documentation
│   │   │   ├── postflight.ensurepip
│   │   │   ├── postflight.framework
│   │   │   └── postflight.patch-profile
│   │   ├── seticon.m
│   │   └── tk868_on_10_8_10_9.patch
│   ├── Extras.install.py
│   ├── IDLE/
│   │   └── IDLE.app/
│   │       └── Contents/
│   │           ├── Info.plist
│   │           ├── MacOS/
│   │           │   └── IDLE
│   │           ├── PkgInfo
│   │           └── Resources/
│   │               ├── IDLE.icns
│   │               ├── PythonCompiled.icns
│   │               ├── PythonSource.icns
│   │               └── idlemain.py
│   ├── Icons/
│   │   ├── Disk Image.icns
│   │   ├── IDLE.icns
│   │   ├── Python Folder.icns
│   │   ├── PythonCompiled.icns
│   │   ├── PythonLauncher.icns
│   │   ├── PythonSource.icns
│   │   └── ReadMe.txt
│   ├── Makefile.in
│   ├── PythonLauncher/
│   │   ├── English.lproj/
│   │   │   ├── Credits.rtf
│   │   │   ├── MainMenu.nib/
│   │   │   │   ├── classes.nib
│   │   │   │   ├── info.nib
│   │   │   │   └── objects.nib
│   │   │   ├── MyDocument.nib/
│   │   │   │   ├── classes.nib
│   │   │   │   ├── info.nib
│   │   │   │   └── objects.nib
│   │   │   └── PreferenceWindow.nib/
│   │   │       ├── classes.nib
│   │   │       ├── info.nib
│   │   │       └── objects.nib
│   │   ├── FileSettings.h
│   │   ├── FileSettings.m
│   │   ├── Info.plist.in
│   │   ├── Makefile.in
│   │   ├── MyAppDelegate.h
│   │   ├── MyAppDelegate.m
│   │   ├── MyDocument.h
│   │   ├── MyDocument.m
│   │   ├── PreferencesWindowController.h
│   │   ├── PreferencesWindowController.m
│   │   ├── doscript.h
│   │   ├── doscript.m
│   │   ├── factorySettings.plist
│   │   └── main.m
│   ├── README.rst
│   ├── Resources/
│   │   ├── app/
│   │   │   ├── Info.plist.in
│   │   │   ├── PkgInfo
│   │   │   └── Resources/
│   │   │       ├── PythonApplet.icns
│   │   │       └── PythonInterpreter.icns
│   │   ├── framework/
│   │   │   └── Info.plist.in
│   │   └── iconsrc/
│   │       ├── IDE.psd
│   │       ├── PackageManager.psd
│   │       ├── PythonApplet.psd
│   │       ├── PythonCompiled.psd
│   │       ├── PythonIcon.psd
│   │       ├── PythonSource.psd
│   │       └── PythonWSource.psd
│   └── Tools/
│       ├── plistlib_generate_testdata.py
│       └── pythonw.c
├── Makefile.pre.in
├── Misc/
│   ├── ACKS
│   ├── HISTORY
│   ├── NEWS.d/
│   │   ├── 3.10.0.rst
│   │   ├── 3.10.0a1.rst
│   │   ├── 3.10.0a2.rst
│   │   ├── 3.10.0a3.rst
│   │   ├── 3.10.0a4.rst
│   │   ├── 3.10.0a5.rst
│   │   ├── 3.10.0a6.rst
│   │   ├── 3.10.0a7.rst
│   │   ├── 3.10.0b1.rst
│   │   ├── 3.10.0b2.rst
│   │   ├── 3.10.0b3.rst
│   │   ├── 3.10.0b4.rst
│   │   ├── 3.10.0rc1.rst
│   │   ├── 3.10.0rc2.rst
│   │   ├── 3.10.1.rst
│   │   ├── 3.5.0.rst
│   │   ├── 3.5.0a1.rst
│   │   ├── 3.5.0a2.rst
│   │   ├── 3.5.0a3.rst
│   │   ├── 3.5.0a4.rst
│   │   ├── 3.5.0b1.rst
│   │   ├── 3.5.0b2.rst
│   │   ├── 3.5.0b3.rst
│   │   ├── 3.5.0b4.rst
│   │   ├── 3.5.0rc1.rst
│   │   ├── 3.5.0rc2.rst
│   │   ├── 3.5.0rc3.rst
│   │   ├── 3.5.0rc4.rst
│   │   ├── 3.5.1.rst
│   │   ├── 3.5.1rc1.rst
│   │   ├── 3.5.2.rst
│   │   ├── 3.5.2rc1.rst
│   │   ├── 3.5.3.rst
│   │   ├── 3.5.3rc1.rst
│   │   ├── 3.5.4.rst
│   │   ├── 3.5.4rc1.rst
│   │   ├── 3.5.5.rst
│   │   ├── 3.5.5rc1.rst
│   │   ├── 3.6.0.rst
│   │   ├── 3.6.0a1.rst
│   │   ├── 3.6.0a2.rst
│   │   ├── 3.6.0a3.rst
│   │   ├── 3.6.0a4.rst
│   │   ├── 3.6.0b1.rst
│   │   ├── 3.6.0b2.rst
│   │   ├── 3.6.0b3.rst
│   │   ├── 3.6.0b4.rst
│   │   ├── 3.6.0rc1.rst
│   │   ├── 3.6.0rc2.rst
│   │   ├── 3.6.1.rst
│   │   ├── 3.6.1rc1.rst
│   │   ├── 3.6.2.rst
│   │   ├── 3.6.2rc1.rst
│   │   ├── 3.6.2rc2.rst
│   │   ├── 3.6.3.rst
│   │   ├── 3.6.3rc1.rst
│   │   ├── 3.6.4.rst
│   │   ├── 3.6.4rc1.rst
│   │   ├── 3.6.5.rst
│   │   ├── 3.6.5rc1.rst
│   │   ├── 3.6.6.rst
│   │   ├── 3.6.6rc1.rst
│   │   ├── 3.7.0.rst
│   │   ├── 3.7.0a1.rst
│   │   ├── 3.7.0a2.rst
│   │   ├── 3.7.0a3.rst
│   │   ├── 3.7.0a4.rst
│   │   ├── 3.7.0b1.rst
│   │   ├── 3.7.0b2.rst
│   │   ├── 3.7.0b3.rst
│   │   ├── 3.7.0b4.rst
│   │   ├── 3.7.0b5.rst
│   │   ├── 3.7.0rc1.rst
│   │   ├── 3.8.0a1.rst
│   │   ├── 3.8.0a2.rst
│   │   ├── 3.8.0a3.rst
│   │   ├── 3.8.0a4.rst
│   │   ├── 3.8.0b1.rst
│   │   ├── 3.9.0a1.rst
│   │   ├── 3.9.0a2.rst
│   │   ├── 3.9.0a3.rst
│   │   ├── 3.9.0a4.rst
│   │   ├── 3.9.0a5.rst
│   │   ├── 3.9.0a6.rst
│   │   ├── 3.9.0b1.rst
│   │   └── next/
│   │       ├── Build/
│   │       │   └── README.rst
│   │       ├── C API/
│   │       │   └── README.rst
│   │       ├── Core and Builtins/
│   │       │   └── README.rst
│   │       ├── Documentation/
│   │       │   └── README.rst
│   │       ├── IDLE/
│   │       │   └── README.rst
│   │       ├── Library/
│   │       │   └── README.rst
│   │       ├── Security/
│   │       │   └── README.rst
│   │       ├── Tests/
│   │       │   └── README.rst
│   │       ├── Tools-Demos/
│   │       │   └── README.rst
│   │       ├── Windows/
│   │       │   └── README.rst
│   │       └── macOS/
│   │           └── README.rst
│   ├── Porting
│   ├── README
│   ├── README.AIX
│   ├── README.coverity
│   ├── README.valgrind
│   ├── SpecialBuilds.txt
│   ├── coverity_model.c
│   ├── gdbinit
│   ├── indent.pro
│   ├── python-config.in
│   ├── python-config.sh.in
│   ├── python-embed.pc.in
│   ├── python-wing3.wpr
│   ├── python-wing4.wpr
│   ├── python-wing5.wpr
│   ├── python.man
│   ├── python.pc.in
│   ├── requirements-test.txt
│   ├── stable_abi.txt
│   ├── svnmap.txt
│   ├── valgrind-python.supp
│   └── vgrindefs
├── Modules/
│   ├── README
│   ├── Setup
│   ├── _abc.c
│   ├── _asynciomodule.c
│   ├── _bisectmodule.c
│   ├── _blake2/
│   │   ├── blake2b2s.py
│   │   ├── blake2b_impl.c
│   │   ├── blake2module.c
│   │   ├── blake2ns.h
│   │   ├── blake2s_impl.c
│   │   ├── clinic/
│   │   │   ├── blake2b_impl.c.h
│   │   │   └── blake2s_impl.c.h
│   │   └── impl/
│   │       ├── blake2-config.h
│   │       ├── blake2-dispatch.c
│   │       ├── blake2-impl.h
│   │       ├── blake2-kat.h
│   │       ├── blake2.h
│   │       ├── blake2b-load-sse2.h
│   │       ├── blake2b-load-sse41.h
│   │       ├── blake2b-ref.c
│   │       ├── blake2b-round.h
│   │       ├── blake2b-test.c
│   │       ├── blake2b.c
│   │       ├── blake2bp-test.c
│   │       ├── blake2bp.c
│   │       ├── blake2s-load-sse2.h
│   │       ├── blake2s-load-sse41.h
│   │       ├── blake2s-load-xop.h
│   │       ├── blake2s-ref.c
│   │       ├── blake2s-round.h
│   │       ├── blake2s-test.c
│   │       ├── blake2s.c
│   │       ├── blake2sp-test.c
│   │       └── blake2sp.c
│   ├── _bz2module.c
│   ├── _codecsmodule.c
│   ├── _collectionsmodule.c
│   ├── _contextvarsmodule.c
│   ├── _cryptmodule.c
│   ├── _csv.c
│   ├── _ctypes/
│   │   ├── _ctypes.c
│   │   ├── _ctypes_test.c
│   │   ├── _ctypes_test.h
│   │   ├── callbacks.c
│   │   ├── callproc.c
│   │   ├── cfield.c
│   │   ├── ctypes.h
│   │   ├── ctypes_dlfcn.h
│   │   ├── darwin/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── README.ctypes
│   │   │   ├── dlfcn.h
│   │   │   └── dlfcn_simple.c
│   │   ├── libffi_osx/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── README.pyobjc
│   │   │   ├── ffi.c
│   │   │   ├── include/
│   │   │   │   ├── ffi.h
│   │   │   │   ├── ffi_common.h
│   │   │   │   ├── fficonfig.h
│   │   │   │   ├── ffitarget.h
│   │   │   │   ├── ppc-ffitarget.h
│   │   │   │   └── x86-ffitarget.h
│   │   │   ├── powerpc/
│   │   │   │   ├── ppc-darwin.S
│   │   │   │   ├── ppc-darwin.h
│   │   │   │   ├── ppc-darwin_closure.S
│   │   │   │   ├── ppc-ffi_darwin.c
│   │   │   │   └── ppc64-darwin_closure.S
│   │   │   ├── types.c
│   │   │   └── x86/
│   │   │       ├── darwin64.S
│   │   │       ├── x86-darwin.S
│   │   │       ├── x86-ffi64.c
│   │   │       └── x86-ffi_darwin.c
│   │   ├── malloc_closure.c
│   │   └── stgdict.c
│   ├── _curses_panel.c
│   ├── _cursesmodule.c
│   ├── _datetimemodule.c
│   ├── _dbmmodule.c
│   ├── _decimal/
│   │   ├── README.txt
│   │   ├── _decimal.c
│   │   ├── docstrings.h
│   │   ├── libmpdec/
│   │   │   ├── README.txt
│   │   │   ├── basearith.c
│   │   │   ├── basearith.h
│   │   │   ├── bench.c
│   │   │   ├── bench_full.c
│   │   │   ├── bits.h
│   │   │   ├── constants.c
│   │   │   ├── constants.h
│   │   │   ├── context.c
│   │   │   ├── convolute.c
│   │   │   ├── convolute.h
│   │   │   ├── crt.c
│   │   │   ├── crt.h
│   │   │   ├── difradix2.c
│   │   │   ├── difradix2.h
│   │   │   ├── examples/
│   │   │   │   ├── README.txt
│   │   │   │   ├── compare.c
│   │   │   │   ├── div.c
│   │   │   │   ├── divmod.c
│   │   │   │   ├── multiply.c
│   │   │   │   ├── pow.c
│   │   │   │   ├── powmod.c
│   │   │   │   ├── shift.c
│   │   │   │   └── sqrt.c
│   │   │   ├── fnt.c
│   │   │   ├── fnt.h
│   │   │   ├── fourstep.c
│   │   │   ├── fourstep.h
│   │   │   ├── io.c
│   │   │   ├── io.h
│   │   │   ├── literature/
│   │   │   │   ├── REFERENCES.txt
│   │   │   │   ├── bignum.txt
│   │   │   │   ├── fnt.py
│   │   │   │   ├── matrix-transform.txt
│   │   │   │   ├── mulmod-64.txt
│   │   │   │   ├── mulmod-ppro.txt
│   │   │   │   ├── six-step.txt
│   │   │   │   └── umodarith.lisp
│   │   │   ├── mpalloc.c
│   │   │   ├── mpalloc.h
│   │   │   ├── mpdecimal.c
│   │   │   ├── mpdecimal.h
│   │   │   ├── mpsignal.c
│   │   │   ├── numbertheory.c
│   │   │   ├── numbertheory.h
│   │   │   ├── sixstep.c
│   │   │   ├── sixstep.h
│   │   │   ├── transpose.c
│   │   │   ├── transpose.h
│   │   │   ├── typearith.h
│   │   │   ├── umodarith.h
│   │   │   └── vcdiv64.asm
│   │   └── tests/
│   │       ├── README.txt
│   │       ├── bench.py
│   │       ├── bignum.py
│   │       ├── deccheck.py
│   │       ├── formathelper.py
│   │       ├── randdec.py
│   │       ├── randfloat.py
│   │       ├── runall-memorydebugger.sh
│   │       └── runall.bat
│   ├── _elementtree.c
│   ├── _functoolsmodule.c
│   ├── _gdbmmodule.c
│   ├── _hashopenssl.c
│   ├── _heapqmodule.c
│   ├── _io/
│   │   ├── _iomodule.c
│   │   ├── _iomodule.h
│   │   ├── bufferedio.c
│   │   ├── bytesio.c
│   │   ├── clinic/
│   │   │   ├── _iomodule.c.h
│   │   │   ├── bufferedio.c.h
│   │   │   ├── bytesio.c.h
│   │   │   ├── fileio.c.h
│   │   │   ├── iobase.c.h
│   │   │   ├── stringio.c.h
│   │   │   ├── textio.c.h
│   │   │   └── winconsoleio.c.h
│   │   ├── fileio.c
│   │   ├── iobase.c
│   │   ├── stringio.c
│   │   ├── textio.c
│   │   └── winconsoleio.c
│   ├── _json.c
│   ├── _localemodule.c
│   ├── _lsprof.c
│   ├── _lzmamodule.c
│   ├── _math.c
│   ├── _math.h
│   ├── _multiprocessing/
│   │   ├── clinic/
│   │   │   ├── multiprocessing.c.h
│   │   │   ├── posixshmem.c.h
│   │   │   └── semaphore.c.h
│   │   ├── multiprocessing.c
│   │   ├── multiprocessing.h
│   │   ├── posixshmem.c
│   │   └── semaphore.c
│   ├── _opcode.c
│   ├── _operator.c
│   ├── _pickle.c
│   ├── _posixsubprocess.c
│   ├── _queuemodule.c
│   ├── _randommodule.c
│   ├── _scproxy.c
│   ├── _sha3/
│   │   ├── README.txt
│   │   ├── cleanup.py
│   │   ├── clinic/
│   │   │   └── sha3module.c.h
│   │   ├── kcp/
│   │   │   ├── KeccakHash.c
│   │   │   ├── KeccakHash.h
│   │   │   ├── KeccakP-1600-64.macros
│   │   │   ├── KeccakP-1600-SnP-opt32.h
│   │   │   ├── KeccakP-1600-SnP-opt64.h
│   │   │   ├── KeccakP-1600-SnP.h
│   │   │   ├── KeccakP-1600-inplace32BI.c
│   │   │   ├── KeccakP-1600-opt64-config.h
│   │   │   ├── KeccakP-1600-opt64.c
│   │   │   ├── KeccakP-1600-unrolling.macros
│   │   │   ├── KeccakSponge.c
│   │   │   ├── KeccakSponge.h
│   │   │   ├── KeccakSponge.inc
│   │   │   ├── PlSnP-Fallback.inc
│   │   │   ├── SnP-Relaned.h
│   │   │   └── align.h
│   │   └── sha3module.c
│   ├── _sqlite/
│   │   ├── cache.c
│   │   ├── cache.h
│   │   ├── clinic/
│   │   │   ├── connection.c.h
│   │   │   ├── cursor.c.h
│   │   │   ├── module.c.h
│   │   │   └── row.c.h
│   │   ├── connection.c
│   │   ├── connection.h
│   │   ├── cursor.c
│   │   ├── cursor.h
│   │   ├── microprotocols.c
│   │   ├── microprotocols.h
│   │   ├── module.c
│   │   ├── module.h
│   │   ├── prepare_protocol.c
│   │   ├── prepare_protocol.h
│   │   ├── row.c
│   │   ├── row.h
│   │   ├── statement.c
│   │   ├── statement.h
│   │   ├── util.c
│   │   └── util.h
│   ├── _sre.c
│   ├── _ssl/
│   │   ├── cert.c
│   │   ├── clinic/
│   │   │   └── cert.c.h
│   │   ├── debughelpers.c
│   │   └── misc.c
│   ├── _ssl.c
│   ├── _ssl.h
│   ├── _ssl_data.h
│   ├── _ssl_data_111.h
│   ├── _ssl_data_300.h
│   ├── _stat.c
│   ├── _statisticsmodule.c
│   ├── _struct.c
│   ├── _testbuffer.c
│   ├── _testcapimodule.c
│   ├── _testimportmultiple.c
│   ├── _testinternalcapi.c
│   ├── _testmultiphase.c
│   ├── _threadmodule.c
│   ├── _tkinter.c
│   ├── _tracemalloc.c
│   ├── _uuidmodule.c
│   ├── _weakref.c
│   ├── _winapi.c
│   ├── _xxsubinterpretersmodule.c
│   ├── _xxtestfuzz/
│   │   ├── README.rst
│   │   ├── _xxtestfuzz.c
│   │   ├── dictionaries/
│   │   │   ├── fuzz_json_loads.dict
│   │   │   └── fuzz_sre_compile.dict
│   │   ├── fuzz_csv_reader_corpus/
│   │   │   └── test.csv
│   │   ├── fuzz_json_loads_corpus/
│   │   │   ├── empty_array.json
│   │   │   ├── empty_object.json
│   │   │   ├── pass1.json
│   │   │   ├── pass2.json
│   │   │   ├── pass3.json
│   │   │   └── simple_array.json
│   │   ├── fuzz_sre_compile_corpus/
│   │   │   ├── anchor_links
│   │   │   ├── characters
│   │   │   ├── isbn
│   │   │   └── phone_number
│   │   ├── fuzz_struct_unpack_corpus/
│   │   │   ├── hello_string
│   │   │   ├── long_zero
│   │   │   └── varied_format_string
│   │   ├── fuzz_tests.txt
│   │   └── fuzzer.c
│   ├── _zoneinfo.c
│   ├── addrinfo.h
│   ├── arraymodule.c
│   ├── atexitmodule.c
│   ├── audioop.c
│   ├── binascii.c
│   ├── cjkcodecs/
│   │   ├── README
│   │   ├── _codecs_cn.c
│   │   ├── _codecs_hk.c
│   │   ├── _codecs_iso2022.c
│   │   ├── _codecs_jp.c
│   │   ├── _codecs_kr.c
│   │   ├── _codecs_tw.c
│   │   ├── alg_jisx0201.h
│   │   ├── cjkcodecs.h
│   │   ├── clinic/
│   │   │   └── multibytecodec.c.h
│   │   ├── emu_jisx0213_2000.h
│   │   ├── mappings_cn.h
│   │   ├── mappings_hk.h
│   │   ├── mappings_jisx0213_pair.h
│   │   ├── mappings_jp.h
│   │   ├── mappings_kr.h
│   │   ├── mappings_tw.h
│   │   ├── multibytecodec.c
│   │   └── multibytecodec.h
│   ├── clinic/
│   │   ├── _abc.c.h
│   │   ├── _asynciomodule.c.h
│   │   ├── _bisectmodule.c.h
│   │   ├── _bz2module.c.h
│   │   ├── _codecsmodule.c.h
│   │   ├── _collectionsmodule.c.h
│   │   ├── _contextvarsmodule.c.h
│   │   ├── _cryptmodule.c.h
│   │   ├── _curses_panel.c.h
│   │   ├── _cursesmodule.c.h
│   │   ├── _datetimemodule.c.h
│   │   ├── _dbmmodule.c.h
│   │   ├── _elementtree.c.h
│   │   ├── _gdbmmodule.c.h
│   │   ├── _hashopenssl.c.h
│   │   ├── _heapqmodule.c.h
│   │   ├── _localemodule.c.h
│   │   ├── _lsprof.c.h
│   │   ├── _lzmamodule.c.h
│   │   ├── _opcode.c.h
│   │   ├── _operator.c.h
│   │   ├── _pickle.c.h
│   │   ├── _queuemodule.c.h
│   │   ├── _randommodule.c.h
│   │   ├── _sre.c.h
│   │   ├── _ssl.c.h
│   │   ├── _statisticsmodule.c.h
│   │   ├── _struct.c.h
│   │   ├── _testmultiphase.c.h
│   │   ├── _tkinter.c.h
│   │   ├── _tracemalloc.c.h
│   │   ├── _weakref.c.h
│   │   ├── _winapi.c.h
│   │   ├── arraymodule.c.h
│   │   ├── audioop.c.h
│   │   ├── binascii.c.h
│   │   ├── cmathmodule.c.h
│   │   ├── fcntlmodule.c.h
│   │   ├── gcmodule.c.h
│   │   ├── grpmodule.c.h
│   │   ├── itertoolsmodule.c.h
│   │   ├── mathmodule.c.h
│   │   ├── md5module.c.h
│   │   ├── overlapped.c.h
│   │   ├── posixmodule.c.h
│   │   ├── pwdmodule.c.h
│   │   ├── pyexpat.c.h
│   │   ├── readline.c.h
│   │   ├── resource.c.h
│   │   ├── selectmodule.c.h
│   │   ├── sha1module.c.h
│   │   ├── sha256module.c.h
│   │   ├── sha512module.c.h
│   │   ├── signalmodule.c.h
│   │   ├── spwdmodule.c.h
│   │   ├── symtablemodule.c.h
│   │   ├── termios.c.h
│   │   ├── unicodedata.c.h
│   │   └── zlibmodule.c.h
│   ├── cmathmodule.c
│   ├── config.c.in
│   ├── errnomodule.c
│   ├── expat/
│   │   ├── COPYING
│   │   ├── ascii.h
│   │   ├── asciitab.h
│   │   ├── expat.h
│   │   ├── expat_config.h
│   │   ├── expat_external.h
│   │   ├── iasciitab.h
│   │   ├── internal.h
│   │   ├── latin1tab.h
│   │   ├── nametab.h
│   │   ├── pyexpatns.h
│   │   ├── siphash.h
│   │   ├── utf8tab.h
│   │   ├── winconfig.h
│   │   ├── xmlparse.c
│   │   ├── xmlrole.c
│   │   ├── xmlrole.h
│   │   ├── xmltok.c
│   │   ├── xmltok.h
│   │   ├── xmltok_impl.c
│   │   ├── xmltok_impl.h
│   │   └── xmltok_ns.c
│   ├── faulthandler.c
│   ├── fcntlmodule.c
│   ├── gc_weakref.txt
│   ├── gcmodule.c
│   ├── getaddrinfo.c
│   ├── getbuildinfo.c
│   ├── getnameinfo.c
│   ├── getpath.c
│   ├── grpmodule.c
│   ├── hashlib.h
│   ├── itertoolsmodule.c
│   ├── ld_so_aix.in
│   ├── main.c
│   ├── makesetup
│   ├── makexp_aix
│   ├── mathmodule.c
│   ├── md5module.c
│   ├── mmapmodule.c
│   ├── nismodule.c
│   ├── ossaudiodev.c
│   ├── overlapped.c
│   ├── posixmodule.c
│   ├── posixmodule.h
│   ├── pwdmodule.c
│   ├── pyexpat.c
│   ├── readline.c
│   ├── resource.c
│   ├── rotatingtree.c
│   ├── rotatingtree.h
│   ├── selectmodule.c
│   ├── sha1module.c
│   ├── sha256module.c
│   ├── sha512module.c
│   ├── signalmodule.c
│   ├── socketmodule.c
│   ├── socketmodule.h
│   ├── spwdmodule.c
│   ├── sre.h
│   ├── sre_constants.h
│   ├── sre_lib.h
│   ├── symtablemodule.c
│   ├── syslogmodule.c
│   ├── termios.c
│   ├── testcapi_long.h
│   ├── timemodule.c
│   ├── tkappinit.c
│   ├── tkinter.h
│   ├── unicodedata.c
│   ├── unicodedata_db.h
│   ├── unicodename_db.h
│   ├── winreparse.h
│   ├── xxlimited.c
│   ├── xxlimited_35.c
│   ├── xxmodule.c
│   ├── xxsubtype.c
│   └── zlibmodule.c
├── Objects/
│   ├── README
│   ├── abstract.c
│   ├── accu.c
│   ├── boolobject.c
│   ├── bytearrayobject.c
│   ├── bytes_methods.c
│   ├── bytesobject.c
│   ├── call.c
│   ├── capsule.c
│   ├── cellobject.c
│   ├── classobject.c
│   ├── clinic/
│   │   ├── bytearrayobject.c.h
│   │   ├── bytesobject.c.h
│   │   ├── codeobject.c.h
│   │   ├── complexobject.c.h
│   │   ├── descrobject.c.h
│   │   ├── dictobject.c.h
│   │   ├── enumobject.c.h
│   │   ├── floatobject.c.h
│   │   ├── funcobject.c.h
│   │   ├── listobject.c.h
│   │   ├── longobject.c.h
│   │   ├── memoryobject.c.h
│   │   ├── moduleobject.c.h
│   │   ├── odictobject.c.h
│   │   ├── structseq.c.h
│   │   ├── tupleobject.c.h
│   │   ├── typeobject.c.h
│   │   └── unicodeobject.c.h
│   ├── codeobject.c
│   ├── complexobject.c
│   ├── descrobject.c
│   ├── dict-common.h
│   ├── dictnotes.txt
│   ├── dictobject.c
│   ├── enumobject.c
│   ├── exceptions.c
│   ├── fileobject.c
│   ├── floatobject.c
│   ├── frameobject.c
│   ├── funcobject.c
│   ├── genericaliasobject.c
│   ├── genobject.c
│   ├── interpreteridobject.c
│   ├── iterobject.c
│   ├── listobject.c
│   ├── listsort.txt
│   ├── lnotab_notes.txt
│   ├── longobject.c
│   ├── memoryobject.c
│   ├── methodobject.c
│   ├── moduleobject.c
│   ├── namespaceobject.c
│   ├── object.c
│   ├── obmalloc.c
│   ├── odictobject.c
│   ├── picklebufobject.c
│   ├── rangeobject.c
│   ├── setobject.c
│   ├── sliceobject.c
│   ├── stringlib/
│   │   ├── README.txt
│   │   ├── asciilib.h
│   │   ├── clinic/
│   │   │   └── transmogrify.h.h
│   │   ├── codecs.h
│   │   ├── count.h
│   │   ├── ctype.h
│   │   ├── eq.h
│   │   ├── fastsearch.h
│   │   ├── find.h
│   │   ├── find_max_char.h
│   │   ├── join.h
│   │   ├── localeutil.h
│   │   ├── partition.h
│   │   ├── replace.h
│   │   ├── split.h
│   │   ├── stringdefs.h
│   │   ├── stringlib_find_two_way_notes.txt
│   │   ├── transmogrify.h
│   │   ├── ucs1lib.h
│   │   ├── ucs2lib.h
│   │   ├── ucs4lib.h
│   │   ├── undef.h
│   │   ├── unicode_format.h
│   │   └── unicodedefs.h
│   ├── structseq.c
│   ├── tupleobject.c
│   ├── typeobject.c
│   ├── typeslots.inc
│   ├── typeslots.py
│   ├── unicodectype.c
│   ├── unicodeobject.c
│   ├── unicodetype_db.h
│   ├── unionobject.c
│   └── weakrefobject.c
├── PC/
│   ├── WinMain.c
│   ├── _msi.c
│   ├── _testconsole.c
│   ├── classicAppCompat.can.xml
│   ├── classicAppCompat.cat
│   ├── classicAppCompat.sccd
│   ├── clinic/
│   │   ├── _msi.c.h
│   │   ├── _testconsole.c.h
│   │   ├── msvcrtmodule.c.h
│   │   ├── winreg.c.h
│   │   └── winsound.c.h
│   ├── config.c
│   ├── crtlicense.txt
│   ├── dl_nt.c
│   ├── empty.c
│   ├── errmap.h
│   ├── errmap.mak
│   ├── frozen_dllmain.c
│   ├── getpathp.c
│   ├── icons/
│   │   ├── launcher.icns
│   │   ├── py.icns
│   │   ├── pyc.icns
│   │   ├── pyd.icns
│   │   ├── python.icns
│   │   ├── pythonw.icns
│   │   └── setup.icns
│   ├── invalid_parameter_handler.c
│   ├── launcher.c
│   ├── layout/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── main.py
│   │   └── support/
│   │       ├── __init__.py
│   │       ├── appxmanifest.py
│   │       ├── catalog.py
│   │       ├── constants.py
│   │       ├── filesets.py
│   │       ├── logging.py
│   │       ├── nuspec.py
│   │       ├── options.py
│   │       ├── pip.py
│   │       ├── props.py
│   │       └── python.props
│   ├── msvcrtmodule.c
│   ├── pyconfig.h
│   ├── pylauncher.rc
│   ├── pyshellext.cpp
│   ├── pyshellext.def
│   ├── pyshellext.rc
│   ├── python.manifest
│   ├── python3dll.c
│   ├── python_exe.rc
│   ├── python_nt.rc
│   ├── python_uwp.cpp
│   ├── python_ver_rc.h
│   ├── pythonw_exe.rc
│   ├── readme.txt
│   ├── sqlite3.rc
│   ├── store_info.txt
│   ├── testpy.py
│   ├── validate_ucrtbase.py
│   ├── win7compat.c
│   ├── winreg.c
│   └── winsound.c
├── PCbuild/
│   ├── Directory.Build.props
│   ├── Directory.Build.targets
│   ├── _asyncio.vcxproj
│   ├── _asyncio.vcxproj.filters
│   ├── _bz2.vcxproj
│   ├── _bz2.vcxproj.filters
│   ├── _ctypes.vcxproj
│   ├── _ctypes.vcxproj.filters
│   ├── _ctypes_test.vcxproj
│   ├── _ctypes_test.vcxproj.filters
│   ├── _decimal.vcxproj
│   ├── _decimal.vcxproj.filters
│   ├── _elementtree.vcxproj
│   ├── _elementtree.vcxproj.filters
│   ├── _freeze_importlib.vcxproj
│   ├── _freeze_importlib.vcxproj.filters
│   ├── _hashlib.vcxproj
│   ├── _hashlib.vcxproj.filters
│   ├── _lzma.vcxproj
│   ├── _lzma.vcxproj.filters
│   ├── _msi.vcxproj
│   ├── _msi.vcxproj.filters
│   ├── _multiprocessing.vcxproj
│   ├── _multiprocessing.vcxproj.filters
│   ├── _overlapped.vcxproj
│   ├── _overlapped.vcxproj.filters
│   ├── _queue.vcxproj
│   ├── _queue.vcxproj.filters
│   ├── _socket.vcxproj
│   ├── _socket.vcxproj.filters
│   ├── _sqlite3.vcxproj
│   ├── _sqlite3.vcxproj.filters
│   ├── _ssl.vcxproj
│   ├── _ssl.vcxproj.filters
│   ├── _testbuffer.vcxproj
│   ├── _testbuffer.vcxproj.filters
│   ├── _testcapi.vcxproj
│   ├── _testcapi.vcxproj.filters
│   ├── _testconsole.vcxproj
│   ├── _testconsole.vcxproj.filters
│   ├── _testembed.vcxproj
│   ├── _testembed.vcxproj.filters
│   ├── _testimportmultiple.vcxproj
│   ├── _testimportmultiple.vcxproj.filters
│   ├── _testinternalcapi.vcxproj
│   ├── _testinternalcapi.vcxproj.filters
│   ├── _testmultiphase.vcxproj
│   ├── _testmultiphase.vcxproj.filters
│   ├── _tkinter.vcxproj
│   ├── _tkinter.vcxproj.filters
│   ├── _uuid.vcxproj
│   ├── _uuid.vcxproj.filters
│   ├── _zoneinfo.vcxproj
│   ├── _zoneinfo.vcxproj.filters
│   ├── blurb.bat
│   ├── build.bat
│   ├── build_env.bat
│   ├── clean.bat
│   ├── env.bat
│   ├── env.ps1
│   ├── field3.py
│   ├── find_msbuild.bat
│   ├── find_python.bat
│   ├── fix_encoding.py
│   ├── get_external.py
│   ├── get_externals.bat
│   ├── idle.bat
│   ├── lib.pyproj
│   ├── libffi.props
│   ├── liblzma.vcxproj
│   ├── liblzma.vcxproj.filters
│   ├── openssl.props
│   ├── openssl.vcxproj
│   ├── pcbuild.proj
│   ├── pcbuild.sln
│   ├── prepare_libffi.bat
│   ├── prepare_ssl.bat
│   ├── prepare_ssl.py
│   ├── prepare_tcltk.bat
│   ├── pyexpat.vcxproj
│   ├── pyexpat.vcxproj.filters
│   ├── pylauncher.vcxproj
│   ├── pylauncher.vcxproj.filters
│   ├── pyproject.props
│   ├── pyshellext.vcxproj
│   ├── pyshellext.vcxproj.filters
│   ├── python.props
│   ├── python.vcxproj
│   ├── python.vcxproj.filters
│   ├── python3dll.vcxproj
│   ├── python3dll.vcxproj.filters
│   ├── python_uwp.vcxproj
│   ├── python_uwp.vcxproj.filters
│   ├── pythoncore.vcxproj
│   ├── pythoncore.vcxproj.filters
│   ├── pythonw.vcxproj
│   ├── pythonw.vcxproj.filters
│   ├── pythonw_uwp.vcxproj
│   ├── pythonw_uwp.vcxproj.filters
│   ├── pywlauncher.vcxproj
│   ├── pywlauncher.vcxproj.filters
│   ├── readme.txt
│   ├── regen.targets
│   ├── rmpyc.py
│   ├── rt.bat
│   ├── select.vcxproj
│   ├── select.vcxproj.filters
│   ├── sqlite3.vcxproj
│   ├── sqlite3.vcxproj.filters
│   ├── tcl.vcxproj
│   ├── tcltk.props
│   ├── tix.vcxproj
│   ├── tk.vcxproj
│   ├── unicodedata.vcxproj
│   ├── unicodedata.vcxproj.filters
│   ├── urlretrieve.py
│   ├── venvlauncher.vcxproj
│   ├── venvlauncher.vcxproj.filters
│   ├── venvwlauncher.vcxproj
│   ├── venvwlauncher.vcxproj.filters
│   ├── winsound.vcxproj
│   ├── winsound.vcxproj.filters
│   ├── xxlimited.vcxproj
│   ├── xxlimited.vcxproj.filters
│   ├── xxlimited_35.vcxproj
│   └── xxlimited_35.vcxproj.filters
├── Parser/
│   ├── Python.asdl
│   ├── asdl.py
│   ├── asdl_c.py
│   ├── myreadline.c
│   ├── parser.c
│   ├── peg_api.c
│   ├── pegen.c
│   ├── pegen.h
│   ├── pegen_errors.c
│   ├── string_parser.c
│   ├── string_parser.h
│   ├── token.c
│   ├── tokenizer.c
│   └── tokenizer.h
├── Programs/
│   ├── README
│   ├── _freeze_importlib.c
│   ├── _testembed.c
│   └── python.c
├── Python/
│   ├── Python-ast.c
│   ├── README
│   ├── _warnings.c
│   ├── asdl.c
│   ├── ast.c
│   ├── ast_opt.c
│   ├── ast_unparse.c
│   ├── bltinmodule.c
│   ├── bootstrap_hash.c
│   ├── ceval.c
│   ├── ceval_gil.h
│   ├── clinic/
│   │   ├── _warnings.c.h
│   │   ├── bltinmodule.c.h
│   │   ├── context.c.h
│   │   ├── import.c.h
│   │   ├── marshal.c.h
│   │   ├── sysmodule.c.h
│   │   └── traceback.c.h
│   ├── codecs.c
│   ├── compile.c
│   ├── condvar.h
│   ├── context.c
│   ├── dtoa.c
│   ├── dup2.c
│   ├── dynamic_annotations.c
│   ├── dynload_hpux.c
│   ├── dynload_shlib.c
│   ├── dynload_stub.c
│   ├── dynload_win.c
│   ├── errors.c
│   ├── fileutils.c
│   ├── formatter_unicode.c
│   ├── frozen.c
│   ├── frozen_hello.h
│   ├── frozenmain.c
│   ├── future.c
│   ├── getargs.c
│   ├── getcompiler.c
│   ├── getcopyright.c
│   ├── getopt.c
│   ├── getplatform.c
│   ├── getversion.c
│   ├── hamt.c
│   ├── hashtable.c
│   ├── import.c
│   ├── importdl.c
│   ├── importdl.h
│   ├── importlib.h
│   ├── importlib_external.h
│   ├── importlib_zipimport.h
│   ├── initconfig.c
│   ├── makeopcodetargets.py
│   ├── marshal.c
│   ├── modsupport.c
│   ├── mysnprintf.c
│   ├── mystrtoul.c
│   ├── opcode_targets.h
│   ├── pathconfig.c
│   ├── preconfig.c
│   ├── pyarena.c
│   ├── pyctype.c
│   ├── pyfpe.c
│   ├── pyhash.c
│   ├── pylifecycle.c
│   ├── pymath.c
│   ├── pystate.c
│   ├── pystrcmp.c
│   ├── pystrhex.c
│   ├── pystrtod.c
│   ├── pythonrun.c
│   ├── pytime.c
│   ├── stdlib_module_names.h
│   ├── structmember.c
│   ├── suggestions.c
│   ├── symtable.c
│   ├── sysmodule.c
│   ├── thread.c
│   ├── thread_nt.h
│   ├── thread_pthread.h
│   ├── traceback.c
│   └── wordcode_helpers.h
├── README.rst
├── Tools/
│   ├── README
│   ├── buildbot/
│   │   ├── build.bat
│   │   ├── buildmsi.bat
│   │   ├── clean.bat
│   │   ├── remoteDeploy.bat
│   │   ├── remotePythonInfo.bat
│   │   └── test.bat
│   ├── c-analyzer/
│   │   ├── README
│   │   ├── TODO
│   │   ├── c-analyzer.py
│   │   ├── c_analyzer/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── analyze.py
│   │   │   ├── datafiles.py
│   │   │   ├── info.py
│   │   │   └── match.py
│   │   ├── c_common/
│   │   │   ├── __init__.py
│   │   │   ├── clsutil.py
│   │   │   ├── fsutil.py
│   │   │   ├── info.py
│   │   │   ├── iterutil.py
│   │   │   ├── logging.py
│   │   │   ├── misc.py
│   │   │   ├── scriptutil.py
│   │   │   ├── show.py
│   │   │   ├── strutil.py
│   │   │   └── tables.py
│   │   ├── c_parser/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _state_machine.py
│   │   │   ├── datafiles.py
│   │   │   ├── info.py
│   │   │   ├── match.py
│   │   │   ├── parser/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _alt.py
│   │   │   │   ├── _common.py
│   │   │   │   ├── _compound_decl_body.py
│   │   │   │   ├── _delim.py
│   │   │   │   ├── _func_body.py
│   │   │   │   ├── _global.py
│   │   │   │   ├── _info.py
│   │   │   │   └── _regexes.py
│   │   │   ├── preprocessor/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── common.py
│   │   │   │   ├── errors.py
│   │   │   │   ├── gcc.py
│   │   │   │   └── pure.py
│   │   │   └── source.py
│   │   ├── check-c-globals.py
│   │   ├── cpython/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _analyzer.py
│   │   │   ├── _capi.py
│   │   │   ├── _files.py
│   │   │   ├── _parser.py
│   │   │   ├── ignored.tsv
│   │   │   └── known.tsv
│   │   └── must-resolve.sh
│   ├── ccbench/
│   │   └── ccbench.py
│   ├── clinic/
│   │   ├── clinic.py
│   │   └── cpp.py
│   ├── demo/
│   │   ├── README
│   │   ├── beer.py
│   │   ├── eiffel.py
│   │   ├── hanoi.py
│   │   ├── life.py
│   │   ├── markov.py
│   │   ├── mcast.py
│   │   ├── queens.py
│   │   ├── redemo.py
│   │   ├── rpython.py
│   │   ├── rpythond.py
│   │   ├── sortvisu.py
│   │   ├── spreadsheet.py
│   │   └── vector.py
│   ├── freeze/
│   │   ├── README
│   │   ├── bkfile.py
│   │   ├── checkextensions.py
│   │   ├── checkextensions_win32.py
│   │   ├── extensions_win32.ini
│   │   ├── flag.py
│   │   ├── freeze.py
│   │   ├── hello.py
│   │   ├── makeconfig.py
│   │   ├── makefreeze.py
│   │   ├── makemakefile.py
│   │   ├── parsesetup.py
│   │   ├── regen_frozen.py
│   │   ├── test/
│   │   │   ├── Makefile
│   │   │   └── ok.py
│   │   ├── win32.html
│   │   └── winmakemakefile.py
│   ├── gdb/
│   │   └── libpython.py
│   ├── i18n/
│   │   ├── makelocalealias.py
│   │   ├── msgfmt.py
│   │   └── pygettext.py
│   ├── importbench/
│   │   ├── README
│   │   └── importbench.py
│   ├── iobench/
│   │   └── iobench.py
│   ├── msi/
│   │   ├── README.txt
│   │   ├── build.bat
│   │   ├── buildrelease.bat
│   │   ├── bundle/
│   │   │   ├── Default.thm
│   │   │   ├── Default.wxl
│   │   │   ├── bootstrap/
│   │   │   │   ├── LICENSE.txt
│   │   │   │   ├── PythonBootstrapperApplication.cpp
│   │   │   │   ├── pch.cpp
│   │   │   │   ├── pch.h
│   │   │   │   ├── pythonba.cpp
│   │   │   │   ├── pythonba.def
│   │   │   │   ├── pythonba.sln
│   │   │   │   ├── pythonba.vcxproj
│   │   │   │   └── resource.h
│   │   │   ├── bundle.targets
│   │   │   ├── bundle.wxl
│   │   │   ├── bundle.wxs
│   │   │   ├── full.wixproj
│   │   │   ├── packagegroups/
│   │   │   │   ├── core.wxs
│   │   │   │   ├── crt.wxs
│   │   │   │   ├── dev.wxs
│   │   │   │   ├── doc.wxs
│   │   │   │   ├── exe.wxs
│   │   │   │   ├── launcher.wxs
│   │   │   │   ├── lib.wxs
│   │   │   │   ├── packageinstall.wxs
│   │   │   │   ├── pip.wxs
│   │   │   │   ├── postinstall.wxs
│   │   │   │   ├── tcltk.wxs
│   │   │   │   ├── test.wxs
│   │   │   │   └── tools.wxs
│   │   │   ├── releaselocal.wixproj
│   │   │   ├── releaseweb.wixproj
│   │   │   └── snapshot.wixproj
│   │   ├── common.wxs
│   │   ├── common_en-US.wxl_template
│   │   ├── csv_to_wxs.py
│   │   ├── dev/
│   │   │   ├── dev.wixproj
│   │   │   ├── dev.wxs
│   │   │   ├── dev_d.wixproj
│   │   │   ├── dev_d.wxs
│   │   │   ├── dev_en-US.wxl
│   │   │   └── dev_files.wxs
│   │   ├── doc/
│   │   │   ├── doc.wixproj
│   │   │   ├── doc.wxs
│   │   │   ├── doc_en-US.wxl_template
│   │   │   ├── doc_files.wxs
│   │   │   └── doc_no_files.wxs
│   │   ├── exe/
│   │   │   ├── exe.wixproj
│   │   │   ├── exe.wxs
│   │   │   ├── exe_d.wixproj
│   │   │   ├── exe_d.wxs
│   │   │   ├── exe_en-US.wxl_template
│   │   │   ├── exe_files.wxs
│   │   │   ├── exe_pdb.wixproj
│   │   │   ├── exe_pdb.wxs
│   │   │   └── exe_reg.wxs
│   │   ├── generate_md5.py
│   │   ├── get_externals.bat
│   │   ├── launcher/
│   │   │   ├── launcher.wixproj
│   │   │   ├── launcher.wxs
│   │   │   ├── launcher_en-US.wxl
│   │   │   ├── launcher_files.wxs
│   │   │   └── launcher_reg.wxs
│   │   ├── lib/
│   │   │   ├── lib.wixproj
│   │   │   ├── lib.wxs
│   │   │   ├── lib_d.wixproj
│   │   │   ├── lib_d.wxs
│   │   │   ├── lib_en-US.wxl
│   │   │   ├── lib_files.wxs
│   │   │   ├── lib_pdb.wixproj
│   │   │   └── lib_pdb.wxs
│   │   ├── make_appx.ps1
│   │   ├── make_cat.ps1
│   │   ├── make_zip.proj
│   │   ├── msi.props
│   │   ├── msi.targets
│   │   ├── path/
│   │   │   ├── path.wixproj
│   │   │   ├── path.wxs
│   │   │   └── path_en-US.wxl
│   │   ├── pip/
│   │   │   ├── pip.wixproj
│   │   │   ├── pip.wxs
│   │   │   └── pip_en-US.wxl
│   │   ├── purge.py
│   │   ├── sdktools.psm1
│   │   ├── sign_build.ps1
│   │   ├── tcltk/
│   │   │   ├── tcltk.wixproj
│   │   │   ├── tcltk.wxs
│   │   │   ├── tcltk_d.wixproj
│   │   │   ├── tcltk_d.wxs
│   │   │   ├── tcltk_en-US.wxl_template
│   │   │   ├── tcltk_files.wxs
│   │   │   ├── tcltk_pdb.wixproj
│   │   │   ├── tcltk_pdb.wxs
│   │   │   └── tcltk_reg.wxs
│   │   ├── test/
│   │   │   ├── test.wixproj
│   │   │   ├── test.wxs
│   │   │   ├── test_d.wixproj
│   │   │   ├── test_d.wxs
│   │   │   ├── test_en-US.wxl
│   │   │   ├── test_files.wxs
│   │   │   ├── test_pdb.wixproj
│   │   │   └── test_pdb.wxs
│   │   ├── testrelease.bat
│   │   ├── tools/
│   │   │   ├── tools.wixproj
│   │   │   ├── tools.wxs
│   │   │   ├── tools_en-US.wxl
│   │   │   └── tools_files.wxs
│   │   ├── ucrt/
│   │   │   ├── ucrt.wixproj
│   │   │   ├── ucrt.wxs
│   │   │   └── ucrt_en-US.wxl
│   │   ├── uploadrelease.bat
│   │   ├── uploadrelease.proj
│   │   ├── uploadrelease.ps1
│   │   └── wix.props
│   ├── nuget/
│   │   ├── build.bat
│   │   ├── make_pkg.proj
│   │   ├── python.nuspec
│   │   ├── pythonarm32.nuspec
│   │   ├── pythondaily.nuspec
│   │   ├── pythondaily.symbols.nuspec
│   │   └── pythonx86.nuspec
│   ├── peg_generator/
│   │   ├── .clang-format
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── data/
│   │   │   ├── cprog.py
│   │   │   └── top-pypi-packages-365-days.json
│   │   ├── mypy.ini
│   │   ├── peg_extension/
│   │   │   ├── __init__.py
│   │   │   └── peg_extension.c
│   │   ├── pegen/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── ast_dump.py
│   │   │   ├── build.py
│   │   │   ├── c_generator.py
│   │   │   ├── first_sets.py
│   │   │   ├── grammar.py
│   │   │   ├── grammar_parser.py
│   │   │   ├── grammar_visualizer.py
│   │   │   ├── keywordgen.py
│   │   │   ├── metagrammar.gram
│   │   │   ├── parser.py
│   │   │   ├── parser_generator.py
│   │   │   ├── python_generator.py
│   │   │   ├── sccutils.py
│   │   │   ├── testutil.py
│   │   │   ├── tokenizer.py
│   │   │   └── validator.py
│   │   ├── pyproject.toml
│   │   ├── requirements.pip
│   │   └── scripts/
│   │       ├── __init__.py
│   │       ├── ast_timings.py
│   │       ├── benchmark.py
│   │       ├── download_pypi_packages.py
│   │       ├── find_max_nesting.py
│   │       ├── grammar_grapher.py
│   │       ├── joinstats.py
│   │       ├── test_parse_directory.py
│   │       └── test_pypi_packages.py
│   ├── pynche/
│   │   ├── ChipViewer.py
│   │   ├── ColorDB.py
│   │   ├── DetailsViewer.py
│   │   ├── ListViewer.py
│   │   ├── Main.py
│   │   ├── PyncheWidget.py
│   │   ├── README
│   │   ├── StripViewer.py
│   │   ├── Switchboard.py
│   │   ├── TextViewer.py
│   │   ├── TypeinViewer.py
│   │   ├── X/
│   │   │   ├── rgb.txt
│   │   │   └── xlicense.txt
│   │   ├── __init__.py
│   │   ├── html40colors.txt
│   │   ├── namedcolors.txt
│   │   ├── pyColorChooser.py
│   │   ├── pynche
│   │   ├── pynche.pyw
│   │   ├── webcolors.txt
│   │   └── websafe.txt
│   ├── scripts/
│   │   ├── 2to3
│   │   ├── README
│   │   ├── abitype.py
│   │   ├── analyze_dxp.py
│   │   ├── byext.py
│   │   ├── byteyears.py
│   │   ├── checkpip.py
│   │   ├── cleanfuture.py
│   │   ├── combinerefs.py
│   │   ├── copytime.py
│   │   ├── crlf.py
│   │   ├── db2pickle.py
│   │   ├── diff.py
│   │   ├── dutree.doc
│   │   ├── dutree.py
│   │   ├── eptags.py
│   │   ├── find-uname.py
│   │   ├── find_recursionlimit.py
│   │   ├── finddiv.py
│   │   ├── findlinksto.py
│   │   ├── findnocoding.py
│   │   ├── fixcid.py
│   │   ├── fixdiv.py
│   │   ├── fixheader.py
│   │   ├── fixnotice.py
│   │   ├── fixps.py
│   │   ├── generate_opcode_h.py
│   │   ├── generate_stdlib_module_names.py
│   │   ├── generate_token.py
│   │   ├── get-remote-certificate.py
│   │   ├── google.py
│   │   ├── gprof2html.py
│   │   ├── highlight.py
│   │   ├── idle3
│   │   ├── ifdef.py
│   │   ├── import_diagnostics.py
│   │   ├── lfcr.py
│   │   ├── linktree.py
│   │   ├── lll.py
│   │   ├── mailerdaemon.py
│   │   ├── make_ctype.py
│   │   ├── md5sum.py
│   │   ├── mkreal.py
│   │   ├── ndiff.py
│   │   ├── nm2def.py
│   │   ├── objgraph.py
│   │   ├── parse_html5_entities.py
│   │   ├── parseentities.py
│   │   ├── patchcheck.py
│   │   ├── pathfix.py
│   │   ├── pdeps.py
│   │   ├── pep384_macrocheck.py
│   │   ├── pickle2db.py
│   │   ├── pindent.py
│   │   ├── ptags.py
│   │   ├── pydoc3
│   │   ├── pysource.py
│   │   ├── reindent-rst.py
│   │   ├── reindent.py
│   │   ├── rgrep.py
│   │   ├── run_tests.py
│   │   ├── serve.py
│   │   ├── smelly.py
│   │   ├── stable_abi.py
│   │   ├── suff.py
│   │   ├── texi2html.py
│   │   ├── untabify.py
│   │   ├── update_file.py
│   │   ├── var_access_benchmark.py
│   │   ├── which.py
│   │   └── win_add2path.py
│   ├── ssl/
│   │   ├── make_ssl_data.py
│   │   └── multissltests.py
│   ├── stringbench/
│   │   ├── README
│   │   └── stringbench.py
│   ├── test2to3/
│   │   ├── README
│   │   ├── maintest.py
│   │   ├── setup.py
│   │   ├── test/
│   │   │   ├── runtests.py
│   │   │   └── test_foo.py
│   │   └── test2to3/
│   │       ├── __init__.py
│   │       └── hello.py
│   ├── tz/
│   │   └── zdump.py
│   ├── unicode/
│   │   ├── Makefile
│   │   ├── comparecodecs.py
│   │   ├── gencjkcodecs.py
│   │   ├── gencodec.py
│   │   ├── genmap_japanese.py
│   │   ├── genmap_korean.py
│   │   ├── genmap_schinese.py
│   │   ├── genmap_support.py
│   │   ├── genwincodec.py
│   │   ├── genwincodecs.bat
│   │   ├── listcodecs.py
│   │   ├── makeunicodedata.py
│   │   ├── mkstringprep.py
│   │   └── python-mappings/
│   │       ├── CP1140.TXT
│   │       ├── CP273.TXT
│   │       ├── GB2312.TXT
│   │       ├── KOI8-U.TXT
│   │       ├── TIS-620.TXT
│   │       ├── diff/
│   │       │   ├── jisx0213-2000-std.txt.diff
│   │       │   └── jisx0213-2004-std.txt.diff
│   │       ├── gb-18030-2000.xml
│   │       └── jisx0213-2004-std.txt
│   └── unittestgui/
│       ├── README.txt
│       └── unittestgui.py
├── Win7.rst
├── aclocal.m4
├── config.guess
├── config.sub
├── configure
├── configure.ac
├── install-sh
├── netlify.toml
├── pyconfig.h.in
└── setup.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .azure-pipelines/ci.yml
================================================
variables:
  coverage: false

trigger: ['main', '3.10', '3.9', '3.8', '3.7']

jobs:
- job: Prebuild
  displayName: Pre-build checks

  pool:
    vmImage: ubuntu-20.04

  steps:
  - template: ./prebuild-checks.yml


- job: Docs_PR
  displayName: Docs PR
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true'))

  pool:
    vmImage: ubuntu-20.04

  steps:
  - template: ./docs-steps.yml
    parameters:
      upload: true


- job: macOS_CI_Tests
  displayName: macOS CI Tests
  dependsOn: Prebuild
  #condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))
  # bpo-39837: macOS tests on Azure Pipelines are disabled
  condition: false

  variables:
    testRunTitle: '$(build.sourceBranchName)-macos'
    testRunPlatform: macos

  pool:
    vmImage: macos-10.15

  steps:
  - template: ./macos-steps.yml


- job: Ubuntu_CI_Tests
  displayName: Ubuntu CI Tests
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))

  pool:
    vmImage: ubuntu-20.04

  variables:
    testRunTitle: '$(build.sourceBranchName)-linux'
    testRunPlatform: linux
    openssl_version: 1.1.1l

  steps:
  - template: ./posix-steps.yml
    parameters:
      dependencies: apt


- job: Ubuntu_Coverage_CI_Tests
  displayName: Ubuntu CI Tests (coverage)
  dependsOn: Prebuild
  condition: |
    and(
        and(
            succeeded(),
            eq(variables['coverage'], 'true')
        ),
        eq(dependencies.Prebuild.outputs['tests.run'], 'true')
    )

  pool:
    vmImage: ubuntu-20.04

  variables:
    testRunTitle: '$(Build.SourceBranchName)-linux-coverage'
    testRunPlatform: linux-coverage
    openssl_version: 1.1.1l

  steps:
  - template: ./posix-steps.yml
    parameters:
      dependencies: apt
      coverage: true


- job: Windows_CI_Tests
  displayName: Windows CI Tests
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))

  pool:
    vmImage: windows-2019

  strategy:
    matrix:
      win32:
        arch: win32
        buildOpt: '-p Win32'
        testRunTitle: '$(Build.SourceBranchName)-win32'
        testRunPlatform: win32
      win64:
        arch: amd64
        buildOpt: '-p x64'
        testRunTitle: '$(Build.SourceBranchName)-win64'
        testRunPlatform: win64
    maxParallel: 4

  steps:
  - template: ./windows-steps.yml

  - template: ./windows-layout-steps.yml
    parameters:
      kind: nuget
  - template: ./windows-layout-steps.yml
    parameters:
      kind: embed
  - template: ./windows-layout-steps.yml
    parameters:
      kind: appx
      fulltest: true


================================================
FILE: .azure-pipelines/docs-steps.yml
================================================
parameters:
  latex: false
  upload: false

steps:
- checkout: self
  clean: true
  fetchDepth: 5

- task: UsePythonVersion@0
  displayName: 'Use Python 3.6 or later'
  inputs:
    versionSpec: '>=3.6'

- script: python -m pip install -r requirements.txt
  workingDirectory: '$(build.sourcesDirectory)/Doc'
  displayName: 'Install build dependencies'

- ${{ if ne(parameters.latex, 'true') }}:
  - script: make check html PYTHON=python
    workingDirectory: '$(build.sourcesDirectory)/Doc'
    displayName: 'Build documentation'

- ${{ if eq(parameters.latex, 'true') }}:
  - script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full
    displayName: 'Install LaTeX'

  - script: make dist PYTHON=python SPHINXBUILD='python -m sphinx' BLURB='python -m blurb'
    workingDirectory: '$(build.sourcesDirectory)/Doc'
    displayName: 'Build documentation'

- ${{ if eq(parameters.upload, 'true') }}:
  - task: PublishBuildArtifacts@1
    displayName: 'Publish docs'

    inputs:
      PathToPublish: '$(build.sourcesDirectory)/Doc/build'
      ArtifactName: docs
      publishLocation: Container

  - ${{ if eq(parameters.latex, 'true') }}:
    - task: PublishBuildArtifacts@1
      displayName: 'Publish dist'
      inputs:
        PathToPublish: '$(build.sourcesDirectory)/Doc/dist'
        ArtifactName: docs_dist
        publishLocation: Container


================================================
FILE: .azure-pipelines/macos-steps.yml
================================================
steps:
- checkout: self
  clean: true
  fetchDepth: 5

- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-azdev
  displayName: 'Configure CPython (debug)'

- script: make -j4
  displayName: 'Build CPython'

- script: make pythoninfo
  displayName: 'Display build info'

- script: make buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml"
  displayName: 'Tests'
  continueOnError: true
  timeoutInMinutes: 30

- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFiles: '$(build.binariesDirectory)/test-results.xml'
    mergeTestResults: true
    testRunTitle: $(testRunTitle)
    platform: $(testRunPlatform)
  condition: succeededOrFailed()


================================================
FILE: .azure-pipelines/posix-deps-apt.sh
================================================
#!/bin/sh
apt-get update

apt-get -yq install \
    build-essential \
    zlib1g-dev \
    libbz2-dev \
    liblzma-dev \
    libncurses5-dev \
    libreadline6-dev \
    libsqlite3-dev \
    libssl-dev \
    libgdbm-dev \
    tk-dev \
    lzma \
    lzma-dev \
    liblzma-dev \
    libffi-dev \
    uuid-dev \
    xvfb

if [ ! -z "$1" ]
then
  echo ##vso[task.prependpath]$PWD/multissl/openssl/$1
  echo ##vso[task.setvariable variable=OPENSSL_DIR]$PWD/multissl/openssl/$1
  python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $1 --system Linux
fi


================================================
FILE: .azure-pipelines/posix-steps.yml
================================================
parameters:
  coverage: false
  sudo_dependencies: sudo
  dependencies: apt
  patchcheck: true
  xvfb: true

steps:
- checkout: self
  clean: true
  fetchDepth: 5

# Work around a known issue affecting Ubuntu VMs on Pipelines
- script: sudo setfacl -Rb /home/vsts
  displayName: 'Workaround ACL issue'

- script: ${{ parameters.sudo_dependencies }} ./.azure-pipelines/posix-deps-${{ parameters.dependencies }}.sh $(openssl_version)
  displayName: 'Install dependencies'

- script: ./configure --with-pydebug
  displayName: 'Configure CPython (debug)'

- script: make -j4
  displayName: 'Build CPython'

- ${{ if eq(parameters.coverage, 'true') }}:
  - script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage
    displayName: 'Set up virtual environment'

  - script: ./venv/bin/python -m test.pythoninfo
    displayName: 'Display build info'

  - script: |
      $COMMAND -m coverage run --pylib -m test \
                --fail-env-changed \
                -uall,-cpu \
                --junit-xml=$(build.binariesDirectory)/test-results.xml \
                -x test_multiprocessing_fork \
                -x test_multiprocessing_forkserver \
                -x test_multiprocessing_spawn \
                -x test_concurrent_futures
    displayName: 'Tests with coverage'
    env:
      ${{ if eq(parameters.xvfb, 'true') }}:
        COMMAND: xvfb-run ./venv/bin/python
      ${{ if ne(parameters.xvfb, 'true') }}:
        COMMAND: ./venv/bin/python

  - script: ./venv/bin/python -m coverage xml
    displayName: 'Generate coverage.xml'

  - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml
    displayName: 'Publish code coverage results'


- ${{ if ne(parameters.coverage, 'true') }}:
  - script: make pythoninfo
    displayName: 'Display build info'

  - script: $COMMAND buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml"
    displayName: 'Tests'
    env:
      ${{ if eq(parameters.xvfb, 'true') }}:
        COMMAND: xvfb-run make
      ${{ if ne(parameters.xvfb, 'true') }}:
        COMMAND: make

- ${{ if eq(parameters.patchcheck, 'true') }}:
  - script: ./python Tools/scripts/patchcheck.py --travis true
    displayName: 'Run patchcheck.py'
    condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))


- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFiles: '$(build.binariesDirectory)/test-results.xml'
    mergeTestResults: true
    testRunTitle: $(testRunTitle)
    platform: $(testRunPlatform)
  condition: succeededOrFailed()


================================================
FILE: .azure-pipelines/pr.yml
================================================
variables:
  coverage: false

pr: ['main', '3.10', '3.9', '3.8', '3.7']

jobs:
- job: Prebuild
  displayName: Pre-build checks

  pool:
    vmImage: ubuntu-20.04

  steps:
  - template: ./prebuild-checks.yml


- job: Docs_PR
  displayName: Docs PR
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true'))

  pool:
    vmImage: ubuntu-20.04

  steps:
  - template: ./docs-steps.yml


- job: macOS_PR_Tests
  displayName: macOS PR Tests
  dependsOn: Prebuild
  #condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))
  # bpo-39837: macOS tests on Azure Pipelines are disabled
  condition: false

  variables:
    testRunTitle: '$(system.pullRequest.TargetBranch)-macos'
    testRunPlatform: macos

  pool:
    vmImage: macos-10.15

  steps:
  - template: ./macos-steps.yml
    parameters:
      targetBranch: $(System.PullRequest.TargetBranch)


- job: Ubuntu_PR_Tests
  displayName: Ubuntu PR Tests
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))

  pool:
    vmImage: ubuntu-20.04

  variables:
    testRunTitle: '$(system.pullRequest.TargetBranch)-linux'
    testRunPlatform: linux
    openssl_version: 1.1.1l

  steps:
  - template: ./posix-steps.yml
    parameters:
      dependencies: apt


- job: Ubuntu_Coverage_PR_Tests
  displayName: Ubuntu PR Tests (coverage)
  dependsOn: Prebuild
  condition: |
    and(
        and(
            succeeded(),
            eq(variables['coverage'], 'true')
        ),
        eq(dependencies.Prebuild.outputs['tests.run'], 'true')
    )

  pool:
    vmImage: ubuntu-20.04

  variables:
    testRunTitle: '$(Build.SourceBranchName)-linux-coverage'
    testRunPlatform: linux-coverage
    openssl_version: 1.1.1l

  steps:
  - template: ./posix-steps.yml
    parameters:
      dependencies: apt
      coverage: true


- job: Windows_PR_Tests
  displayName: Windows PR Tests
  dependsOn: Prebuild
  condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))

  pool:
    vmImage: windows-2019

  strategy:
    matrix:
      win32:
        arch: win32
        buildOpt: '-p Win32'
        testRunTitle: '$(System.PullRequest.TargetBranch)-win32'
        testRunPlatform: win32
      win64:
        arch: amd64
        buildOpt: '-p x64'
        testRunTitle: '$(System.PullRequest.TargetBranch)-win64'
        testRunPlatform: win64
      winarm64:
        arch: arm64
        buildOpt: '-p arm64'
    maxParallel: 4

  steps:
  - template: ./windows-steps.yml
    parameters:
      targetBranch: $(System.PullRequest.TargetBranch)


================================================
FILE: .azure-pipelines/prebuild-checks.yml
================================================
steps:
- checkout: self
  fetchDepth: 5

- script: echo "##vso[task.setvariable variable=diffTarget]HEAD~1"
  displayName: Set default diff target

- script: |
    git fetch -q origin $(System.PullRequest.TargetBranch)
    echo "##vso[task.setvariable variable=diffTarget]HEAD \$(git merge-base HEAD FETCH_HEAD)"
  displayName: Fetch comparison tree
  condition: and(succeeded(), variables['System.PullRequest.TargetBranch'])

- script: |
   if ! git diff --name-only $(diffTarget) | grep -qE '(\.rst$|^Doc|^Misc)'
   then
     echo "No docs were updated: docs.run=false"
     echo "##vso[task.setvariable variable=run;isOutput=true]false"
   else
     echo "Docs were updated: docs.run=true"
     echo "##vso[task.setvariable variable=run;isOutput=true]true"
   fi
  displayName: Detect documentation changes
  name: docs

- script: |
   if ! git diff --name-only $(diffTarget) | grep -qvE '(\.rst$|^Doc|^Misc)'
   then
     echo "Only docs were updated: tests.run=false"
     echo "##vso[task.setvariable variable=run;isOutput=true]false"
   else
     echo "Code was updated: tests.run=true"
     echo "##vso[task.setvariable variable=run;isOutput=true]true"
   fi
  displayName: Detect source changes
  name: tests


================================================
FILE: .azure-pipelines/windows-layout-steps.yml
================================================
parameters:
  kind: nuget
  extraOpts: --precompile
  fulltest: false

steps:
- script: .\python.bat PC\layout -vv -s "$(Build.SourcesDirectory)" -b "$(Py_OutDir)\$(arch)" -t "$(Build.BinariesDirectory)\layout-tmp-${{ parameters.kind }}-$(arch)" --copy "$(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)" ${{ parameters.extraOpts }} --preset-${{ parameters.kind }} --include-tests
  displayName: Create ${{ parameters.kind }} layout

- script: .\python.exe -m test.pythoninfo
  workingDirectory: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)
  displayName: Show layout info (${{ parameters.kind }})

- ${{ if eq(parameters.fulltest, 'true') }}:
  - script: .\python.exe -m test -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results-${{ parameters.kind }}.xml" --tempdir "$(Build.BinariesDirectory)\tmp-${{ parameters.kind }}-$(arch)"
    workingDirectory: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)
    displayName: ${{ parameters.kind }} Tests
    env:
      PREFIX: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)

  - task: PublishTestResults@2
    displayName: Publish ${{ parameters.kind }} Test Results
    inputs:
      testResultsFiles: $(Build.BinariesDirectory)\test-results-${{ parameters.kind }}.xml
      mergeTestResults: true
      testRunTitle: ${{ parameters.kind }}-$(testRunTitle)
      platform: $(testRunPlatform)
    condition: succeededOrFailed()


================================================
FILE: .azure-pipelines/windows-release/build-steps.yml
================================================
parameters:
  ShouldPGO: false

steps:
- template: ./checkout.yml

- powershell: |
    $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
    Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
    Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
    Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
    Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
    Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)"
    Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)-$(Name)"
  displayName: 'Extract version numbers'

- ${{ if eq(parameters.ShouldPGO, 'false') }}:
  - powershell: |
      $env:SigningCertificate = $null
      .\PCbuild\build.bat -v -p $(Platform) -c $(Configuration)
    displayName: 'Run build'
    env:
      IncludeUwp: true
      Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.ShouldPGO, 'true') }}:
  - powershell: |
      $env:SigningCertificate = $null
      .\PCbuild\build.bat -v -p $(Platform) --pgo
    displayName: 'Run build with PGO'
    env:
      IncludeUwp: true
      Py_OutDir: '$(Build.BinariesDirectory)\bin'

- powershell: |
    $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
    $tool = (gci -r "$kitroot\Bin\*\x64\signtool.exe" | sort FullName -Desc | select -First 1)
    if (-not $tool) {
      throw "SDK is not available"
    }
    Write-Host "##vso[task.prependpath]$($tool.Directory)"
  displayName: 'Add WinSDK tools to path'

- powershell: |
    $env:SigningCertificate = $null
    $(_HostPython) PC\layout -vv -b "$(Build.BinariesDirectory)\bin" -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default --arch $(Arch)
    makecat "${env:CAT}.cdf"
    del "${env:CAT}.cdf"
    if (-not (Test-Path "${env:CAT}.cat")) {
      throw "Failed to build catalog file"
    }
  displayName: 'Generate catalog'
  env:
    CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
    PYTHON_HEXVERSION: $(VersionHex)

- task: PublishPipelineArtifact@0
  displayName: 'Publish binaries'
  condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
  inputs:
    targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
    artifactName: bin_$(Name)

- task: PublishPipelineArtifact@0
  displayName: 'Publish binaries for signing'
  condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
  inputs:
    targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
    artifactName: unsigned_bin_$(Name)

- task: CopyFiles@2
  displayName: 'Layout Artifact: symbols'
  inputs:
    sourceFolder: $(Build.BinariesDirectory)\bin\$(Arch)
    targetFolder: $(Build.ArtifactStagingDirectory)\symbols\$(Name)
    flatten: true
    contents: |
      **\*.pdb

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: symbols'
  inputs:
    PathToPublish: '$(Build.ArtifactStagingDirectory)\symbols'
    ArtifactName: symbols


================================================
FILE: .azure-pipelines/windows-release/checkout.yml
================================================
parameters:
  depth: 3

steps:
- checkout: none

- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch https://github.com/$(GitRemote)/cpython.git .
  displayName: 'git clone ($(GitRemote)/$(SourceTag))'
  condition: and(succeeded(), and(variables['GitRemote'], variables['SourceTag']))

- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch $(Build.Repository.Uri) .
  displayName: 'git clone (<default>/$(SourceTag))'
  condition: and(succeeded(), and(not(variables['GitRemote']), variables['SourceTag']))

- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch https://github.com/$(GitRemote)/cpython.git .
  displayName: 'git clone ($(GitRemote)/<default>)'
  condition: and(succeeded(), and(variables['GitRemote'], not(variables['SourceTag'])))

- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch $(Build.Repository.Uri) .
  displayName: 'git clone'
  condition: and(succeeded(), and(not(variables['GitRemote']), not(variables['SourceTag'])))


================================================
FILE: .azure-pipelines/windows-release/find-sdk.yml
================================================
# Locate the Windows SDK and add its binaries directory to PATH
#
# `toolname` can be overridden to use a different marker file.

parameters:
  toolname: signtool.exe

steps:
  - powershell: |
      $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
      $tool = (gci -r "$kitroot\Bin\*\${{ parameters.toolname }}" | sort FullName -Desc | select -First 1)
      if (-not $tool) {
          throw "SDK is not available"
      }
      Write-Host "##vso[task.prependpath]$($tool.Directory)"
      Write-Host "Adding $($tool.Directory) to PATH"
    displayName: 'Add WinSDK tools to path'


================================================
FILE: .azure-pipelines/windows-release/gpg-sign.yml
================================================
parameters:
  GPGKeyFile: $(GPGKey)
  GPGPassphrase: $(GPGPassphrase)
  Files: '*'
  WorkingDirectory: $(Build.BinariesDirectory)

steps:
- task: DownloadSecureFile@1
  name: gpgkey
  inputs:
    secureFile: ${{ parameters.GPGKeyFile }}
  displayName: 'Download GPG key'

- powershell: |
    git clone https://github.com/python/cpython-bin-deps --branch gpg --single-branch --depth 1 --progress -v "gpg"
    gpg/gpg2.exe --import "$(gpgkey.secureFilePath)"
    (gci -File ${{ parameters.Files }}).FullName | %{
        gpg/gpg2.exe -ba --batch --passphrase ${{ parameters.GPGPassphrase }} $_
        "Made signature for $_"
    }
  displayName: 'Generate GPG signatures'
  workingDirectory: ${{ parameters.WorkingDirectory }}

- powershell: |
    $p = gps "gpg-agent" -EA 0
    if ($p) { $p.Kill() }
  displayName: 'Kill GPG agent'
  condition: true


================================================
FILE: .azure-pipelines/windows-release/layout-command.yml
================================================
steps:
- task: DownloadPipelineArtifact@1
  displayName: 'Download artifact: bin_$(HostArch)'
  condition: and(succeeded(), variables['HostArch'])
  inputs:
    artifactName: bin_$(HostArch)
    targetPath: $(Build.BinariesDirectory)\bin_$(HostArch)

- powershell: >
    Write-Host (
    '##vso[task.setvariable variable=LayoutCmd]&
    "$(Python)"
    "{1}\PC\layout"
    -vv
    --source "{1}"
    --build "{0}\bin"
    --arch "$(Name)"
    --temp "{0}\layout-temp"
    --include-cat "{0}\bin\python.cat"
    --doc-build "{0}\doc"'
    -f ("$(Build.BinariesDirectory)", "$(Build.SourcesDirectory)")
    )
  displayName: 'Set LayoutCmd'


================================================
FILE: .azure-pipelines/windows-release/mingw-lib.yml
================================================
parameters:
  DllToolOpt: -m i386:x86-64
  #DllToolOpt: -m i386 --as-flags=--32

steps:
- powershell: |
    git clone https://github.com/python/cpython-bin-deps --branch binutils --single-branch --depth 1 --progress -v "binutils"
    gci "bin\$(Arch)\python*.dll" | %{
      & "binutils\gendef.exe" $_ | Out-File -Encoding ascii tmp.def
      & "binutils\dlltool.exe" --dllname $($_.BaseName).dll --def tmp.def --output-lib "$($_.Directory)\lib$($_.BaseName).a" ${{ parameters.DllToolOpt }}
    }
  displayName: 'Generate MinGW import library'
  workingDirectory: $(Build.BinariesDirectory)


================================================
FILE: .azure-pipelines/windows-release/msi-steps.yml
================================================
steps:
  - template: ./checkout.yml

  - powershell: |
      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
    displayName: 'Update signing description'
    condition: and(succeeded(), not(variables['SigningDescription']))

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: doc'
    inputs:
      artifactName: doc
      targetPath: $(Build.BinariesDirectory)\doc

  - task: CopyFiles@2
    displayName: 'Merge documentation files'
    inputs:
      sourceFolder: $(Build.BinariesDirectory)\doc
      targetFolder: $(Build.SourcesDirectory)\Doc\build
      contents: |
        htmlhelp\*.chm

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_win32'
    inputs:
      artifactName: bin_win32
      targetPath: $(Build.BinariesDirectory)\win32

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_win32_d'
    inputs:
      artifactName: bin_win32_d
      targetPath: $(Build.BinariesDirectory)\win32

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_amd64'
    inputs:
      artifactName: bin_amd64
      targetPath: $(Build.BinariesDirectory)\amd64

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_amd64_d'
    inputs:
      artifactName: bin_amd64_d
      targetPath: $(Build.BinariesDirectory)\amd64

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: tcltk_lib_win32'
    inputs:
      artifactName: tcltk_lib_win32
      targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: tcltk_lib_amd64'
    inputs:
      artifactName: tcltk_lib_amd64
      targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64

  - powershell: |
      copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
    displayName: 'Copy signed files into sources'
    condition: and(succeeded(), variables['SigningCertificate'])

  - script: |
      call Tools\msi\get_externals.bat
      call PCbuild\find_python.bat
      echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
      call PCbuild/find_msbuild.bat
      echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
    displayName: 'Get external dependencies'

  - script: |
      %PYTHON% -m pip install blurb
      %PYTHON% -m blurb merge -f Misc\NEWS
    displayName: 'Merge NEWS file'

  - script: |
      %MSBUILD% Tools\msi\launcher\launcher.wixproj
    displayName: 'Build launcher installer'
    env:
      Platform: x86
      Py_OutDir: $(Build.BinariesDirectory)

  - script: |
      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
      %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
    displayName: 'Build win32 installer'
    env:
      Platform: x86
      Py_OutDir: $(Build.BinariesDirectory)
      PYTHON: $(Build.BinariesDirectory)\win32\python.exe
      PYTHONHOME: $(Build.SourcesDirectory)
      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
      BuildForRelease: true
      SuppressMinGWLib: true

  - script: |
      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
      %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
    displayName: 'Build amd64 installer'
    env:
      Platform: x64
      Py_OutDir: $(Build.BinariesDirectory)
      PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
      PYTHONHOME: $(Build.SourcesDirectory)
      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
      BuildForRelease: true
      SuppressMinGWLib: true

  - task: CopyFiles@2
    displayName: 'Assemble artifact: msi (1/2)'
    inputs:
      sourceFolder: $(Build.BinariesDirectory)\win32\en-us
      targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
      contents: |
        *.msi
        *.cab
        *.exe

  - task: CopyFiles@2
    displayName: 'Assemble artifact: msi (2/2)'
    inputs:
      sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
      targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
      contents: |
        *.msi
        *.cab
        *.exe

  - task: PublishPipelineArtifact@0
    displayName: 'Publish MSI'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\msi'
      artifactName: msi


================================================
FILE: .azure-pipelines/windows-release/stage-build.yml
================================================
jobs:
- job: Build_Docs
  displayName: Docs build
  pool:
    name: 'Windows Release'
    #vmImage: windows-2019

  workspace:
    clean: all

  steps:
  - template: ./checkout.yml

  - script: Doc\make.bat html
    displayName: 'Build HTML docs'
    env:
      BUILDDIR: $(Build.BinariesDirectory)\Doc

  - script: Doc\make.bat htmlhelp
    displayName: 'Build CHM docs'
    env:
      BUILDDIR: $(Build.BinariesDirectory)\Doc

  #- powershell: |
  #    mkdir -Force "$(Build.BinariesDirectory)\Doc\htmlhelp"
  #    iwr "https://www.python.org/ftp/python/3.8.0/python380.chm" -OutFile "$(Build.BinariesDirectory)\Doc\htmlhelp\python390a0.chm"
  #  displayName: 'Cheat at building CHM docs'

  - task: CopyFiles@2
    displayName: 'Assemble artifact: Doc'
    inputs:
      sourceFolder: $(Build.BinariesDirectory)\Doc
      targetFolder: $(Build.ArtifactStagingDirectory)\Doc
      contents: |
        html\**\*
        htmlhelp\*.chm

  - task: PublishPipelineArtifact@0
    displayName: 'Publish artifact: doc'
    inputs:
      targetPath: $(Build.ArtifactStagingDirectory)\Doc
      artifactName: doc

- job: Build_Python
  displayName: Python build

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
        Arch: win32
        Platform: x86
        Configuration: Release
        _HostPython: .\python
      win32_d:
        Name: win32_d
        Arch: win32
        Platform: x86
        Configuration: Debug
        _HostPython: .\python
      amd64_d:
        Name: amd64_d
        Arch: amd64
        Platform: x64
        Configuration: Debug
        _HostPython: .\python
      arm64:
        Name: arm64
        Arch: arm64
        Platform: ARM64
        Configuration: Release
        _HostPython: python
      arm64_d:
        Name: arm64_d
        Arch: arm64
        Platform: ARM64
        Configuration: Debug
        _HostPython: python

  steps:
    - template: ./build-steps.yml

- job: Build_Python_NonPGO
  displayName: Python non-PGO build
  condition: and(succeeded(), ne(variables['DoPGO'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      amd64:
        Name: amd64
        Arch: amd64
        Platform: x64
        Configuration: Release
        _HostPython: .\python

  steps:
    - template: ./build-steps.yml


- job: Build_Python_PGO
  displayName: Python PGO build
  condition: and(succeeded(), eq(variables['DoPGO'], 'true'))

  # Allow up to five hours for PGO
  timeoutInMinutes: 300

  pool:
    name: 'Windows Release'

  workspace:
    clean: all

  strategy:
    matrix:
      amd64:
        Name: amd64
        Arch: amd64
        Platform: x64
        Configuration: Release
        _HostPython: .\python

  steps:
    - template: ./build-steps.yml
      parameters:
        ShouldPGO: true


- job: TclTk_Lib
  displayName: Publish Tcl/Tk Library

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  steps:
  - template: ./checkout.yml

  - script: PCbuild\get_externals.bat --no-openssl --no-libffi
    displayName: 'Get external dependencies'

  - task: MSBuild@1
    displayName: 'Copy Tcl/Tk lib for publish'
    inputs:
      solution: PCbuild\tcltk.props
      platform: x86
      msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_win32"

  - task: MSBuild@1
    displayName: 'Copy Tcl/Tk lib for publish'
    inputs:
      solution: PCbuild\tcltk.props
      platform: x64
      msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"

  - task: PublishPipelineArtifact@0
    displayName: 'Publish artifact: tcltk_lib_win32'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\tcl_win32'
      artifactName: tcltk_lib_win32

  - task: PublishPipelineArtifact@0
    displayName: 'Publish artifact: tcltk_lib_amd64'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
      artifactName: tcltk_lib_amd64


================================================
FILE: .azure-pipelines/windows-release/stage-layout-embed.yml
================================================
jobs:
- job: Make_Embed_Layout
  displayName: Make embeddable layout
  condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
      amd64:
        Name: amd64
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
      arm64:
        Name: arm64
        HostArch: amd64
        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)

  steps:
  - template: ./checkout.yml

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)'
    inputs:
      artifactName: bin_$(Name)
      targetPath: $(Build.BinariesDirectory)\bin

  - template: ./layout-command.yml

  - powershell: |
      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
      Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
    displayName: 'Extract version numbers'

  - powershell: >
      $(LayoutCmd)
      --copy "$(Build.ArtifactStagingDirectory)\layout"
      --zip "$(Build.ArtifactStagingDirectory)\embed\python-$(VersionText)-embed-$(Name).zip"
      --preset-embed
    displayName: 'Generate embeddable layout'

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: layout_embed_$(Name)'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\layout'
      artifactName: layout_embed_$(Name)

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: embed'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
      ArtifactName: embed


================================================
FILE: .azure-pipelines/windows-release/stage-layout-full.yml
================================================
jobs:
- job: Make_Layouts
  displayName: Make layouts
  condition: and(succeeded(), eq(variables['DoLayout'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
      amd64:
        Name: amd64
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
      arm64:
        Name: arm64
        HostArch: amd64
        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)

  steps:
  - template: ./checkout.yml

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)'
    inputs:
      artifactName: bin_$(Name)
      targetPath: $(Build.BinariesDirectory)\bin

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)_d'
    inputs:
      artifactName: bin_$(Name)_d
      targetPath: $(Build.BinariesDirectory)\bin

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: doc'
    inputs:
      artifactName: doc
      targetPath: $(Build.BinariesDirectory)\doc

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: tcltk_lib_$(Name)'
    condition: and(succeeded(), variables['TclLibrary'])
    inputs:
      artifactName: tcltk_lib_$(Name)
      targetPath: $(Build.BinariesDirectory)\tcltk_lib

  - powershell: |
      copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
    displayName: 'Copy signed files into sources'
    condition: and(succeeded(), variables['SigningCertificate'])

  - template: ./layout-command.yml

  - powershell: |
      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
    displayName: 'Generate full layout'
    env:
      TCL_LIBRARY: $(TclLibrary)

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: layout_full_$(Name)'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\layout'
      artifactName: layout_full_$(Name)


================================================
FILE: .azure-pipelines/windows-release/stage-layout-msix.yml
================================================
jobs:
- job: Make_MSIX_Layout
  displayName: Make MSIX layout

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      #win32:
      #  Name: win32
      #  Python: $(Build.BinariesDirectory)\bin\python.exe
      #  PYTHONHOME: $(Build.SourcesDirectory)
      #  TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
      amd64:
        Name: amd64
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
      arm64:
        Name: arm64
        HostArch: amd64
        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)

  steps:
  - template: ./checkout.yml

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)'
    inputs:
      artifactName: bin_$(Name)
      targetPath: $(Build.BinariesDirectory)\bin

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)_d'
    inputs:
      artifactName: bin_$(Name)_d
      targetPath: $(Build.BinariesDirectory)\bin

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: tcltk_lib_$(Name)'
    condition: and(succeeded(), variables['TclLibrary'])
    inputs:
      artifactName: tcltk_lib_$(Name)
      targetPath: $(Build.BinariesDirectory)\tcltk_lib

  - powershell: |
      copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
    displayName: 'Copy signed files into sources'
    condition: and(succeeded(), variables['SigningCertificate'])

  - template: ./layout-command.yml

  - powershell: |
     Remove-Item "$(Build.ArtifactStagingDirectory)\appx-store" -Recurse -Force -EA 0
      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
    displayName: 'Generate store APPX layout'
    env:
      TCL_LIBRARY: $(TclLibrary)

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: layout_appxstore_$(Name)'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\appx-store'
      artifactName: layout_appxstore_$(Name)

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: cert'
    condition: and(succeeded(), variables['SigningCertificate'])
    inputs:
      artifactName: cert
      targetPath: $(Build.BinariesDirectory)\cert

  - powershell: |
      $info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
      Write-Host "Side-loadable APPX must be signed with '$($info.Subject)'"
      Write-Host "##vso[task.setvariable variable=APPX_DATA_PUBLISHER]$($info.Subject)"
      Write-Host "##vso[task.setvariable variable=APPX_DATA_SHA256]$($info.SHA256)"
    displayName: 'Override signing parameters'
    condition: and(succeeded(), variables['SigningCertificate'])

  - powershell: |
      Remove-Item "$(Build.ArtifactStagingDirectory)\appx" -Recurse -Force -EA 0
      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
    displayName: 'Generate sideloading APPX layout'
    env:
      TCL_LIBRARY: $(TclLibrary)

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: layout_appx_$(Name)'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\appx'
      artifactName: layout_appx_$(Name)


================================================
FILE: .azure-pipelines/windows-release/stage-layout-nuget.yml
================================================
jobs:
- job: Make_Nuget_Layout
  displayName: Make Nuget layout
  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
      amd64:
        Name: amd64
        Python: $(Build.BinariesDirectory)\bin\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)
      arm64:
        Name: arm64
        HostArch: amd64
        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
        PYTHONHOME: $(Build.SourcesDirectory)

  steps:
  - template: ./checkout.yml

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: bin_$(Name)'
    inputs:
      artifactName: bin_$(Name)
      targetPath: $(Build.BinariesDirectory)\bin

  - powershell: |
      copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
    displayName: 'Copy signed files into sources'
    condition: and(succeeded(), variables['SigningCertificate'])

  - template: ./layout-command.yml

  - powershell: |
      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
    displayName: 'Generate nuget layout'

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: layout_nuget_$(Name)'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
      artifactName: layout_nuget_$(Name)


================================================
FILE: .azure-pipelines/windows-release/stage-msi.yml
================================================
jobs:
- job: Make_MSI
  displayName: Make MSI
  condition: and(succeeded(), not(variables['SigningCertificate']))

  pool:
    vmImage: windows-2019

  variables:
    ReleaseUri: http://www.python.org/{arch}
    DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
    Py_OutDir: $(Build.BinariesDirectory)

  workspace:
    clean: all

  steps:
  - template: msi-steps.yml

- job: Make_Signed_MSI
  displayName: Make signed MSI
  condition: and(succeeded(), variables['SigningCertificate'])

  pool:
    name: 'Windows Release'

  variables:
    ReleaseUri: http://www.python.org/{arch}
    DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
    Py_OutDir: $(Build.BinariesDirectory)

  workspace:
    clean: all

  steps:
  - template: msi-steps.yml


================================================
FILE: .azure-pipelines/windows-release/stage-pack-msix.yml
================================================
jobs:
- job: Pack_MSIX
  displayName: Pack MSIX bundles

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      amd64:
        Name: amd64
        Artifact: appx
        Suffix:
        ShouldSign: true
      amd64_store:
        Name: amd64
        Artifact: appxstore
        Suffix: -store
        Upload: true
      arm64:
        Name: arm64
        Artifact: appx
        Suffix:
        ShouldSign: true
      arm64_store:
        Name: arm64
        Artifact: appxstore
        Suffix: -store
        Upload: true

  steps:
  - template: ./checkout.yml

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
    inputs:
      artifactName: layout_$(Artifact)_$(Name)
      targetPath: $(Build.BinariesDirectory)\layout

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: symbols'
    inputs:
      artifactName: symbols
      downloadPath: $(Build.BinariesDirectory)

  - powershell: |
      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
      Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
      Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
      Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
      Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
      Write-Host "##vso[task.setvariable variable=Filename]python-$($d.PythonVersion)-$(Name)$(Suffix)"
    displayName: 'Extract version numbers'

  - powershell: |
      ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
    displayName: 'Build msix'

  - powershell: |
      7z a -tzip "$(Build.ArtifactStagingDirectory)\msix\$(Filename).appxsym" *.pdb
    displayName: 'Build appxsym'
    workingDirectory: $(Build.BinariesDirectory)\symbols\$(Name)

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: MSIX'
    condition: and(succeeded(), or(ne(variables['ShouldSign'], 'true'), not(variables['SigningCertificate'])))
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
      ArtifactName: msix

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: MSIX'
    condition: and(succeeded(), and(eq(variables['ShouldSign'], 'true'), variables['SigningCertificate']))
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
      ArtifactName: unsigned_msix

  - powershell: |
      7z a -tzip "$(Build.ArtifactStagingDirectory)\msixupload\$(Filename).msixupload" *
    displayName: 'Build msixupload'
    condition: and(succeeded(), eq(variables['Upload'], 'true'))
    workingDirectory: $(Build.ArtifactStagingDirectory)\msix

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: MSIXUpload'
    condition: and(succeeded(), eq(variables['Upload'], 'true'))
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msixupload'
      ArtifactName: msixupload


- job: Sign_MSIX
  displayName: Sign side-loadable MSIX bundles
  dependsOn:
  - Pack_MSIX
  condition: and(succeeded(), variables['SigningCertificate'])

  pool:
    name: 'Windows Release'

  workspace:
    clean: all

  steps:
  - template: ./checkout.yml
  - template: ./find-sdk.yml

  - powershell: |
      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
    displayName: 'Update signing description'
    condition: and(succeeded(), not(variables['SigningDescription']))

  - task: DownloadBuildArtifacts@0
    displayName: 'Download Artifact: unsigned_msix'
    inputs:
      artifactName: unsigned_msix
      downloadPath: $(Build.BinariesDirectory)

  # MSIX must be signed and timestamped simultaneously
  - powershell: |
      $failed = $true
      foreach ($retry in 1..3) {
          signtool sign /a /n "$(SigningCertificate)" /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d "$(SigningDescription)" (gi *.msix)
          if ($?) {
              $failed = $false
              break
          }
          sleep 1
      }
      if ($failed) {
          throw "Failed to sign MSIX"
      }
    displayName: 'Sign MSIX'
    workingDirectory: $(Build.BinariesDirectory)\unsigned_msix

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: MSIX'
    inputs:
      PathtoPublish: '$(Build.BinariesDirectory)\unsigned_msix'
      ArtifactName: msix


================================================
FILE: .azure-pipelines/windows-release/stage-pack-nuget.yml
================================================
jobs:
- job: Pack_Nuget
  displayName: Pack Nuget bundles
  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))

  pool:
    name: 'Windows Release'

  workspace:
    clean: all

  strategy:
    matrix:
      amd64:
        Name: amd64
      win32:
        Name: win32
      arm64:
        Name: arm64

  steps:
  - checkout: none

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: layout_nuget_$(Name)'
    inputs:
      artifactName: layout_nuget_$(Name)
      targetPath: $(Build.BinariesDirectory)\layout

  - task: NugetToolInstaller@0
    displayName: 'Install Nuget'
    inputs:
      versionSpec: '>=5.0'

  - powershell: |
      nuget pack "$(Build.BinariesDirectory)\layout\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
    displayName: 'Create nuget package'

  - powershell: |
      gci *.nupkg | %{
        nuget sign "$_" -CertificateSubjectName "$(SigningCertificate)" -Timestamper http://timestamp.digicert.com/ -Overwrite
      }
    displayName: 'Sign nuget package'
    workingDirectory: $(Build.ArtifactStagingDirectory)
    condition: and(succeeded(), variables['SigningCertificate'])

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: nuget'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: nuget


================================================
FILE: .azure-pipelines/windows-release/stage-publish-nugetorg.yml
================================================
jobs:
- job: Publish_Nuget
  displayName: Publish Nuget packages
  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  steps:
  - checkout: none

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: nuget'
    condition: and(succeeded(), not(variables['BuildToPublish']))
    inputs:
      artifactName: nuget
      downloadPath: $(Build.BinariesDirectory)

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: nuget'
    condition: and(succeeded(), variables['BuildToPublish'])
    inputs:
      artifactName: nuget
      downloadPath: $(Build.BinariesDirectory)
      buildType: specific
      project: cpython
      pipeline: Windows-Release
      buildVersionToDownload: specific
      buildId: $(BuildToPublish)

  - powershell: 'gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
    displayName: 'Prevent publishing ARM/ARM64 packages'
    workingDirectory: '$(Build.BinariesDirectory)\nuget'
    condition: and(succeeded(), not(variables['PublishArmPackages']))

  - task: NuGetCommand@2
    displayName: Push packages
    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
    inputs:
      command: push
      packagesToPush: '$(Build.BinariesDirectory)\nuget\*.nupkg'
      nuGetFeedType: external
      publishFeedCredentials: 'Python on Nuget'


================================================
FILE: .azure-pipelines/windows-release/stage-publish-pythonorg.yml
================================================
jobs:
- job: Publish_Python
  displayName: Publish python.org packages
  condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), eq(variables['DoEmbed'], 'true')))

  pool:
    #vmImage: windows-2019
    name: 'Windows Release'

  workspace:
    clean: all

  steps:
  - template: ./checkout.yml

  - task: UsePythonVersion@0
    displayName: 'Use Python 3.6 or later'
    inputs:
      versionSpec: '>=3.6'

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: Doc'
    condition: and(succeeded(), not(variables['BuildToPublish']))
    inputs:
      artifactName: Doc
      targetPath: $(Build.BinariesDirectory)\Doc

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: msi'
    condition: and(succeeded(), not(variables['BuildToPublish']))
    inputs:
      artifactName: msi
      targetPath: $(Build.BinariesDirectory)\msi

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: embed'
    condition: and(succeeded(), not(variables['BuildToPublish']))
    inputs:
      artifactName: embed
      downloadPath: $(Build.BinariesDirectory)

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact from $(BuildToPublish): Doc'
    condition: and(succeeded(), variables['BuildToPublish'])
    inputs:
      artifactName: Doc
      targetPath: $(Build.BinariesDirectory)\Doc
      buildType: specific
      project: cpython
      pipeline: 21
      buildVersionToDownload: specific
      buildId: $(BuildToPublish)

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact from $(BuildToPublish): msi'
    condition: and(succeeded(), variables['BuildToPublish'])
    inputs:
      artifactName: msi
      targetPath: $(Build.BinariesDirectory)\msi
      buildType: specific
      project: cpython
      pipeline: 21
      buildVersionToDownload: specific
      buildId: $(BuildToPublish)

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact from $(BuildToPublish): embed'
    condition: and(succeeded(), variables['BuildToPublish'])
    inputs:
      artifactName: embed
      downloadPath: $(Build.BinariesDirectory)
      buildType: specific
      project: cpython
      pipeline: Windows-Release
      buildVersionToDownload: specific
      buildId: $(BuildToPublish)

  - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
    displayName: 'Prevent publishing ARM/ARM64 packages'
    workingDirectory: '$(Build.BinariesDirectory)\embed'
    condition: and(succeeded(), not(variables['PublishArmPackages']))


  - template: ./gpg-sign.yml
    parameters:
      GPGKeyFile: 'python-signing.key'
      Files: 'doc\htmlhelp\*.chm, msi\*\*, embed\*.zip'

  - powershell: >
      $(Build.SourcesDirectory)\Tools\msi\uploadrelease.ps1
      -build msi
      -user $(PyDotOrgUsername)
      -server $(PyDotOrgServer)
      -doc_htmlhelp doc\htmlhelp
      -embed embed
      -skippurge
      -skiptest
      -skiphash
    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
    workingDirectory: $(Build.BinariesDirectory)
    displayName: 'Upload files to python.org'

  - powershell: >
      python
      "$(Build.SourcesDirectory)\Tools\msi\purge.py"
      (gci msi\*\python-*.exe | %{ $_.Name -replace 'python-(.+?)(-|\.exe).+', '$1' } | select -First 1)
    workingDirectory: $(Build.BinariesDirectory)
    displayName: 'Purge CDN'

  - powershell: |
      $failures = 0
      gci "msi\*\*-webinstall.exe" -File | %{
          $d = mkdir "tests\$($_.BaseName)" -Force
          gci $d -r -File | del
          $ic = copy $_ $d -PassThru
          "Checking layout for $($ic.Name)"
          Start-Process -wait $ic "/passive", "/layout", "$d\layout", "/log", "$d\log\install.log"
          if (-not $?) {
              Write-Error "Failed to validate layout of $($inst.Name)"
              $failures += 1
          }
      }
      if ($failures) {
        Write-Error "Failed to validate $failures installers"
        exit 1
      }
    #condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
    workingDirectory: $(Build.BinariesDirectory)
    displayName: 'Test layouts'

  - powershell: |
      $hashes = gci doc\htmlhelp\python*.chm, msi\*\*.exe, embed\*.zip | `
          Sort-Object Name | `
          Format-Table Name, @{
            Label="MD5";
            Expression={(Get-FileHash $_ -Algorithm MD5).Hash}
          }, Length -AutoSize | `
          Out-String -Width 4096
      $d = mkdir "$(Build.ArtifactStagingDirectory)\hashes" -Force
      $hashes | Out-File "$d\hashes.txt" -Encoding ascii
      $hashes
    workingDirectory: $(Build.BinariesDirectory)
    displayName: 'Generate hashes'

  - powershell: |
      "Copying:"
      (gci msi\*\python*.asc, doc\htmlhelp\*.asc, embed\*.asc).FullName
      $d = mkdir "$(Build.ArtifactStagingDirectory)\hashes" -Force
      move msi\*\python*.asc, doc\htmlhelp\*.asc, embed\*.asc $d -Force
      gci msi -Directory | %{ move "msi\$_\*.asc" (mkdir "$d\$_" -Force) }
    workingDirectory: $(Build.BinariesDirectory)
    displayName: 'Copy GPG signatures for build'

  - task: PublishPipelineArtifact@0
    displayName: 'Publish Artifact: hashes'
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)\hashes'
      artifactName: hashes


================================================
FILE: .azure-pipelines/windows-release/stage-publish-store.yml
================================================
jobs:
- job: Publish_Store
  displayName: Publish Store packages
  condition: and(succeeded(), eq(variables['DoMSIX'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  steps:
  - checkout: none

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: msixupload'
    condition: and(succeeded(), not(variables['BuildToPublish']))
    inputs:
      artifactName: msixupload
      downloadPath: $(Build.BinariesDirectory)

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: msixupload'
    condition: and(succeeded(), variables['BuildToPublish'])
    inputs:
      artifactName: msixupload
      downloadPath: $(Build.BinariesDirectory)
      buildType: specific
      project: cpython
      pipeline: Windows-Release
      buildVersionToDownload: specific
      buildId: $(BuildToPublish)

  # TODO: eq(variables['SigningCertificate'], variables['__RealSigningCertificate'])
  # If we are not real-signed, DO NOT PUBLISH


================================================
FILE: .azure-pipelines/windows-release/stage-sign.yml
================================================
parameters:
  Include: '*.exe, *.dll, *.pyd, *.cat, *.ps1'
  Exclude: 'vcruntime*, libffi*, libcrypto*, libssl*'

jobs:
- job: Sign_Python
  displayName: Sign Python binaries
  condition: and(succeeded(), variables['SigningCertificate'])

  pool:
    name: 'Windows Release'

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
      amd64:
        Name: amd64
      arm64:
        Name: arm64

  steps:
  - template: ./checkout.yml
  - template: ./find-sdk.yml

  - powershell: |
      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
    displayName: 'Update signing description'
    condition: and(succeeded(), not(variables['SigningDescription']))

  - powershell: |
      Write-Host "##vso[build.addbuildtag]signed"
    displayName: 'Add build tags'

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: unsigned_bin_$(Name)'
    inputs:
      artifactName: unsigned_bin_$(Name)
      targetPath: $(Build.BinariesDirectory)\bin

  - powershell: |
      copy "$(Build.SourcesDirectory)\Lib\venv\scripts\common\Activate.ps1" .
    displayName: 'Copy files from source'
    workingDirectory: $(Build.BinariesDirectory)\bin

  - powershell: |
      $files = (gi ${{ parameters.Include }} -Exclude ${{ parameters.Exclude }})
      signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
    displayName: 'Sign binaries'
    workingDirectory: $(Build.BinariesDirectory)\bin

  - powershell: |
      $files = (gi ${{ parameters.Include }} -Exclude ${{ parameters.Exclude }})
      $failed = $true
      foreach ($retry in 1..10) {
          signtool timestamp /tr http://timestamp.digicert.com/ /td sha256 $files
          if ($?) {
              $failed = $false
              break
          }
          sleep 5
      }
      if ($failed) {
          Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
      }
    displayName: 'Timestamp binaries'
    workingDirectory: $(Build.BinariesDirectory)\bin
    continueOnError: true

  - task: PublishPipelineArtifact@0
    displayName: 'Publish artifact: bin_$(Name)'
    inputs:
      targetPath: '$(Build.BinariesDirectory)\bin'
      artifactName: bin_$(Name)


- job: Dump_CertInfo
  displayName: Capture certificate info
  condition: and(succeeded(), variables['SigningCertificate'])

  pool:
    name: 'Windows Release'

  steps:
  - checkout: none

  - powershell: |
      $m = 'CN=$(SigningCertificate)'
      $c = ((gci Cert:\CurrentUser\My), (gci Cert:\LocalMachine\My)) | %{ $_ } | `
         ?{ $_.Subject -match $m } | `
         select -First 1
      if (-not $c) {
          Write-Host "Failed to find certificate for $(SigningCertificate)"
          exit
      }
      $d = mkdir "$(Build.BinariesDirectory)\tmp" -Force
      $cf = "$d\cert.cer"
      [IO.File]::WriteAllBytes($cf, $c.Export("Cer"))
      $csha = (certutil -dump $cf | sls "Cert Hash\(sha256\): (.+)").Matches.Groups[1].Value

      $info = @{ Subject=$c.Subject; SHA256=$csha; }

      $d = mkdir "$(Build.BinariesDirectory)\cert" -Force
      $info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
    displayName: "Extract certificate info"

  - task: PublishPipelineArtifact@0
    displayName: 'Publish artifact: cert'
    inputs:
      targetPath: '$(Build.BinariesDirectory)\cert'
      artifactName: cert


- job: Mark_Unsigned
  displayName: Tag unsigned build
  condition: and(succeeded(), not(variables['SigningCertificate']))

  pool:
    vmImage: windows-2019

  steps:
  - checkout: none

  - powershell: |
      Write-Host "##vso[build.addbuildtag]unsigned"
    displayName: 'Add build tag'


================================================
FILE: .azure-pipelines/windows-release/stage-test-embed.yml
================================================
jobs:
- job: Test_Embed
  displayName: Test Embed
  condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Name: win32
      amd64:
        Name: amd64

  steps:
  - checkout: none

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: embed'
    inputs:
      artifactName: embed
      downloadPath: $(Build.BinariesDirectory)

  - powershell: |
      $p = gi "$(Build.BinariesDirectory)\embed\python*embed-$(Name).zip"
      Expand-Archive -Path $p -DestinationPath "$(Build.BinariesDirectory)\Python"
      $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
    displayName: 'Install Python and add to PATH'

  - script: |
      python -c "import sys; print(sys.version)"
    displayName: 'Collect version number'

  - script: |
      python -m site
    displayName: 'Collect site'


================================================
FILE: .azure-pipelines/windows-release/stage-test-msi.yml
================================================
jobs:
- job: Test_MSI
  displayName: Test MSI

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32_User:
        ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
        Logs: $(Build.ArtifactStagingDirectory)\logs\win32_User
        InstallAllUsers: 0
      win32_Machine:
        ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
        Logs: $(Build.ArtifactStagingDirectory)\logs\win32_Machine
        InstallAllUsers: 1
      amd64_User:
        ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
        Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_User
        InstallAllUsers: 0
      amd64_Machine:
        ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
        Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_Machine
        InstallAllUsers: 1

  steps:
  - checkout: none

  - task: DownloadPipelineArtifact@1
    displayName: 'Download artifact: msi'
    inputs:
      artifactName: msi
      targetPath: $(Build.BinariesDirectory)\msi

  - powershell: |
      $p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
      Write-Host "##vso[task.setvariable variable=SetupExe]$($p.FullName)"
      Write-Host "##vso[task.setvariable variable=SetupExeName]$($p.Name)"
    displayName: 'Find installer executable'
    workingDirectory: $(Build.BinariesDirectory)\msi

  - script: >
      "$(SetupExe)"
      /passive
      /log "$(Logs)\install\log.txt"
      TargetDir="$(Build.BinariesDirectory)\Python"
      Include_debug=1
      Include_symbols=1
      InstallAllUsers=$(InstallAllUsers)
    displayName: 'Install Python'

  - powershell: |
      $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
    displayName: 'Add test Python to PATH'

  - script: |
      python -c "import sys; print(sys.version)"
    displayName: 'Collect version number'

  - script: |
      python -m site
    displayName: 'Collect site'

  - powershell: |
      gci -r "${env:PROGRAMDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
    displayName: 'Capture per-machine Start Menu items'
  - powershell: |
      gci -r "${env:APPDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
    displayName: 'Capture per-user Start Menu items'

  - powershell: |
      gci -r "HKLM:\Software\WOW6432Node\Python"
    displayName: 'Capture per-machine 32-bit registry'
  - powershell: |
      gci -r "HKLM:\Software\Python"
    displayName: 'Capture per-machine native registry'
  - powershell: |
      gci -r "HKCU:\Software\Python"
    displayName: 'Capture current-user registry'

  - script: |
      python -m pip install "azure<0.10"
      python -m pip uninstall -y azure python-dateutil six
    displayName: 'Test (un)install package'

  - script: |
      python -m test -uall -v test_ttk_guionly test_tk test_idle
    displayName: 'Test Tkinter and Idle'

  - script: >
      "$(SetupExe)"
      /passive
      /uninstall
      /log "$(Logs)\uninstall\log.txt"
    displayName: 'Uninstall Python'

  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifact: logs'
    condition: true
    continueOnError: true
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\logs'
      ArtifactName: msi_testlogs


================================================
FILE: .azure-pipelines/windows-release/stage-test-nuget.yml
================================================
jobs:
- job: Test_Nuget
  displayName: Test Nuget
  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))

  pool:
    vmImage: windows-2019

  workspace:
    clean: all

  strategy:
    matrix:
      win32:
        Package: pythonx86
      amd64:
        Package: python

  steps:
  - checkout: none

  - task: DownloadBuildArtifacts@0
    displayName: 'Download artifact: nuget'
    inputs:
      artifactName: nuget
      downloadPath: $(Build.BinariesDirectory)

  - task: NugetToolInstaller@0
    inputs:
      versionSpec: '>= 5'

  - powershell: >
      nuget install
      $(Package)
      -Source "$(Build.BinariesDirectory)\nuget"
      -OutputDirectory "$(Build.BinariesDirectory)\install"
      -Prerelease
      -ExcludeVersion
      -NonInteractive
    displayName: 'Install Python'

  - powershell: |
      $p = gi "$(Build.BinariesDirectory)\install\$(Package)\tools\python.exe"
      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
    displayName: 'Add test Python to PATH'

  - script: |
      python -c "import sys; print(sys.version)"
    displayName: 'Collect version number'

  - script: |
      python -m site
    displayName: 'Collect site'

  - script: |
      python -m pip install "azure<0.10"
      python -m pip uninstall -y azure python-dateutil six
    displayName: 'Test (un)install package'


================================================
FILE: .azure-pipelines/windows-release.yml
================================================
name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr)

variables:
    __RealSigningCertificate: 'Python Software Foundation'
# QUEUE TIME VARIABLES
#   GitRemote: python
#   SourceTag:
#   DoPGO: true
#   SigningCertificate: 'Python Software Foundation'
#   SigningDescription: 'Built: $(Build.BuildNumber)'
#   DoLayout: true
#   DoMSIX: true
#   DoNuget: true
#   DoEmbed: true
#   DoMSI: true
#   DoPublish: false
#   PyDotOrgUsername: ''
#   PyDotOrgServer: ''
#   BuildToPublish: ''

trigger: none
pr: none

stages:
- stage: Build
  displayName: Build binaries
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-build.yml

- stage: Sign
  displayName: Sign binaries
  dependsOn: Build
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-sign.yml

- stage: Layout
  displayName: Generate layouts
  dependsOn: Sign
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-layout-full.yml
  - template: windows-release/stage-layout-embed.yml
  - template: windows-release/stage-layout-nuget.yml

- stage: Pack
  dependsOn: Layout
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-pack-nuget.yml

- stage: Test
  dependsOn: Pack
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-test-embed.yml
  - template: windows-release/stage-test-nuget.yml

- stage: Layout_MSIX
  displayName: Generate MSIX layouts
  dependsOn: Sign
  condition: and(succeeded(), and(eq(variables['DoMSIX'], 'true'), not(variables['BuildToPublish'])))
  jobs:
  - template: windows-release/stage-layout-msix.yml

- stage: Pack_MSIX
  displayName: Package MSIX
  dependsOn: Layout_MSIX
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-pack-msix.yml

- stage: Build_MSI
  displayName: Build MSI installer
  dependsOn: Sign
  condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), not(variables['BuildToPublish'])))
  jobs:
  - template: windows-release/stage-msi.yml

- stage: Test_MSI
  displayName: Test MSI installer
  dependsOn: Build_MSI
  condition: and(succeeded(), not(variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-test-msi.yml

- stage: PublishPyDotOrg
  displayName: Publish to python.org
  dependsOn: ['Test_MSI', 'Test']
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish'])))
  jobs:
  - template: windows-release/stage-publish-pythonorg.yml

- stage: PublishNuget
  displayName: Publish to nuget.org
  dependsOn: Test
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish'])))
  jobs:
  - template: windows-release/stage-publish-nugetorg.yml

- stage: PublishStore
  displayName: Publish to Store
  dependsOn: Pack_MSIX
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish'])))
  jobs:
  - template: windows-release/stage-publish-store.yml


- stage: PublishExistingPyDotOrg
  displayName: Publish existing build to python.org
  dependsOn: []
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-publish-pythonorg.yml

- stage: PublishExistingNuget
  displayName: Publish existing build to nuget.org
  dependsOn: []
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-publish-nugetorg.yml

- stage: PublishExistingStore
  displayName: Publish existing build to Store
  dependsOn: []
  condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish']))
  jobs:
  - template: windows-release/stage-publish-store.yml


================================================
FILE: .azure-pipelines/windows-steps.yml
================================================
steps:
- checkout: self
  clean: false
  fetchDepth: 5

- powershell: |
    # Relocate build outputs outside of source directory to make cleaning faster
    Write-Host '##vso[task.setvariable variable=Py_IntDir]$(Build.BinariesDirectory)\obj'
    # UNDONE: Do not build to a different directory because of broken tests
    Write-Host '##vso[task.setvariable variable=Py_OutDir]$(Build.SourcesDirectory)\PCbuild'
    #Write-Host '##vso[task.setvariable variable=Py_OutDir]$(Build.BinariesDirectory)\bin'
    Write-Host '##vso[task.setvariable variable=EXTERNALS_DIR]$(Build.BinariesDirectory)\externals'
  displayName: Update build locations

- script: PCbuild\build.bat -e $(buildOpt)
  displayName: 'Build CPython'
  env:
    IncludeUwp: true

- script: python.bat -m test.pythoninfo
  displayName: 'Display build info'
  condition: and(succeeded(), variables['testRunPlatform'])

- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results.xml" --tempdir="$(Build.BinariesDirectory)\test"
  displayName: 'Tests'
  condition: and(succeeded(), variables['testRunPlatform'])
  env:
    PREFIX: $(Py_OutDir)\$(arch)

- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFiles: '$(Build.BinariesDirectory)\test-results.xml'
    mergeTestResults: true
    testRunTitle: $(testRunTitle)
    platform: $(testRunPlatform)
  condition: and(succeededOrFailed(), variables['testRunPlatform'])


================================================
FILE: .editorconfig
================================================
root = true

[*.{py,c,cpp,h,rst,md,yml}]
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space

[*.{py,c,cpp,h}]
indent_size = 4

[*.yml]
indent_size = 2


================================================
FILE: .gitattributes
================================================
# Binary data types
*.aif binary
*.aifc binary
*.aiff binary
*.au binary
*.bmp binary
*.exe binary
*.icns binary
*.gif binary
*.ico binary
*.jpg binary
*.pck binary
*.png binary
*.psd binary
*.tar binary
*.wav binary
*.whl binary
*.zip binary

# Specific binary files
Lib/test/sndhdrdata/sndhdr.* binary
PC/classicAppCompat.* binary

# Text files that should not be subject to eol conversion
Lib/test/cjkencodings/* -text
Lib/test/decimaltestdata/*.decTest -text
Lib/test/test_email/data/*.txt -text
Lib/test/xmltestdata/* -text
Lib/test/coding20731.py -text
Lib/test/test_importlib/data01/* -text

# CRLF files
*.bat text eol=crlf
*.ps1 text eol=crlf
*.sln text eol=crlf
*.vcxproj* text eol=crlf
*.props text eol=crlf
*.proj text eol=crlf
PCbuild/readme.txt text eol=crlf
PC/readme.txt text eol=crlf

# Generated files
# https://github.com/github/linguist#generated-code
Modules/clinic/*.h          linguist-generated=true
Objects/clinic/*.h          linguist-generated=true
PC/clinic/*.h               linguist-generated=true
Python/clinic/*.h           linguist-generated=true
Python/importlib.h          linguist-generated=true
Python/importlib_external.h linguist-generated=true
Include/internal/pycore_ast.h   linguist-generated=true
Python/Python-ast.c         linguist-generated=true
Include/opcode.h            linguist-generated=true
Python/opcode_targets.h     linguist-generated=true
Objects/typeslots.inc       linguist-generated=true
*_db.h                      linguist-generated=true
Doc/library/token-list.inc  linguist-generated=true
Include/token.h             linguist-generated=true
Lib/token.py                linguist-generated=true
Parser/token.c              linguist-generated=true

# Language aware diff headers
# https://tekin.co.uk/2020/10/better-git-diff-output-for-ruby-python-elixir-and-more
# https://gist.github.com/tekin/12500956bd56784728e490d8cef9cb81
*.c     diff=cpp
*.h     diff=cpp
*.css   diff=css
*.html  diff=html
*.py    diff=python
*.md    diff=markdown


================================================
FILE: .github/CODEOWNERS
================================================
# See https://help.github.com/articles/about-codeowners/
# for more info about CODEOWNERS file

# It uses the same pattern rule for gitignore file
# https://git-scm.com/docs/gitignore#_pattern_format

# asyncio
**/*asyncio*                  @1st1 @asvetlov

# Core
**/*context*                  @1st1
**/*genobject*                @1st1 @markshannon
**/*hamt*                     @1st1
Objects/set*                  @rhettinger
Objects/dict*                 @methane @markshannon
Objects/type*                 @markshannon
Objects/codeobject.c          @markshannon
Objects/frameobject.c         @markshannon
Objects/call.c                @markshannon
Python/ceval.c                @markshannon
Python/compile.c              @markshannon
Python/ast_opt.c              @isidentical

# Hashing
**/*hashlib*                  @python/crypto-team @tiran
**/*pyhash*                   @python/crypto-team @tiran
**/*sha*                      @python/crypto-team @tiran
**/*md5*                      @python/crypto-team @tiran
**/*blake*                    @python/crypto-team @tiran
/Modules/_blake2/**           @python/crypto-team @tiran
/Modules/_sha3/**             @python/crypto-team @tiran

# logging
**/*logging*                  @vsajip

# venv
**/*venv*                     @vsajip

# Launcher
/PC/launcher.c                @vsajip

# HTML
/Lib/html/                    @ezio-melotti
/Lib/_markupbase.py           @ezio-melotti
/Lib/test/test_html*.py       @ezio-melotti

# Import (including importlib).
# Ignoring importlib.h so as to not get flagged on
# all pull requests that change the emitted
# bytecode.
**/*import*.c                 @brettcannon @encukou @ericsnowcurrently @ncoghlan @warsaw
**/*import*.py                @brettcannon @encukou @ericsnowcurrently @ncoghlan @warsaw


# SSL
**/*ssl*                      @python/crypto-team @tiran
**/*.pem                      @python/crypto-team @tiran

# CSPRNG
Python/bootstrap_hash.c       @python/crypto-team @tiran

# Dates and times
**/*datetime*                 @pganssle @abalkin
**/*str*time*                 @pganssle @abalkin
Doc/library/time.rst          @pganssle @abalkin
Lib/test/test_time.py         @pganssle @abalkin
Modules/timemodule.c          @pganssle @abalkin
Python/pytime.c               @pganssle @abalkin
Include/pytime.h              @pganssle @abalkin

# Email and related
**/*mail*                     @python/email-team
**/*smtp*                     @python/email-team
**/*mime*                     @python/email-team
**/*imap*                     @python/email-team
**/*poplib*                   @python/email-team

# Garbage collector
/Modules/gcmodule.c           @pablogsal
/Doc/library/gc.rst           @pablogsal

# Parser
/Parser/                      @pablogsal @lysnikolaou
/Tools/peg_generator/         @pablogsal @lysnikolaou
/Lib/test/test_peg_generator/ @pablogsal @lysnikolaou
/Grammar/python.gram          @pablogsal @lysnikolaou

# AST
Python/ast.c                  @isidentical
Parser/asdl.py                @isidentical
Parser/asdl_c.py              @isidentical
Lib/ast.py                    @isidentical

# Mock
/Lib/unittest/mock.py         @cjw296
/Lib/unittest/test/testmock/* @cjw296

# SQLite 3
**/*sqlite*                   @berkerpeksag

# subprocess
/Lib/subprocess.py            @gpshead
/Lib/test/test_subprocess.py  @gpshead
/Modules/*subprocess*         @gpshead

# Windows
/PC/                          @python/windows-team
/PCbuild/                     @python/windows-team

# Urllib
**/*robotparser*              @berkerpeksag

# Windows installer packages
/Tools/msi/                   @python/windows-team
/Tools/nuget/                 @python/windows-team

# Misc
**/*itertools*                @rhettinger
**/*collections*              @rhettinger
**/*random*                   @rhettinger
**/*queue*                    @rhettinger
**/*bisect*                   @rhettinger
**/*heapq*                    @rhettinger
**/*functools*                @rhettinger
**/*decimal*                  @rhettinger @skrah

**/*dataclasses*              @ericvsmith

**/*idlelib*                  @terryjreedy

**/*typing*                   @gvanrossum @Fidget-Spinner

**/*asyncore                  @giampaolo
**/*asynchat                  @giampaolo
**/*ftplib                    @giampaolo
**/*shutil                    @giampaolo

**/*enum*                     @ethanfurman
**/*cgi*                      @ethanfurman
**/*tarfile*                  @ethanfurman

# macOS
/Mac/                         @python/macos-team
**/*osx_support*              @python/macos-team


================================================
FILE: .github/CONTRIBUTING.rst
================================================
Contributing to Python
======================

Build Status
------------

- master

  + `Stable buildbots <http://buildbot.python.org/3.x.stable/>`_

- 3.9

  + `Stable buildbots <http://buildbot.python.org/3.9.stable/>`_

- 3.8

  + `Stable buildbots <http://buildbot.python.org/3.8.stable/>`_

- 3.7

  + `Stable buildbots <http://buildbot.python.org/3.7.stable/>`_


Thank You
---------
First off, thanks for contributing to the maintenance of the Python programming
language and the CPython interpreter! Even if your contribution is not
ultimately accepted, the fact you put time and effort into helping out is
greatly appreciated.


Contribution Guidelines
-----------------------
Please read the `devguide <https://devguide.python.org/>`_ for
guidance on how to contribute to this project. The documentation covers
everything from how to build the code to submitting a pull request. There are
also suggestions on how you can most effectively help the project.

Please be aware that our workflow does deviate slightly from the typical GitHub
project. Details on how to properly submit a pull request are covered in
`Lifecycle of a Pull Request <https://devguide.python.org/pullrequest/>`_.
We utilize various bots and status checks to help with this, so do follow the
comments they leave and their "Details" links, respectively. The key points of
our workflow that are not covered by a bot or status check are:

- All discussions that are not directly related to the code in the pull request
  should happen on bugs.python.org
- Upon your first non-trivial pull request (which includes documentation changes),
  feel free to add yourself to ``Misc/ACKS``


Setting Expectations
--------------------
Due to the fact that this project is entirely volunteer-run (i.e. no one is paid
to work on Python full-time), we unfortunately can make no guarantees as to if
or when a core developer will get around to reviewing your pull request.
If no core developer has done a review or responded to changes made because of a
"changes requested" review, please feel free to email python-dev to ask if
someone could take a look at your pull request.


Code of Conduct
---------------
All interactions for this project are covered by the
`PSF Code of Conduct <https://www.python.org/psf/codeofconduct/>`_. Everyone is
expected to be open, considerate, and respectful of others no matter their
position within the project.


================================================
FILE: .github/FUNDING.yml
================================================
custom: https://www.python.org/psf/donations/python-dev/
github: [python]


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thanks for your contribution!
Please read this comment in its entirety. It's quite important.

# Pull Request title

It should be in the following format:

```
bpo-NNNN: Summary of the changes made
```

Where: bpo-NNNN refers to the issue number in the https://bugs.python.org.

Most PRs will require an issue number. Trivial changes, like fixing a typo, do not need an issue.

# Backport Pull Request title

If this is a backport PR (PR made against branches other than `master`),
please ensure that the PR title is in the following format:

```
[X.Y] <title from the original PR> (GH-NNNN)
```

Where: [X.Y] is the branch name, e.g. [3.6].

GH-NNNN refers to the PR number from `master`.

-->


================================================
FILE: .github/SECURITY.md
================================================
# Security Policy

## Supported Versions

The Python team applies security fixes according to the table
in [the devguide](
https://devguide.python.org/#status-of-python-branches
).

## Reporting a Vulnerability

Please read the guidelines on reporting security issues [on the
official website](https://www.python.org/dev/security/) for
instructions on how to report a security-related problem to
the Python team responsibly.

To reach the response team, email `security at python dot org`. 


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "monthly"
    labels:
      - "skip issue"
      - "skip news"


================================================
FILE: .github/problem-matchers/gcc.json
================================================
{
    "__comment": "Taken from vscode-cpptools's Extension/package.json gcc rule",
    "problemMatcher": [
        {
            "owner": "gcc-problem-matcher",
            "pattern": [
                {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            ]
        }
    ]
}

================================================
FILE: .github/problem-matchers/msvc.json
================================================
{
    "__comment": "Taken from vscode's vs/workbench/contrib/tasks/common/problemMatcher.ts msCompile rule",
    "problemMatcher": [
      {
        "owner": "msvc-problem-matcher",
        "pattern": [
          {
            "regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+),?(\\d+)?(?:,\\d+,\\d+)?\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "code": 5,
            "message": 6
          }
        ]
      }
    ]
  }

================================================
FILE: .github/problem-matchers/sphinx.json
================================================
{
    "problemMatcher": [
        {
            "owner": "sphinx-problem-matcher",
            "pattern": [
                {
                    "regexp": "^(.*):(\\d+):\\s+(\\w*):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "severity": 3,
                    "message": 4
                }
            ]
        },
        {
            "owner": "sphinx-problem-matcher-loose",
            "pattern": [
                {
                    "_comment": "A bit of a looser pattern, doesn't look for line numbers, just looks for file names relying on them to start with / and end with .rst",
                    "regexp": "(\/.*\\.rst):\\s+(\\w*):\\s+(.*)$",
                    "file": 1,
                    "severity": 2,
                    "message": 3
                }
            ]
        },
        {
            "owner": "sphinx-problem-matcher-loose-no-severity",
            "pattern": [
                {
                    "_comment": "Looks for file names ending with .rst and line numbers but without severity",
                    "regexp": "^(.*\\.rst):(\\d+):(.*)$",
                    "file": 1,
                    "line": 2,
                    "message": 3
                }
            ]           
        }
    ]
}

================================================
FILE: .github/workflows/build.yml
================================================
name: Tests

# bpo-40548: "paths-ignore" is not used to skip documentation-only PRs, because
# it prevents to mark a job as mandatory. A PR cannot be merged if a job is
# mandatory but not scheduled because of "paths-ignore".
on:
  push:
    branches:
    - master
    - 3.10
    - 3.9
    - 3.8
    - 3.7
  pull_request:
    branches:
    - master
    - 3.10
    - 3.9
    - 3.8
    - 3.7

jobs:
  check_source:
    name: 'Check for source changes'
    runs-on: ubuntu-latest
    outputs:
      run_tests: ${{ steps.check.outputs.run_tests }}
      run_ssl_tests: ${{ steps.check.outputs.run_ssl_tests }}
    steps:
      - uses: actions/checkout@v2
      - name: Check for source changes
        id: check
        run: |
          if [ -z "$GITHUB_BASE_REF" ]; then
            echo '::set-output name=run_tests::true'
            echo '::set-output name=run_ssl_tests::true'
          else
            git fetch origin $GITHUB_BASE_REF --depth=1
            # git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more
            # reliable than git diff "origin/$GITHUB_BASE_REF.." (2 dots),
            # but it requires to download more commits (this job uses
            # "git fetch --depth=1").
            #
            # git diff "origin/$GITHUB_BASE_REF..." (3 dots) works with Git
            # 2.26, but Git 2.28 is stricter and fails with "no merge base".
            #
            # git diff "origin/$GITHUB_BASE_REF.." (2 dots) should be enough on
            # GitHub, since GitHub starts by merging origin/$GITHUB_BASE_REF
            # into the PR branch anyway.
            #
            # https://github.com/python/core-workflow/issues/373
            git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true
            git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE '(ssl|hashlib|hmac|^.github)' && echo '::set-output name=run_ssl_tests::true' || true
          fi

  check_abi:
    name: 'Check if the ABI has changed'
    runs-on: ubuntu-20.04
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
      - name: Install Dependencies
        run: |
            sudo ./.github/workflows/posix-deps-apt.sh
            sudo apt-get install -yq abigail-tools
      - name: Build CPython
        env:
          CFLAGS: -g3 -O0
        run: |
          # Build Python with the libpython dynamic library
          ./configure --enable-shared
          make -j4
      - name: Check for changes in the ABI
        run: make check-abidump

  check_generated_files:
    name: 'Check if generated files are up to date'
    runs-on: ubuntu-latest
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v2
      - name: Install Dependencies
        run: sudo ./.github/workflows/posix-deps-apt.sh
      - name: Add ccache to PATH
        run: echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
      - name: Configure ccache action
        uses: hendrikmuhs/ccache-action@v1
      - name: Check Autoconf version 2.69 and aclocal 1.16.3
        run: |
          grep "Generated by GNU Autoconf 2.69" configure
          grep "aclocal 1.16.3" aclocal.m4
          grep -q "runstatedir" configure
          grep -q "PKG_PROG_PKG_CONFIG" aclocal.m4
      - name: Regenerate autoconf files
        run: docker run --rm -v $(pwd):/src quay.io/tiran/cpython_autoconf:269
      - name: Build CPython
        run: |
          # Build Python with the libpython dynamic library
          ./configure --with-pydebug --enable-shared
          make -j4 regen-all
          make regen-stdlib-module-names
      - name: Check for changes
        run: |
          changes=$(git status --porcelain)
          # Check for changes in regenerated files
          if test -n "$changes"; then
            echo "Generated files not up to date."
            echo "Perhaps you forgot to run make regen-all or build.bat --regen. ;)"
            echo "configure files must be regenerated with a specific, unpatched version of autoconf."
            echo "$changes"
            exit 1
          fi
      - name: Check exported libpython symbols
        run: make smelly
      - name: Check limited ABI symbols
        run: make check-limited-abi

  build_win32:
    name: 'Windows (x86)'
    runs-on: windows-latest
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    env:
       IncludeUwp: 'true'
    steps:
    - uses: actions/checkout@v2
    - name: Build CPython
      run: .\PCbuild\build.bat -e -p Win32
    - name: Display build info
      run: .\python.bat -m test.pythoninfo
    - name: Tests
      run: .\PCbuild\rt.bat -p Win32 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0

  build_win_amd64:
    name: 'Windows (x64)'
    runs-on: windows-latest
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    env:
       IncludeUwp: 'true'
    steps:
    - uses: actions/checkout@v2
    - name: Register MSVC problem matcher
      run: echo "::add-matcher::.github/problem-matchers/msvc.json"
    - name: Build CPython
      run: .\PCbuild\build.bat -e -p x64
    - name: Display build info
      run: .\python.bat -m test.pythoninfo
    - name: Tests
      run: .\PCbuild\rt.bat -p x64 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0

  build_macos:
    name: 'macOS'
    runs-on: macos-latest
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    env:
      PYTHONSTRICTEXTENSIONBUILD: 1
    steps:
    - uses: actions/checkout@v2
    - name: Prepare homebrew environment variables
      run: |
        echo "LDFLAGS=-L$(brew --prefix tcl-tk)/lib" >> $GITHUB_ENV
        echo "PKG_CONFIG_PATH=$(brew --prefix openssl@1.1)/lib/pkgconfig:$(brew --prefix tcl-tk)/lib/pkgconfig" >> $GITHUB_ENV
    - name: Configure CPython
      run: ./configure --with-pydebug --prefix=/opt/python-dev
    - name: Build CPython
      run: make -j4
    - name: Display build info
      run: make pythoninfo
    - name: Tests
      run: make buildbottest TESTOPTS="-j4 -uall,-cpu"

  build_ubuntu:
    name: 'Ubuntu'
    runs-on: ubuntu-20.04
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true'
    env:
      OPENSSL_VER: 1.1.1l
      PYTHONSTRICTEXTENSIONBUILD: 1
    steps:
    - uses: actions/checkout@v2
    - name: Register gcc problem matcher
      run: echo "::add-matcher::.github/problem-matchers/gcc.json"
    - name: Install Dependencies
      run: sudo ./.github/workflows/posix-deps-apt.sh
    - name: Configure OpenSSL env vars
      run: |
        echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV
        echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV
        echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV
    - name: 'Restore OpenSSL build'
      id: cache-openssl
      uses: actions/cache@v2.1.4
      with:
        path: ./multissl/openssl/${{ env.OPENSSL_VER }}
        key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
    - name: Install OpenSSL
      if: steps.cache-openssl.outputs.cache-hit != 'true'
      run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux
    - name: Add ccache to PATH
      run: |
        echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
    - name: Configure ccache action
      uses: hendrikmuhs/ccache-action@v1
    - name: Configure CPython
      run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR
    - name: Build CPython
      run: make -j4
    - name: Display build info
      run: make pythoninfo
    - name: Tests
      run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"

  build_ubuntu_ssltests:
    name: 'Ubuntu SSL tests with OpenSSL'
    runs-on: ubuntu-20.04
    needs: check_source
    if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true'
    strategy:
      fail-fast: false
      matrix:
        openssl_ver: [1.1.1l, 3.0.0]
    env:
      OPENSSL_VER: ${{ matrix.openssl_ver }}
      MULTISSL_DIR: ${{ github.workspace }}/multissl
      OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}
      LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib
    steps:
    - uses: actions/checkout@v2
    - name: Register gcc problem matcher
      run: echo "::add-matcher::.github/problem-matchers/gcc.json"
    - name: Install Dependencies
      run: sudo ./.github/workflows/posix-deps-apt.sh
    - name: Configure OpenSSL env vars
      run: |
        echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV
        echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV
        echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV
    - name: 'Restore OpenSSL build'
      id: cache-openssl
      uses: actions/cache@v2.1.4
      with:
        path: ./multissl/openssl/${{ env.OPENSSL_VER }}
        key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
    - name: Install OpenSSL
      if: steps.cache-openssl.outputs.cache-hit != 'true'
      run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux
    - name: Add ccache to PATH
      run: |
        echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
    - name: Configure ccache action
      uses: hendrikmuhs/ccache-action@v1
    - name: Configure CPython
      run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR
    - name: Build CPython
      run: make -j4
    - name: Display build info
      run: make pythoninfo
    - name: SSL tests
      run: ./python Lib/test/ssltests.py


================================================
FILE: .github/workflows/build_msi.yml
================================================
name: TestsMSI

on:
  push:
    branches:
    - master
    - 3.10
    - 3.9
    - 3.8
    - 3.7
    paths:
    - 'Tools/msi/**'
  pull_request:
    branches:
    - master
    - 3.10
    - 3.9
    - 3.8
    - 3.7
    paths:
    - 'Tools/msi/**'

jobs:
  build_win32:
    name: 'Windows (x86) Installer'
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build CPython installer
      run: .\Tools\msi\build.bat -x86

  build_win_amd64:
    name: 'Windows (x64) Installer'
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build CPython installer
      run: .\Tools\msi\build.bat -x64


================================================
FILE: .github/workflows/doc.yml
================================================
name: Docs

on:
  #push:
  #  branches:
  #  - master
  #  - 3.9
  #  - 3.8
  #  - 3.7
  #  paths:
  #  - 'Doc/**'
  pull_request:
    branches:
    - master
    - 3.10
    - 3.9
    - 3.8
    - 3.7
    paths:
    - 'Doc/**'
    - 'Misc/**'

jobs:
  build_doc:
    name: 'Docs'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Register Sphinx problem matcher
      run: echo "::add-matcher::.github/problem-matchers/sphinx.json"
    - name: 'Install Dependencies'
      run: sudo ./.github/workflows/posix-deps-apt.sh && sudo apt-get install wamerican
    - name: 'Configure CPython'
      run: ./configure --with-pydebug
    - name: 'Build CPython'
      run: make -j4
    - name: 'Install build dependencies'
      run: make -C Doc/ PYTHON=../python venv
    - name: 'Build documentation'
      run: xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W --keep-going -j4" doctest html suspicious
    - name: 'Upload'
      uses: actions/upload-artifact@v2.2.2
      with:
        name: doc-html
        path: Doc/build/html


================================================
FILE: .github/workflows/posix-deps-apt.sh
================================================
#!/bin/sh
apt-get update

apt-get -yq install \
    build-essential \
    ccache \
    gdb \
    lcov \
    libbz2-dev \
    libffi-dev \
    libgdbm-dev \
    libgdbm-compat-dev \
    liblzma-dev \
    libncurses5-dev \
    libreadline6-dev \
    libsqlite3-dev \
    libssl-dev \
    lzma \
    lzma-dev \
    tk-dev \
    uuid-dev \
    xvfb \
    zlib1g-dev


================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale pull requests

on:
  schedule:
  - cron: "0 0 * * *"

permissions:
  pull-requests: write

jobs:
  stale:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/stale@v3
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-pr-message: 'This PR is stale because it has been open for 30 days with no activity.'
        stale-pr-label: 'stale'
        days-before-stale: 30
        days-before-close: -1


================================================
FILE: .gitignore
================================================
#####
# First, rules intended to apply in all subdirectories.
# These contain no slash, or only a trailing slash.

*.cover
*.iml
*.o
*.a
*.so
*.so.*
*.dylib
*.dll
*.orig
*.pyc
*.pyd
*.pyo
*.rej
*.swp
*~
*.gc??
*.profclang?
*.profraw
*.dyn
.gdb_history
.purify
__pycache__
.hg/
.svn/
.idea/
tags
TAGS
.vs/
.vscode/
gmon.out
.coverage
.mypy_cache/
.pytest_cache/
.DS_Store

*.exe
!Lib/distutils/command/*.exe

# Ignore core dumps... but not Tools/msi/core/ or the like.
core
!core/


#####
# Then, rules meant for a specific location relative to the repo root.
# These must contain a non-trailing slash (and may also have a trailing slash.)

Doc/build/
Doc/venv/
Doc/.venv/
Doc/env/
Doc/.env/
Include/pydtrace_probes.h
Lib/distutils/command/*.pdb
Lib/lib2to3/*.pickle
Lib/test/data/*
!Lib/test/data/README
/Makefile
/Makefile.pre
Mac/Makefile
Mac/PythonLauncher/Info.plist
Mac/PythonLauncher/Makefile
Mac/PythonLauncher/Python Launcher
Mac/PythonLauncher/Python Launcher.app/*
Mac/Resources/app/Info.plist
Mac/Resources/framework/Info.plist
Mac/pythonw
/*.framework/
Misc/python.pc
Misc/python-embed.pc
Misc/python-config.sh
Modules/Setup.config
Modules/Setup.local
Modules/config.c
Modules/ld_so_aix
Programs/_freeze_importlib
Programs/_testembed
PC/python_nt*.h
PC/pythonnt_rc*.h
Modules/python.exp
PC/*/*.exp
PC/*/*.lib
PC/*/*.bsc
PC/*/*.dll
PC/*/*.pdb
PC/*/*.user
PC/*/*.ncb
PC/*/*.suo
PC/*/Win32-temp-*
PC/*/x64-temp-*
PC/*/amd64
PCbuild/*.user
PCbuild/*.suo
PCbuild/*.*sdf
PCbuild/*-pgi
PCbuild/*-pgo
PCbuild/*.VC.db
PCbuild/*.VC.opendb
PCbuild/amd64/
PCbuild/arm32/
PCbuild/arm64/
PCbuild/obj/
PCbuild/win32/
Tools/unicode/data/
/autom4te.cache
/build/
/config.cache
/config.log
/config.status
/config.status.lineno
# hendrikmuhs/ccache-action@v1
/.ccache
/platform
/profile-clean-stamp
/profile-run-stamp
/pybuilddir.txt
/pyconfig.h
/python-config
/python-config.py
/python.bat
/python-gdb.py
/python.exe-gdb.py
/reflog.txt
/coverage/
/externals/
/htmlcov/
Tools/msi/obj
Tools/ssl/amd64
Tools/ssl/win32

# Two-trick pony for OSX and other case insensitive file systems:
# Ignore ./python binary on Unix but still look into ./Python/ directory.
/python
!/Python/

# Artifacts generated by 3.11 lying around when switching branches:
/_bootstrap_python
/Programs/_freeze_module
/Python/deepfreeze/
/Python/frozen_modules/

================================================
FILE: .travis.yml
================================================
language: c
dist: bionic

# To cache doc-building dependencies and C compiler output.
cache:
  - pip
  - ccache
  - directories:
    - $HOME/multissl

env:
  global:
    - OPENSSL=1.1.1k
    - OPENSSL_DIR="$HOME/multissl/openssl/${OPENSSL}"
    - PATH="${OPENSSL_DIR}/bin:$PATH"
    - CFLAGS="-I${OPENSSL_DIR}/include"
    - LDFLAGS="-L${OPENSSL_DIR}/lib"
    # Set rpath with env var instead of -Wl,-rpath linker flag
    # OpenSSL ignores LDFLAGS when linking bin/openssl
    - LD_RUN_PATH="${OPENSSL_DIR}/lib"
    - PYTHONSTRICTEXTENSIONBUILD=1

branches:
  only:
    - master
    - /^\d\.\d+$/
    - buildbot-custom

matrix:
  fast_finish: true
  allow_failures:
    - env: OPTIONAL=true
  include:
    - name: "CPython tests"
      os: linux
      language: c
      compiler: clang
      # gcc also works, but to keep the # of concurrent builds down, we use one C
      # compiler here and the other to run the coverage build. Clang is preferred
      # in this instance for its better error messages.
      env: TESTING=cpython
      addons:
        apt:
          packages:
            - gdb
            - xvfb
    - name: "Documentation build"
      os: linux
      language: python
      # Build the docs against a stable version of Python so code bugs don't hold up doc-related PRs.
      python: 3.6
      env: TESTING=docs
      before_script:
        - cd Doc
        - make venv PYTHON=python
      script:
        - make check html suspicious SPHINXOPTS="-q -W -j4"
    - name: "Documentation tests"
      os: linux
      language: c
      compiler: clang
      env: TESTING=doctest
      addons:
        apt:
          packages:
            - xvfb
      before_script:
        - ./configure
        - make -j4
        - make -C Doc/ PYTHON=../python venv
      script:
        xvfb-run make -C Doc/ PYTHON=../python SPHINXOPTS="-q -W -j4" doctest


before_install:
  - set -e
  - |
      # Check short-circuit conditions
      if [[ "${TESTING}" != "docs" && "${TESTING}" != "doctest" ]]
      then
        if [[ "$TRAVIS_PULL_REQUEST" == "false" ]]
        then
          echo "Not a PR, doing full build."
        else
          # Pull requests are slightly complicated because $TRAVIS_COMMIT_RANGE
          # may include more changes than desired if the history is convoluted.
          # Instead, explicitly fetch the base branch and compare against the
          # merge-base commit.
          git fetch -q origin +refs/heads/$TRAVIS_BRANCH
          changes=$(git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD))
          echo "Files changed:"
          echo "$changes"
          if ! echo "$changes" | grep -qvE '(\.rst$)|(^Doc)|(^Misc)'
          then
            echo "Only docs were updated, stopping build process."
            exit
          fi
        fi
      fi

install:
  - |
      # Install OpenSSL as necessary
      # Note: doctest needs OpenSSL
      if [[ "${TESTING}" != "docs" ]]
      then
        # clang complains about unused-parameter a lot, redirect stderr
        python3 Tools/ssl/multissltests.py --steps=library \
            --base-directory ${HOME}/multissl \
            --openssl ${OPENSSL} >/dev/null 2>&1
      fi
  - openssl version

# Travis provides only 2 cores, so don't overdo the parallelism and waste memory.
before_script:
  # -Og is much faster than -O0
  - CFLAGS="${CFLAGS} -Og" ./configure --with-pydebug
  - eval "$(pyenv init -)"
  - pyenv global 3.8
  - PYTHON_FOR_REGEN=python3.8 make -j4 regen-all
  - make regen-stdlib-module-names
  - changes=`git status --porcelain`
  - |
      # Check for changes in regenerated files
      if ! test -z "$changes"
      then
        echo "Generated files not up to date"
        echo "$changes"
        exit 1
      fi
  - make -j4
  - make pythoninfo

script:
  # Using the built Python as patchcheck.py is built around the idea of using
  # a checkout-build of CPython to know things like what base branch the changes
  # should be compared against.
  # Only run on Linux as the check only needs to be run once.
  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./python Tools/scripts/patchcheck.py --travis $TRAVIS_PULL_REQUEST; fi
  # Check that all symbols exported by libpython start with "Py" or "_Py"
  - make smelly
  # Check that all symbols in the limited abi are present
  - make check-limited-abi
  # `-r -w` implicitly provided through `make buildbottest`.
  - |
    if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
      XVFB_RUN=xvfb-run;
    fi
    $XVFB_RUN make buildbottest TESTOPTS="-j4 -uall,-cpu"
notifications:
  email: false
  irc:
    channels:
      # This is set to a secure variable to prevent forks from notifying the
      # IRC channel whenever they fail a build. This can be removed when travis
      # implements https://github.com/travis-ci/travis-ci/issues/1094.
      # The actual value here is: irc.freenode.net#python-dev
      - secure: "s7kAkpcom2yUJ8XqyjFI0obJmhAGrn1xmoivdaPdgBIA++X47TBp1x4pgDsbEsoalef7bEwa4l07KdT4qa+DOd/c4QxaWom7fbN3BuLVsZuVfODnl79+gYq/TAbGfyH+yDs18DXrUfPgwD7C5aW32ugsqAOd4iWzfGJQ5OrOZzqzGjYdYQUEkJFXgxDEIb4aHvxNDWGO3Po9uKISrhb5saQ0l776yLo1Ur7M4oxl8RTbCdgX0vf5TzPg52BgvZpOgt3DHOUYPeiJLKNjAE6ibg0U95sEvMfHX77nz4aFY4/3UI6FFaRla34rZ+mYKrn0TdxOhera1QOgPmM6HzdO4K44FpfK1DS0Xxk9U9/uApq+cG0bU3W+cVUHDBe5+90lpRBAXHeHCgT7TI8gec614aiT8lEr3+yH8OBRYGzkjNK8E2LJZ/SxnVxDe7aLF6AWcoWLfS6/ziAIBFQ5Nc4U72CT8fGVSkl8ywPiRlvixKdvTODMSZo0jMqlfZSNaAPTsNRx4wu5Uis4qekwe32Fz4aB6KGpsuuVjBi+H6v0RKxNJNGY3JKDiEH2TK0UE2auJ5GvLW48aUVFcQMB7euCWYXlSWVRHh3WLU8QXF29Dw4JduRZqUpOdRgMHU79UHRq+mkE0jAS/nBcS6CvsmxCpTSrfVYuMOu32yt18QQoTyU="
    on_success: change
    on_failure: always
    skip_join: true
  webhooks:
    urls:
      # For the same reasons as above for IRC, we encrypt the webhook address
      # for Zulip.  The actual value is:
      # https://python.zulipchat.com/api/v1/external/travis?api_key=<api-key-redacted>&stream=core%2Ftest+runs
      - secure: "vLz2TodSL7wQ8DsIu86koRS9i4dsK40PH8+wzY93PBCCAzJAz113LTxK3/9PamMv+ObDRUSe5OpXcquE3d5Gwpu8IymF113qK0I3uNr+O3FtmKlj/Kd1P/V+z4pTpS3zh3lW9gyKV9EMWXIWS0IYKKZQU144XqUlIiucWK2jHJF/cSz2cRAx/6Kx68X4mZwEC7hiMOF4ZsWUMbCglM89ybeS0pr0kK9mmh88qsPyRQov3mRKswmVPlePk7clVLNAL43qSe3SzmrmACZfQ9KJYmpYnr/cjo2b6svYHcQBAwAUarZZ9KBMXeV7HwGWsSXAvHH2ynR0P++braBHGEMTGMSitdVWzFTmeiHnrkp08WAB+uFs54iEx3VklTk9bCzozTm2S94TRxbrsG9SypMvQxG570JV6P2XYuR+taCb/GMtMqrtGQm2e1Ht+nDLtiUb+/+rwEbicJJ13knptOQZI4tPOZESI/kXkORkSNwFfLSNLSl9jTlMmO7KjAAPApURHEdx26RbItAn8mIX2NcHTRjKn2qV4h3C54nmHmKWn/ZudHHJc6ieZSEUBoaLGAYmcWJRqrM6jiy2h9I9TRrCKAiGh5jT47FYKLwosTtV245l/ZhDb6eTVfEFT6TSLEoyfx9cCtTUvfMtXYl8eN9wlFYYpH8MSWbMD14eEkKBTWg="
    on_success: change
    on_failure: always


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct

Please note that all interactions on
[Python Software Foundation](https://www.python.org/psf-landing/)-supported
infrastructure is [covered](https://www.python.org/psf/records/board/minutes/2014-01-06/#management-of-the-psfs-web-properties)
by the [PSF Code of Conduct](https://www.python.org/psf/codeofconduct/),
which includes all the infrastructure used in the development of Python itself
(e.g. mailing lists, issue trackers, GitHub, etc.).

In general, this means that everyone is expected to be **open**, **considerate**, and
**respectful** of others no matter what their position is within the project.



================================================
FILE: Doc/Makefile
================================================
#
# Makefile for Python documentation
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#

# You can set these variables from the command line.
PYTHON       = python3
VENVDIR      = ./venv
SPHINXBUILD  = PATH=$(VENVDIR)/bin:$$PATH sphinx-build
BLURB        = PATH=$(VENVDIR)/bin:$$PATH blurb
PAPER        =
SOURCES      =
DISTVERSION  = $(shell $(PYTHON) tools/extensions/patchlevel.py)
SPHINXERRORHANDLING = -W

# Internal variables.
PAPEROPT_a4     = -D latex_elements.papersize=a4paper
PAPEROPT_letter = -D latex_elements.papersize=letterpaper

ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees $(PAPEROPT_$(PAPER)) \
                $(SPHINXOPTS) $(SPHINXERRORHANDLING) . build/$(BUILDER) $(SOURCES)

.PHONY: help build html htmlhelp latex text texinfo changes linkcheck \
	suspicious coverage doctest pydoc-topics htmlview clean dist check serve \
	autobuild-dev autobuild-stable venv

help:
	@echo "Please use \`make <target>' where <target> is one of"
	@echo "  clean      to remove build files"
	@echo "  venv       to create a venv with necessary tools"
	@echo "  html       to make standalone HTML files"
	@echo "  htmlview   to open the index page built by the html target in your browser"
	@echo "  htmlhelp   to make HTML files and a HTML help project"
	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
	@echo "  text       to make plain text files"
	@echo "  texinfo    to make Texinfo file"
	@echo "  epub       to make EPUB files"
	@echo "  changes    to make an overview over all changed/added/deprecated items"
	@echo "  linkcheck  to check all external links for integrity"
	@echo "  coverage   to check documentation coverage for library and C API"
	@echo "  doctest    to run doctests in the documentation"
	@echo "  pydoc-topics  to regenerate the pydoc topics file"
	@echo "  dist       to create a \"dist\" directory with archived docs for download"
	@echo "  suspicious to check for suspicious markup in output text"
	@echo "  check      to run a check for frequent markup errors"
	@echo "  serve      to serve the documentation on the localhost (8000)"

build:
	-mkdir -p build
# Look first for a Misc/NEWS file (building from a source release tarball
# or old repo) and use that, otherwise look for a Misc/NEWS.d directory
# (building from a newer repo) and use blurb to generate the NEWS file.
	@if [ -f  ../Misc/NEWS ] ; then \
		echo "Using existing Misc/NEWS file"; \
		cp ../Misc/NEWS build/NEWS; \
	elif $(BLURB) help >/dev/null 2>&1 && $(SPHINXBUILD) --version >/dev/null 2>&1; then \
		if [ -d ../Misc/NEWS.d ]; then \
			echo "Building NEWS from Misc/NEWS.d with blurb"; \
			$(BLURB) merge -f build/NEWS; \
		else \
			echo "Neither Misc/NEWS.d nor Misc/NEWS found; cannot build docs"; \
			exit 1; \
		fi \
	else \
		echo ""; \
		echo "Missing the required blurb or sphinx-build tools."; \
		echo "Please run 'make venv' to install local copies."; \
		echo ""; \
		exit 1; \
	fi
	$(SPHINXBUILD) $(ALLSPHINXOPTS)
	@echo

html: BUILDER = html
html: build
	@echo "Build finished. The HTML pages are in build/html."

htmlhelp: BUILDER = htmlhelp
htmlhelp: build
	@echo "Build finished; now you can run HTML Help Workshop with the" \
	      "build/htmlhelp/pydoc.hhp project file."

latex: BUILDER = latex
latex: build
	@echo "Build finished; the LaTeX files are in build/latex."
	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
	      "run these through (pdf)latex."

text: BUILDER = text
text: build
	@echo "Build finished; the text files are in build/text."

texinfo: BUILDER = texinfo
texinfo: build
	@echo "Build finished; the python.texi file is in build/texinfo."
	@echo "Run \`make info' in that directory to run it through makeinfo."

epub: BUILDER = epub
epub: build
	@echo "Build finished; the epub files are in build/epub."

changes: BUILDER = changes
changes: build
	@echo "The overview file is in build/changes."

linkcheck: BUILDER = linkcheck
linkcheck:
	@$(MAKE) build BUILDER=$(BUILDER) || { \
	echo "Link check complete; look for any errors in the above output" \
	     "or in build/$(BUILDER)/output.txt"; \
	false; }

suspicious: BUILDER = suspicious
suspicious:
	@$(MAKE) build BUILDER=$(BUILDER) || { \
	echo "Suspicious check complete; look for any errors in the above output" \
	     "or in build/$(BUILDER)/suspicious.csv.  If all issues are false" \
	     "positives, append that file to tools/susp-ignored.csv."; \
	false; }

coverage: BUILDER = coverage
coverage: build
	@echo "Coverage finished; see c.txt and python.txt in build/coverage"

doctest: BUILDER = doctest
doctest:
	@$(MAKE) build BUILDER=$(BUILDER) || { \
	echo "Testing of doctests in the sources finished, look at the" \
	     "results in build/doctest/output.txt"; \
	false; }

pydoc-topics: BUILDER = pydoc-topics
pydoc-topics: build
	@echo "Building finished; now run this:" \
	      "cp build/pydoc-topics/topics.py ../Lib/pydoc_data/topics.py"

htmlview: html
	 $(PYTHON) -c "import webbrowser; webbrowser.open('build/html/index.html')"

clean: clean-venv
	-rm -rf build/*

clean-venv:
	rm -rf $(VENVDIR)

venv:
	@if [ -d $(VENVDIR) ] ; then \
		echo "venv already exists."; \
		echo "To recreate it, remove it first with \`make clean-venv'."; \
	else \
		$(PYTHON) -m venv $(VENVDIR); \
		$(VENVDIR)/bin/python3 -m pip install -U pip setuptools; \
		$(VENVDIR)/bin/python3 -m pip install -r requirements.txt; \
		echo "The venv has been created in the $(VENVDIR) directory"; \
	fi

dist:
	rm -rf dist
	mkdir -p dist

	# archive the HTML
	make html
	cp -pPR build/html dist/python-$(DISTVERSION)-docs-html
	tar -C dist -cf dist/python-$(DISTVERSION)-docs-html.tar python-$(DISTVERSION)-docs-html
	bzip2 -9 -k dist/python-$(DISTVERSION)-docs-html.tar
	(cd dist; zip -q -r -9 python-$(DISTVERSION)-docs-html.zip python-$(DISTVERSION)-docs-html)
	rm -r dist/python-$(DISTVERSION)-docs-html
	rm dist/python-$(DISTVERSION)-docs-html.tar

	# archive the text build
	make text
	cp -pPR build/text dist/python-$(DISTVERSION)-docs-text
	tar -C dist -cf dist/python-$(DISTVERSION)-docs-text.tar python-$(DISTVERSION)-docs-text
	bzip2 -9 -k dist/python-$(DISTVERSION)-docs-text.tar
	(cd dist; zip -q -r -9 python-$(DISTVERSION)-docs-text.zip python-$(DISTVERSION)-docs-text)
	rm -r dist/python-$(DISTVERSION)-docs-text
	rm dist/python-$(DISTVERSION)-docs-text.tar

	# archive the A4 latex
	rm -rf build/latex
	make latex PAPER=a4
	-sed -i 's/makeindex/makeindex -q/' build/latex/Makefile
	(cd build/latex; make clean && make all-pdf && make FMT=pdf zip bz2)
	cp build/latex/docs-pdf.zip dist/python-$(DISTVERSION)-docs-pdf-a4.zip
	cp build/latex/docs-pdf.tar.bz2 dist/python-$(DISTVERSION)-docs-pdf-a4.tar.bz2

	# archive the letter latex
	rm -rf build/latex
	make latex PAPER=letter
	-sed -i 's/makeindex/makeindex -q/' build/latex/Makefile
	(cd build/latex; make clean && make all-pdf && make FMT=pdf zip bz2)
	cp build/latex/docs-pdf.zip dist/python-$(DISTVERSION)-docs-pdf-letter.zip
	cp build/latex/docs-pdf.tar.bz2 dist/python-$(DISTVERSION)-docs-pdf-letter.tar.bz2

	# copy the epub build
	rm -rf build/epub
	make epub
	cp -pPR build/epub/Python.epub dist/python-$(DISTVERSION)-docs.epub

	# archive the texinfo build
	rm -rf build/texinfo
	make texinfo
	make info --directory=build/texinfo
	cp -pPR build/texinfo dist/python-$(DISTVERSION)-docs-texinfo
	tar -C dist -cf dist/python-$(DISTVERSION)-docs-texinfo.tar python-$(DISTVERSION)-docs-texinfo
	bzip2 -9 -k dist/python-$(DISTVERSION)-docs-texinfo.tar
	(cd dist; zip -q -r -9 python-$(DISTVERSION)-docs-texinfo.zip python-$(DISTVERSION)-docs-texinfo)
	rm -r dist/python-$(DISTVERSION)-docs-texinfo
	rm dist/python-$(DISTVERSION)-docs-texinfo.tar

check:
	$(PYTHON) tools/rstlint.py -i tools -i $(VENVDIR) -i README.rst
	$(PYTHON) tools/rstlint.py ../Misc/NEWS.d/next/

serve:
	$(PYTHON) ../Tools/scripts/serve.py build/html

# Targets for daily automated doc build
# By default, Sphinx only rebuilds pages where the page content has changed.
# This means it doesn't always pick up changes to preferred link targets, etc
# To ensure such changes are picked up, we build the published docs with
# `-E` (to ignore the cached environment) and `-a` (to ignore already existing
# output files)

# for development releases: always build
autobuild-dev:
	make dist SPHINXOPTS='$(SPHINXOPTS) -Ea -A daily=1'

# for quick rebuilds (HTML only)
autobuild-dev-html:
	make html SPHINXOPTS='$(SPHINXOPTS) -Ea -A daily=1'

# for stable releases: only build if not in pre-release stage (alpha, beta)
# release candidate downloads are okay, since the stable tree can be in that stage
autobuild-stable:
	@case $(DISTVERSION) in *[ab]*) \
		echo "Not building; $(DISTVERSION) is not a release version."; \
		exit 1;; \
	esac
	@make autobuild-dev

autobuild-stable-html:
	@case $(DISTVERSION) in *[ab]*) \
		echo "Not building; $(DISTVERSION) is not a release version."; \
		exit 1;; \
	esac
	@make autobuild-dev-html


================================================
FILE: Doc/README.rst
================================================
Python Documentation README
~~~~~~~~~~~~~~~~~~~~~~~~~~~

This directory contains the reStructuredText (reST) sources to the Python
documentation.  You don't need to build them yourself, `prebuilt versions are
available <https://docs.python.org/dev/download.html>`_.

Documentation on authoring Python documentation, including information about
both style and markup, is available in the "`Documenting Python
<https://devguide.python.org/documenting/>`_" chapter of the
developers guide.


Building the docs
=================

The documentation is built with several tools which are not included in this
tree but are maintained separately and are available from
`PyPI <https://pypi.org/>`_.

* `Sphinx <https://pypi.org/project/Sphinx/>`_
* `blurb <https://pypi.org/project/blurb/>`_
* `python-docs-theme <https://pypi.org/project/python-docs-theme/>`_

The easiest way to install these tools is to create a virtual environment and
install the tools into there.

Using make
----------

To get started on UNIX, you can create a virtual environment and build
documentation with the commands::

  make venv
  make html

The virtual environment in the ``venv`` directory will contain all the tools
necessary to build the documentation downloaded and installed from PyPI.
If you'd like to create the virtual environment in a different location,
you can specify it using the ``VENVDIR`` variable.

You can also skip creating the virtual environment altogether, in which case
the Makefile will look for instances of ``sphinxbuild`` and ``blurb``
installed on your process ``PATH`` (configurable with the ``SPHINXBUILD`` and
``BLURB`` variables).

On Windows, we try to emulate the Makefile as closely as possible with a
``make.bat`` file. If you need to specify the Python interpreter to use,
set the PYTHON environment variable.

Available make targets are:

* "clean", which removes all build files and the virtual environment.

* "clean-venv", which removes the virtual environment directory.

* "venv", which creates a virtual environment with all necessary tools
  installed.

* "html", which builds standalone HTML files for offline viewing.

* "htmlview", which re-uses the "html" builder, but then opens the main page
  in your default web browser.

* "htmlhelp", which builds HTML files and a HTML Help project file usable to
  convert them into a single Compiled HTML (.chm) file -- these are popular
  under Microsoft Windows, but very handy on every platform.

  To create the CHM file, you need to run the Microsoft HTML Help Workshop
  over the generated project (.hhp) file.  The make.bat script does this for
  you on Windows.

* "latex", which builds LaTeX source files as input to "pdflatex" to produce
  PDF documents.

* "text", which builds a plain text file for each source file.

* "epub", which builds an EPUB document, suitable to be viewed on e-book
  readers.

* "linkcheck", which checks all external references to see whether they are
  broken, redirected or malformed, and outputs this information to stdout as
  well as a plain-text (.txt) file.

* "changes", which builds an overview over all versionadded/versionchanged/
  deprecated items in the current version. This is meant as a help for the
  writer of the "What's New" document.

* "coverage", which builds a coverage overview for standard library modules and
  C API.

* "pydoc-topics", which builds a Python module containing a dictionary with
  plain text documentation for the labels defined in
  `tools/pyspecific.py` -- pydoc needs these to show topic and keyword help.

* "suspicious", which checks the parsed markup for text that looks like
  malformed and thus unconverted reST.

* "check", which checks for frequent markup errors.

* "serve", which serves the build/html directory on port 8000.

* "dist", (Unix only) which creates distributable archives of HTML, text,
  PDF, and EPUB builds.


Without make
------------

First, install the tool dependencies from PyPI.

Then, from the ``Doc`` directory, run ::

   sphinx-build -b<builder> . build/<builder>

where ``<builder>`` is one of html, text, latex, or htmlhelp (for explanations
see the make targets above).

Deprecation header
==================

You can define the ``outdated`` variable in ``html_context`` to show a
red banner on each page redirecting to the "latest" version.

The link points to the same page on ``/3/``, sadly for the moment the
language is lost during the process.


Contributing
============

Bugs in the content should be reported to the
`Python bug tracker <https://bugs.python.org>`_.

Bugs in the toolset should be reported to the tools themselves.

You can also send a mail to the Python Documentation Team at docs@python.org,
and we will process your request as soon as possible.

If you want to help the Documentation Team, you are always welcome.  Just send
a mail to docs@python.org.


================================================
FILE: Doc/about.rst
================================================
=====================
About these documents
=====================


These documents are generated from `reStructuredText`_ sources by `Sphinx`_, a
document processor specifically written for the Python documentation.

.. _reStructuredText: http://docutils.sourceforge.net/rst.html
.. _Sphinx: http://sphinx-doc.org/

.. In the online version of these documents, you can submit comments and suggest
   changes directly on the documentation pages.

Development of the documentation and its toolchain is an entirely volunteer
effort, just like Python itself.  If you want to contribute, please take a
look at the :ref:`reporting-bugs` page for information on how to do so.  New
volunteers are always welcome!

Many thanks go to:

* Fred L. Drake, Jr., the creator of the original Python documentation toolset
  and writer of much of the content;
* the `Docutils <http://docutils.sourceforge.net/>`_ project for creating
  reStructuredText and the Docutils suite;
* Fredrik Lundh for his `Alternative Python Reference
  <http://effbot.org/zone/pyref.htm>`_ project from which Sphinx got many good
  ideas.


Contributors to the Python Documentation
----------------------------------------

Many people have contributed to the Python language, the Python standard
library, and the Python documentation.  See :source:`Misc/ACKS` in the Python
source distribution for a partial list of contributors.

It is only with the input and contributions of the Python community
that Python has such wonderful documentation -- Thank You!


================================================
FILE: Doc/bugs.rst
================================================
.. _reporting-bugs:

*****************
Dealing with Bugs
*****************

Python is a mature programming language which has established a reputation for
stability.  In order to maintain this reputation, the developers would like to
know of any deficiencies you find in Python.

It can be sometimes faster to fix bugs yourself and contribute patches to
Python as it streamlines the process and involves less people. Learn how to
:ref:`contribute <contributing-to-python>`.

Documentation bugs
==================

If you find a bug in this documentation or would like to propose an improvement,
please submit a bug report on the :ref:`tracker <using-the-tracker>`.  If you
have a suggestion on how to fix it, include that as well.

If you're short on time, you can also email documentation bug reports to
docs@python.org (behavioral bugs can be sent to python-list@python.org).
'docs@' is a mailing list run by volunteers; your request will be noticed,
though it may take a while to be processed.

.. seealso::

   `Documentation bugs`_
      A list of documentation bugs that have been submitted to the Python issue tracker.

   `Issue Tracking <https://devguide.python.org/tracker/>`_
      Overview of the process involved in reporting an improvement on the tracker.

   `Helping with Documentation <https://devguide.python.org/docquality/#helping-with-documentation>`_
      Comprehensive guide for individuals that are interested in contributing to Python documentation.

.. _using-the-tracker:

Using the Python issue tracker
==============================

Bug reports for Python itself should be submitted via the Python Bug Tracker
(https://bugs.python.org/).  The bug tracker offers a web form which allows
pertinent information to be entered and submitted to the developers.

The first step in filing a report is to determine whether the problem has
already been reported.  The advantage in doing so, aside from saving the
developers time, is that you learn what has been done to fix it; it may be that
the problem has already been fixed for the next release, or additional
information is needed (in which case you are welcome to provide it if you can!).
To do this, search the bug database using the search box on the top of the page.

If the problem you're reporting is not already in the bug tracker, go back to
the Python Bug Tracker and log in.  If you don't already have a tracker account,
select the "Register" link or, if you use OpenID, one of the OpenID provider
logos in the sidebar.  It is not possible to submit a bug report anonymously.

Being now logged in, you can submit a bug.  Select the "Create New" link in the
sidebar to open the bug reporting form.

The submission form has a number of fields.  For the "Title" field, enter a
*very* short description of the problem; less than ten words is good.  In the
"Type" field, select the type of your problem; also select the "Component" and
"Versions" to which the bug relates.

In the "Comment" field, describe the problem in detail, including what you
expected to happen and what did happen.  Be sure to include whether any
extension modules were involved, and what hardware and software platform you
were using (including version information as appropriate).

Each bug report will be assigned to a developer who will determine what needs to
be done to correct the problem.  You will receive an update each time action is
taken on the bug.


.. seealso::

   `How to Report Bugs Effectively <https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>`_
      Article which goes into some detail about how to create a useful bug report.
      This describes what kind of information is useful and why it is useful.

   `Bug Writing Guidelines <https://bugzilla.mozilla.org/page.cgi?id=bug-writing.html>`_
      Information about writing a good bug report.  Some of this is specific to the
      Mozilla project, but describes general good practices.

.. _contributing-to-python:

Getting started contributing to Python yourself
===============================================

Beyond just reporting bugs that you find, you are also welcome to submit
patches to fix them.  You can find more information on how to get started
patching Python in the `Python Developer's Guide`_.  If you have questions,
the `core-mentorship mailing list`_ is a friendly place to get answers to
any and all questions pertaining to the process of fixing issues in Python.

.. _Documentation bugs: https://bugs.python.org/issue?@filter=status&@filter=components&components=4&status=1&@columns=id,activity,title,status&@sort=-activity
.. _Python Developer's Guide: https://devguide.python.org/
.. _core-mentorship mailing list: https://mail.python.org/mailman3/lists/core-mentorship.python.org/


================================================
FILE: Doc/c-api/abstract.rst
================================================
.. highlight:: c

.. _abstract:

**********************
Abstract Objects Layer
**********************

The functions in this chapter interact with Python objects regardless of their
type, or with wide classes of object types (e.g. all numerical types, or all
sequence types).  When used on object types for which they do not apply, they
will raise a Python exception.

It is not possible to use these functions on objects that are not properly
initialized, such as a list object that has been created by :c:func:`PyList_New`,
but whose items have not been set to some non-\ ``NULL`` value yet.

.. toctree::

   object.rst
   call.rst
   number.rst
   sequence.rst
   mapping.rst
   iter.rst
   buffer.rst
   objbuffer.rst


================================================
FILE: Doc/c-api/allocation.rst
================================================
.. highlight:: c

.. _allocating-objects:

Allocating Objects on the Heap
==============================


.. c:function:: PyObject* _PyObject_New(PyTypeObject *type)


.. c:function:: PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)


.. c:function:: PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)

   Initialize a newly-allocated object *op* with its type and initial
   reference.  Returns the initialized object.  If *type* indicates that the
   object participates in the cyclic garbage detector, it is added to the
   detector's set of observed objects. Other fields of the object are not
   affected.


.. c:function:: PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)

   This does everything :c:func:`PyObject_Init` does, and also initializes the
   length information for a variable-size object.


.. c:function:: TYPE* PyObject_New(TYPE, PyTypeObject *type)

   Allocate a new Python object using the C structure type *TYPE* and the
   Python type object *type*.  Fields not defined by the Python object header
   are not initialized; the object's reference count will be one.  The size of
   the memory allocation is determined from the :c:member:`~PyTypeObject.tp_basicsize` field of
   the type object.


.. c:function:: TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)

   Allocate a new Python object using the C structure type *TYPE* and the
   Python type object *type*.  Fields not defined by the Python object header
   are not initialized.  The allocated memory allows for the *TYPE* structure
   plus *size* fields of the size given by the :c:member:`~PyTypeObject.tp_itemsize` field of
   *type*.  This is useful for implementing objects like tuples, which are
   able to determine their size at construction time.  Embedding the array of
   fields into the same allocation decreases the number of allocations,
   improving the memory management efficiency.


.. c:function:: void PyObject_Del(void *op)

   Releases memory allocated to an object using :c:func:`PyObject_New` or
   :c:func:`PyObject_NewVar`.  This is normally called from the
   :c:member:`~PyTypeObject.tp_dealloc` handler specified in the object's type.  The fields of
   the object should not be accessed after this call as the memory is no
   longer a valid Python object.


.. c:var:: PyObject _Py_NoneStruct

   Object which is visible in Python as ``None``.  This should only be accessed
   using the :c:macro:`Py_None` macro, which evaluates to a pointer to this
   object.


.. seealso::

   :c:func:`PyModule_Create`
      To allocate and create extension modules.



================================================
FILE: Doc/c-api/apiabiversion.rst
================================================
.. highlight:: c

.. _apiabiversion:

***********************
API and ABI Versioning
***********************

CPython exposes its version number in the following macros.
Note that these correspond to the version code is **built** with,
not necessarily the version used at **run time**.

See :ref:`stable` for a discussion of API and ABI stability across versions.

.. c:macro:: PY_MAJOR_VERSION

   The ``3`` in ``3.4.1a2``.

.. c:macro:: PY_MINOR_VERSION

   The ``4`` in ``3.4.1a2``.

.. c:macro:: PY_MICRO_VERSION

   The ``1`` in ``3.4.1a2``.

.. c:macro:: PY_RELEASE_LEVEL

   The ``a`` in ``3.4.1a2``.
   This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release
   candidate or ``0xF`` for final.

.. c:macro:: PY_RELEASE_SERIAL

   The ``2`` in ``3.4.1a2``. Zero for final releases.

.. c:macro:: PY_VERSION_HEX

   The Python version number encoded in a single integer.

   The underlying version information can be found by treating it as a 32 bit
   number in the following manner:

   +-------+-------------------------+-------------------------+--------------------------+
   | Bytes | Bits (big endian order) | Meaning                 | Value for ``3.4.1a2``    |
   +=======+=========================+=========================+==========================+
   |   1   |         1-8             |  ``PY_MAJOR_VERSION``   | ``0x03``                 |
   +-------+-------------------------+-------------------------+--------------------------+
   |   2   |         9-16            |  ``PY_MINOR_VERSION``   | ``0x04``                 |
   +-------+-------------------------+-------------------------+--------------------------+
   |   3   |         17-24           |  ``PY_MICRO_VERSION``   | ``0x01``                 |
   +-------+-------------------------+-------------------------+--------------------------+
   |   4   |         25-28           |  ``PY_RELEASE_LEVEL``   | ``0xA``                  |
   +       +-------------------------+-------------------------+--------------------------+
   |       |         29-32           |  ``PY_RELEASE_SERIAL``  | ``0x2``                  |
   +-------+-------------------------+-------------------------+--------------------------+

   Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is
   hexversion ``0x030a00f0``.


All the given macros are defined in :source:`Include/patchlevel.h`.


================================================
FILE: Doc/c-api/arg.rst
================================================
.. highlight:: c

.. _arg-parsing:

Parsing arguments and building values
=====================================

These functions are useful when creating your own extensions functions and
methods.  Additional information and examples are available in
:ref:`extending-index`.

The first three of these functions described, :c:func:`PyArg_ParseTuple`,
:c:func:`PyArg_ParseTupleAndKeywords`, and :c:func:`PyArg_Parse`, all use *format
strings* which are used to tell the function about the expected arguments.  The
format strings use the same syntax for each of these functions.

-----------------
Parsing arguments
-----------------

A format string consists of zero or more "format units."  A format unit
describes one Python object; it is usually a single character or a parenthesized
sequence of format units.  With a few exceptions, a format unit that is not a
parenthesized sequence normally corresponds to a single address argument to
these functions.  In the following description, the quoted form is the format
unit; the entry in (round) parentheses is the Python object type that matches
the format unit; and the entry in [square] brackets is the type of the C
variable(s) whose address should be passed.

Strings and buffers
-------------------

These formats allow accessing an object as a contiguous chunk of memory.
You don't have to provide raw storage for the returned unicode or bytes
area.

In general, when a format sets a pointer to a buffer, the buffer is
managed by the corresponding Python object, and the buffer shares
the lifetime of this object.  You won't have to release any memory yourself.
The only exceptions are ``es``, ``es#``, ``et`` and ``et#``.

However, when a :c:type:`Py_buffer` structure gets filled, the underlying
buffer is locked so that the caller can subsequently use the buffer even
inside a :c:type:`Py_BEGIN_ALLOW_THREADS` block without the risk of mutable data
being resized or destroyed.  As a result, **you have to call**
:c:func:`PyBuffer_Release` after you have finished processing the data (or
in any early abort case).

Unless otherwise stated, buffers are not NUL-terminated.

Some formats require a read-only :term:`bytes-like object`, and set a
pointer instead of a buffer structure.  They work by checking that
the object's :c:member:`PyBufferProcs.bf_releasebuffer` field is ``NULL``,
which disallows mutable objects such as :class:`bytearray`.

.. note::

   For all ``#`` variants of formats (``s#``, ``y#``, etc.), the macro
   :c:macro:`PY_SSIZE_T_CLEAN` must be defined before including
   :file:`Python.h`. On Python 3.9 and older, the type of the length argument
   is :c:type:`Py_ssize_t` if the :c:macro:`PY_SSIZE_T_CLEAN` macro is defined,
   or int otherwise.


``s`` (:class:`str`) [const char \*]
   Convert a Unicode object to a C pointer to a character string.
   A pointer to an existing string is stored in the character pointer
   variable whose address you pass.  The C string is NUL-terminated.
   The Python string must not contain embedded null code points; if it does,
   a :exc:`ValueError` exception is raised. Unicode objects are converted
   to C strings using ``'utf-8'`` encoding. If this conversion fails, a
   :exc:`UnicodeError` is raised.

   .. note::
      This format does not accept :term:`bytes-like objects
      <bytes-like object>`.  If you want to accept
      filesystem paths and convert them to C character strings, it is
      preferable to use the ``O&`` format with :c:func:`PyUnicode_FSConverter`
      as *converter*.

   .. versionchanged:: 3.5
      Previously, :exc:`TypeError` was raised when embedded null code points
      were encountered in the Python string.

``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer]
   This format accepts Unicode objects as well as bytes-like objects.
   It fills a :c:type:`Py_buffer` structure provided by the caller.
   In this case the resulting C string may contain embedded NUL bytes.
   Unicode objects are converted to C strings using ``'utf-8'`` encoding.

``s#`` (:class:`str`, read-only :term:`bytes-like object`) [const char \*, :c:type:`Py_ssize_t`]
   Like ``s*``, except that it doesn't accept mutable objects.
   The result is stored into two C variables,
   the first one a pointer to a C string, the second one its length.
   The string may contain embedded null bytes. Unicode objects are converted
   to C strings using ``'utf-8'`` encoding.

``z`` (:class:`str` or ``None``) [const char \*]
   Like ``s``, but the Python object may also be ``None``, in which case the C
   pointer is set to ``NULL``.

``z*`` (:class:`str`, :term:`bytes-like object` or ``None``) [Py_buffer]
   Like ``s*``, but the Python object may also be ``None``, in which case the
   ``buf`` member of the :c:type:`Py_buffer` structure is set to ``NULL``.

``z#`` (:class:`str`, read-only :term:`bytes-like object` or ``None``) [const char \*, :c:type:`Py_ssize_t`]
   Like ``s#``, but the Python object may also be ``None``, in which case the C
   pointer is set to ``NULL``.

``y`` (read-only :term:`bytes-like object`) [const char \*]
   This format converts a bytes-like object to a C pointer to a character
   string; it does not accept Unicode objects.  The bytes buffer must not
   contain embedded null bytes; if it does, a :exc:`ValueError`
   exception is raised.

   .. versionchanged:: 3.5
      Previously, :exc:`TypeError` was raised when embedded null bytes were
      encountered in the bytes buffer.

``y*`` (:term:`bytes-like object`) [Py_buffer]
   This variant on ``s*`` doesn't accept Unicode objects, only
   bytes-like objects.  **This is the recommended way to accept
   binary data.**

``y#`` (read-only :term:`bytes-like object`) [const char \*, :c:type:`Py_ssize_t`]
   This variant on ``s#`` doesn't accept Unicode objects, only bytes-like
   objects.

``S`` (:class:`bytes`) [PyBytesObject \*]
   Requires that the Python object is a :class:`bytes` object, without
   attempting any conversion.  Raises :exc:`TypeError` if the object is not
   a bytes object.  The C variable may also be declared as :c:type:`PyObject*`.

``Y`` (:class:`bytearray`) [PyByteArrayObject \*]
   Requires that the Python object is a :class:`bytearray` object, without
   attempting any conversion.  Raises :exc:`TypeError` if the object is not
   a :class:`bytearray` object. The C variable may also be declared as :c:type:`PyObject*`.

``u`` (:class:`str`) [const Py_UNICODE \*]
   Convert a Python Unicode object to a C pointer to a NUL-terminated buffer of
   Unicode characters.  You must pass the address of a :c:type:`Py_UNICODE`
   pointer variable, which will be filled with the pointer to an existing
   Unicode buffer.  Please note that the width of a :c:type:`Py_UNICODE`
   character depends on compilation options (it is either 16 or 32 bits).
   The Python string must not contain embedded null code points; if it does,
   a :exc:`ValueError` exception is raised.

   .. versionchanged:: 3.5
      Previously, :exc:`TypeError` was raised when embedded null code points
      were encountered in the Python string.

   .. deprecated-removed:: 3.3 3.12
      Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using
      :c:func:`PyUnicode_AsWideCharString`.

``u#`` (:class:`str`) [const Py_UNICODE \*, :c:type:`Py_ssize_t`]
   This variant on ``u`` stores into two C variables, the first one a pointer to a
   Unicode data buffer, the second one its length.  This variant allows
   null code points.

   .. deprecated-removed:: 3.3 3.12
      Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using
      :c:func:`PyUnicode_AsWideCharString`.

``Z`` (:class:`str` or ``None``) [const Py_UNICODE \*]
   Like ``u``, but the Python object may also be ``None``, in which case the
   :c:type:`Py_UNICODE` pointer is set to ``NULL``.

   .. deprecated-removed:: 3.3 3.12
      Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using
      :c:func:`PyUnicode_AsWideCharString`.

``Z#`` (:class:`str` or ``None``) [const Py_UNICODE \*, :c:type:`Py_ssize_t`]
   Like ``u#``, but the Python object may also be ``None``, in which case the
   :c:type:`Py_UNICODE` pointer is set to ``NULL``.

   .. deprecated-removed:: 3.3 3.12
      Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using
      :c:func:`PyUnicode_AsWideCharString`.

``U`` (:class:`str`) [PyObject \*]
   Requires that the Python object is a Unicode object, without attempting
   any conversion.  Raises :exc:`TypeError` if the object is not a Unicode
   object.  The C variable may also be declared as :c:type:`PyObject*`.

``w*`` (read-write :term:`bytes-like object`) [Py_buffer]
   This format accepts any object which implements the read-write buffer
   interface. It fills a :c:type:`Py_buffer` structure provided by the caller.
   The buffer may contain embedded null bytes. The caller have to call
   :c:func:`PyBuffer_Release` when it is done with the buffer.

``es`` (:class:`str`) [const char \*encoding, char \*\*buffer]
   This variant on ``s`` is used for encoding Unicode into a character buffer.
   It only works for encoded data without embedded NUL bytes.

   This format requires two arguments.  The first is only used as input, and
   must be a :c:type:`const char*` which points to the name of an encoding as a
   NUL-terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is used.
   An exception is raised if the named encoding is not known to Python.  The
   second argument must be a :c:type:`char**`; the value of the pointer it
   references will be set to a buffer with the contents of the argument text.
   The text will be encoded in the encoding specified by the first argument.

   :c:func:`PyArg_ParseTuple` will allocate a buffer of the needed size, copy the
   encoded data into this buffer and adjust *\*buffer* to reference the newly
   allocated storage.  The caller is responsible for calling :c:func:`PyMem_Free` to
   free the allocated buffer after use.

``et`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char \*encoding, char \*\*buffer]
   Same as ``es`` except that byte string objects are passed through without
   recoding them.  Instead, the implementation assumes that the byte string object uses
   the encoding passed in as parameter.

``es#`` (:class:`str`) [const char \*encoding, char \*\*buffer, :c:type:`Py_ssize_t` \*buffer_length]
   This variant on ``s#`` is used for encoding Unicode into a character buffer.
   Unlike the ``es`` format, this variant allows input data which contains NUL
   characters.

   It requires three arguments.  The first is only used as input, and must be a
   :c:type:`const char*` which points to the name of an encoding as a
   NUL-terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is used.
   An exception is raised if the named encoding is not known to Python.  The
   second argument must be a :c:type:`char**`; the value of the pointer it
   references will be set to a buffer with the contents of the argument text.
   The text will be encoded in the encoding specified by the first argument.
   The third argument must be a pointer to an integer; the referenced integer
   will be set to the number of bytes in the output buffer.

   There are two modes of operation:

   If *\*buffer* points a ``NULL`` pointer, the function will allocate a buffer of
   the needed size, copy the encoded data into this buffer and set *\*buffer* to
   reference the newly allocated storage.  The caller is responsible for calling
   :c:func:`PyMem_Free` to free the allocated buffer after usage.

   If *\*buffer* points to a non-``NULL`` pointer (an already allocated buffer),
   :c:func:`PyArg_ParseTuple` will use this location as the buffer and interpret the
   initial value of *\*buffer_length* as the buffer size.  It will then copy the
   encoded data into the buffer and NUL-terminate it.  If the buffer is not large
   enough, a :exc:`ValueError` will be set.

   In both cases, *\*buffer_length* is set to the length of the encoded data
   without the trailing NUL byte.

``et#`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char \*encoding, char \*\*buffer, :c:type:`Py_ssize_t` \*buffer_length]
   Same as ``es#`` except that byte string objects are passed through without recoding
   them. Instead, the implementation assumes that the byte string object uses the
   encoding passed in as parameter.

Numbers
-------

``b`` (:class:`int`) [unsigned char]
   Convert a nonnegative Python integer to an unsigned tiny int, stored in a C
   :c:type:`unsigned char`.

``B`` (:class:`int`) [unsigned char]
   Convert a Python integer to a tiny int without overflow checking, stored in a C
   :c:type:`unsigned char`.

``h`` (:class:`int`) [short int]
   Convert a Python integer to a C :c:type:`short int`.

``H`` (:class:`int`) [unsigned short int]
   Convert a Python integer to a C :c:type:`unsigned short int`, without overflow
   checking.

``i`` (:class:`int`) [int]
   Convert a Python integer to a plain C :c:type:`int`.

``I`` (:class:`int`) [unsigned int]
   Convert a Python integer to a C :c:type:`unsigned int`, without overflow
   checking.

``l`` (:class:`int`) [long int]
   Convert a Python integer to a C :c:type:`long int`.

``k`` (:class:`int`) [unsigned long]
   Convert a Python integer to a C :c:type:`unsigned long` without
   overflow checking.

``L`` (:class:`int`) [long long]
   Convert a Python integer to a C :c:type:`long long`.

``K`` (:class:`int`) [unsigned long long]
   Convert a Python integer to a C :c:type:`unsigned long long`
   without overflow checking.

``n`` (:class:`int`) [Py_ssize_t]
   Convert a Python integer to a C :c:type:`Py_ssize_t`.

``c`` (:class:`bytes` or :class:`bytearray` of length 1) [char]
   Convert a Python byte, represented as a :class:`bytes` or
   :class:`bytearray` object of length 1, to a C :c:type:`char`.

   .. versionchanged:: 3.3
      Allow :class:`bytearray` objects.

``C`` (:class:`str` of length 1) [int]
   Convert a Python character, represented as a :class:`str` object of
   length 1, to a C :c:type:`int`.

``f`` (:class:`float`) [float]
   Convert a Python floating point number to a C :c:type:`float`.

``d`` (:class:`float`) [double]
   Convert a Python floating point number to a C :c:type:`double`.

``D`` (:class:`complex`) [Py_complex]
   Convert a Python complex number to a C :c:type:`Py_complex` structure.

Other objects
-------------

``O`` (object) [PyObject \*]
   Store a Python object (without any conversion) in a C object pointer.  The C
   program thus receives the actual object that was passed.  The object's reference
   count is not increased.  The pointer stored is not ``NULL``.

``O!`` (object) [*typeobject*, PyObject \*]
   Store a Python object in a C object pointer.  This is similar to ``O``, but
   takes two C arguments: the first is the address of a Python type object, the
   second is the address of the C variable (of type :c:type:`PyObject*`) into which
   the object pointer is stored.  If the Python object does not have the required
   type, :exc:`TypeError` is raised.

.. _o_ampersand:

``O&`` (object) [*converter*, *anything*]
   Convert a Python object to a C variable through a *converter* function.  This
   takes two arguments: the first is a function, the second is the address of a C
   variable (of arbitrary type), converted to :c:type:`void *`.  The *converter*
   function in turn is called as follows::

      status = converter(object, address);

   where *object* is the Python object to be converted and *address* is the
   :c:type:`void*` argument that was passed to the :c:func:`PyArg_Parse\*` function.
   The returned *status* should be ``1`` for a successful conversion and ``0`` if
   the conversion has failed.  When the conversion fails, the *converter* function
   should raise an exception and leave the content of *address* unmodified.

   If the *converter* returns ``Py_CLEANUP_SUPPORTED``, it may get called a
   second time if the argument parsing eventually fails, giving the converter a
   chance to release any memory that it had already allocated. In this second
   call, the *object* parameter will be ``NULL``; *address* will have the same value
   as in the original call.

   .. versionchanged:: 3.1
      ``Py_CLEANUP_SUPPORTED`` was added.

``p`` (:class:`bool`) [int]
   Tests the value passed in for truth (a boolean **p**\ redicate) and converts
   the result to its equivalent C true/false integer value.
   Sets the int to ``1`` if the expression was true and ``0`` if it was false.
   This accepts any valid Python value.  See :ref:`truth` for more
   information about how Python tests values for truth.

   .. versionadded:: 3.3

``(items)`` (:class:`tuple`) [*matching-items*]
   The object must be a Python sequence whose length is the number of format units
   in *items*.  The C arguments must correspond to the individual format units in
   *items*.  Format units for sequences may be nested.

It is possible to pass "long" integers (integers whose value exceeds the
platform's :const:`LONG_MAX`) however no proper range checking is done --- the
most significant bits are silently truncated when the receiving field is too
small to receive the value (actually, the semantics are inherited from downcasts
in C --- your mileage may vary).

A few other characters have a meaning in a format string.  These may not occur
inside nested parentheses.  They are:

``|``
   Indicates that the remaining arguments in the Python argument list are optional.
   The C variables corresponding to optional arguments should be initialized to
   their default value --- when an optional argument is not specified,
   :c:func:`PyArg_ParseTuple` does not touch the contents of the corresponding C
   variable(s).

``$``
   :c:func:`PyArg_ParseTupleAndKeywords` only:
   Indicates that the remaining arguments in the Python argument list are
   keyword-only.  Currently, all keyword-only arguments must also be optional
   arguments, so ``|`` must always be specified before ``$`` in the format
   string.

   .. versionadded:: 3.3

``:``
   The list of format units ends here; the string after the colon is used as the
   function name in error messages (the "associated value" of the exception that
   :c:func:`PyArg_ParseTuple` raises).

``;``
   The list of format units ends here; the string after the semicolon is used as
   the error message *instead* of the default error message.  ``:`` and ``;``
   mutually exclude each other.

Note that any Python object references which are provided to the caller are
*borrowed* references; do not decrement their reference count!

Additional arguments passed to these functions must be addresses of variables
whose type is determined by the format string; these are used to store values
from the input tuple.  There are a few cases, as described in the list of format
units above, where these parameters are used as input values; they should match
what is specified for the corresponding format unit in that case.

For the conversion to succeed, the *arg* object must match the format
and the format must be exhausted.  On success, the
:c:func:`PyArg_Parse\*` functions return true, otherwise they return
false and raise an appropriate exception. When the
:c:func:`PyArg_Parse\*` functions fail due to conversion failure in one
of the format units, the variables at the addresses corresponding to that
and the following format units are left untouched.

API Functions
-------------

.. c:function:: int PyArg_ParseTuple(PyObject *args, const char *format, ...)

   Parse the parameters of a function that takes only positional parameters into
   local variables.  Returns true on success; on failure, it returns false and
   raises the appropriate exception.


.. c:function:: int PyArg_VaParse(PyObject *args, const char *format, va_list vargs)

   Identical to :c:func:`PyArg_ParseTuple`, except that it accepts a va_list rather
   than a variable number of arguments.


.. c:function:: int PyArg_ParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *keywords[], ...)

   Parse the parameters of a function that takes both positional and keyword
   parameters into local variables.  The *keywords* argument is a
   ``NULL``-terminated array of keyword parameter names.  Empty names denote
   :ref:`positional-only parameters <positional-only_parameter>`.
   Returns true on success; on failure, it returns false and raises the
   appropriate exception.

   .. versionchanged:: 3.6
      Added support for :ref:`positional-only parameters
      <positional-only_parameter>`.


.. c:function:: int PyArg_VaParseTupleAndKeywords(PyObject *args, PyObject *kw, const char *format, char *keywords[], va_list vargs)

   Identical to :c:func:`PyArg_ParseTupleAndKeywords`, except that it accepts a
   va_list rather than a variable number of arguments.


.. c:function:: int PyArg_ValidateKeywordArguments(PyObject *)

   Ensure that the keys in the keywords argument dictionary are strings.  This
   is only needed if :c:func:`PyArg_ParseTupleAndKeywords` is not used, since the
   latter already does this check.

   .. versionadded:: 3.2


.. XXX deprecated, will be removed
.. c:function:: int PyArg_Parse(PyObject *args, const char *format, ...)

   Function used to deconstruct the argument lists of "old-style" functions ---
   these are functions which use the :const:`METH_OLDARGS` parameter parsing
   method, which has been removed in Python 3.  This is not recommended for use
   in parameter parsing in new code, and most code in the standard interpreter
   has been modified to no longer use this for that purpose.  It does remain a
   convenient way to decompose other tuples, however, and may continue to be
   used for that purpose.


.. c:function:: int PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...)

   A simpler form of parameter retrieval which does not use a format string to
   specify the types of the arguments.  Functions which use this method to retrieve
   their parameters should be declared as :const:`METH_VARARGS` in function or
   method tables.  The tuple containing the actual parameters should be passed as
   *args*; it must actually be a tuple.  The length of the tuple must be at least
   *min* and no more than *max*; *min* and *max* may be equal.  Additional
   arguments must be passed to the function, each of which should be a pointer to a
   :c:type:`PyObject*` variable; these will be filled in with the values from
   *args*; they will contain :term:`borrowed references <borrowed reference>`.
   The variables which correspond
   to optional parameters not given by *args* will not be filled in; these should
   be initialized by the caller. This function returns true on success and false if
   *args* is not a tuple or contains the wrong number of elements; an exception
   will be set if there was a failure.

   This is an example of the use of this function, taken from the sources for the
   :mod:`_weakref` helper module for weak references::

      static PyObject *
      weakref_ref(PyObject *self, PyObject *args)
      {
          PyObject *object;
          PyObject *callback = NULL;
          PyObject *result = NULL;

          if (PyArg_UnpackTuple(args, "ref", 1, 2, &object, &callback)) {
              result = PyWeakref_NewRef(object, callback);
          }
          return result;
      }

   The call to :c:func:`PyArg_UnpackTuple` in this example is entirely equivalent to
   this call to :c:func:`PyArg_ParseTuple`::

      PyArg_ParseTuple(args, "O|O:ref", &object, &callback)


---------------
Building values
---------------

.. c:function:: PyObject* Py_BuildValue(const char *format, ...)

   Create a new value based on a format string similar to those accepted by the
   :c:func:`PyArg_Parse\*` family of functions and a sequence of values.  Returns
   the value or ``NULL`` in the case of an error; an exception will be raised if
   ``NULL`` is returned.

   :c:func:`Py_BuildValue` does not always build a tuple.  It builds a tuple only if
   its format string contains two or more format units.  If the format string is
   empty, it returns ``None``; if it contains exactly one format unit, it returns
   whatever object is described by that format unit.  To force it to return a tuple
   of size 0 or one, parenthesize the format string.

   When memory buffers are passed as parameters to supply data to build objects, as
   for the ``s`` and ``s#`` formats, the required data is copied.  Buffers provided
   by the caller are never referenced by the objects created by
   :c:func:`Py_BuildValue`.  In other words, if your code invokes :c:func:`malloc`
   and passes the allocated memory to :c:func:`Py_BuildValue`, your code is
   responsible for calling :c:func:`free` for that memory once
   :c:func:`Py_BuildValue` returns.

   In the following description, the quoted form is the format unit; the entry in
   (round) parentheses is the Python object type that the format unit will return;
   and the entry in [square] brackets is the type of the C value(s) to be passed.

   The characters space, tab, colon and comma are ignored in format strings (but
   not within format units such as ``s#``).  This can be used to make long format
   strings a tad more readable.

   ``s`` (:class:`str` or ``None``) [const char \*]
      Convert a null-terminated C string to a Python :class:`str` object using ``'utf-8'``
      encoding. If the C string pointer is ``NULL``, ``None`` is used.

   ``s#`` (:class:`str` or ``None``) [const char \*, :c:type:`Py_ssize_t`]
      Convert a C string and its length to a Python :class:`str` object using ``'utf-8'``
      encoding. If the C string pointer is ``NULL``, the length is ignored and
      ``None`` is returned.

   ``y`` (:class:`bytes`) [const char \*]
      This converts a C string to a Python :class:`bytes` object.  If the C
      string pointer is ``NULL``, ``None`` is returned.

   ``y#`` (:class:`bytes`) [const char \*, :c:type:`Py_ssize_t`]
      This converts a C string and its lengths to a Python object.  If the C
      string pointer is ``NULL``, ``None`` is returned.

   ``z`` (:class:`str` or ``None``) [const char \*]
      Same as ``s``.

   ``z#`` (:class:`str` or ``None``) [const char \*, :c:type:`Py_ssize_t`]
      Same as ``s#``.

   ``u`` (:class:`str`) [const wchar_t \*]
      Convert a null-terminated :c:type:`wchar_t` buffer of Unicode (UTF-16 or UCS-4)
      data to a Python Unicode object.  If the Unicode buffer pointer is ``NULL``,
      ``None`` is returned.

   ``u#`` (:class:`str`) [const wchar_t \*, :c:type:`Py_ssize_t`]
      Convert a Unicode (UTF-16 or UCS-4) data buffer and its length to a Python
      Unicode object.   If the Unicode buffer pointer is ``NULL``, the length is ignored
      and ``None`` is returned.

   ``U`` (:class:`str` or ``None``) [const char \*]
      Same as ``s``.

   ``U#`` (:class:`str` or ``None``) [const char \*, :c:type:`Py_ssize_t`]
      Same as ``s#``.

   ``i`` (:class:`int`) [int]
      Convert a plain C :c:type:`int` to a Python integer object.

   ``b`` (:class:`int`) [char]
      Convert a plain C :c:type:`char` to a Python integer object.

   ``h`` (:class:`int`) [short int]
      Convert a plain C :c:type:`short int` to a Python integer object.

   ``l`` (:class:`int`) [long int]
      Convert a C :c:type:`long int` to a Python integer object.

   ``B`` (:class:`int`) [unsigned char]
      Convert a C :c:type:`unsigned char` to a Python integer object.

   ``H`` (:class:`int`) [unsigned short int]
      Convert a C :c:type:`unsigned short int` to a Python integer object.

   ``I`` (:class:`int`) [unsigned int]
      Convert a C :c:type:`unsigned int` to a Python integer object.

   ``k`` (:class:`int`) [unsigned long]
      Convert a C :c:type:`unsigned long` to a Python integer object.

   ``L`` (:class:`int`) [long long]
      Convert a C :c:type:`long long` to a Python integer object.

   ``K`` (:class:`int`) [unsigned long long]
      Convert a C :c:type:`unsigned long long` to a Python integer object.

   ``n`` (:class:`int`) [Py_ssize_t]
      Convert a C :c:type:`Py_ssize_t` to a Python integer.

   ``c`` (:class:`bytes` of length 1) [char]
      Convert a C :c:type:`int` representing a byte to a Python :class:`bytes` object of
      length 1.

   ``C`` (:class:`str` of length 1) [int]
      Convert a C :c:type:`int` representing a character to Python :class:`str`
      object of length 1.

   ``d`` (:class:`float`) [double]
      Convert a C :c:type:`double` to a Python floating point number.

   ``f`` (:class:`float`) [float]
      Convert a C :c:type:`float` to a Python floating point number.

   ``D`` (:class:`complex`) [Py_complex \*]
      Convert a C :c:type:`Py_complex` structure to a Python complex number.

   ``O`` (object) [PyObject \*]
      Pass a Python object untouched (except for its reference count, which is
      incremented by one).  If the object passed in is a ``NULL`` pointer, it is assumed
      that this was caused because the call producing the argument found an error and
      set an exception. Therefore, :c:func:`Py_BuildValue` will return ``NULL`` but won't
      raise an exception.  If no exception has been raised yet, :exc:`SystemError` is
      set.

   ``S`` (object) [PyObject \*]
      Same as ``O``.

   ``N`` (object) [PyObject \*]
      Same as ``O``, except it doesn't increment the reference count on the object.
      Useful when the object is created by a call to an object constructor in the
      argument list.

   ``O&`` (object) [*converter*, *anything*]
      Convert *anything* to a Python object through a *converter* function.  The
      function is called with *anything* (which should be compatible with :c:type:`void*`)
      as its argument and should return a "new" Python object, or ``NULL`` if an
      error occurred.

   ``(items)`` (:class:`tuple`) [*matching-items*]
      Convert a sequence of C values to a Python tuple with the same number of items.

   ``[items]`` (:class:`list`) [*matching-items*]
      Convert a sequence of C values to a Python list with the same number of items.

   ``{items}`` (:class:`dict`) [*matching-items*]
      Convert a sequence of C values to a Python dictionary.  Each pair of consecutive
      C values adds one item to the dictionary, serving as key and value,
      respectively.

   If there is an error in the format string, the :exc:`SystemError` exception is
   set and ``NULL`` returned.

.. c:function:: PyObject* Py_VaBuildValue(const char *format, va_list vargs)

   Identical to :c:func:`Py_BuildValue`, except that it accepts a va_list
   rather than a variable number of arguments.


================================================
FILE: Doc/c-api/bool.rst
================================================
.. highlight:: c

.. _boolobjects:

Boolean Objects
---------------

Booleans in Python are implemented as a subclass of integers.  There are only
two booleans, :const:`Py_False` and :const:`Py_True`.  As such, the normal
creation and deletion functions don't apply to booleans.  The following macros
are available, however.


.. c:function:: int PyBool_Check(PyObject *o)

   Return true if *o* is of type :c:data:`PyBool_Type`.  This function always
   succeeds.


.. c:var:: PyObject* Py_False

   The Python ``False`` object.  This object has no methods.  It needs to be
   treated just like any other object with respect to reference counts.


.. c:var:: PyObject* Py_True

   The Python ``True`` object.  This object has no methods.  It needs to be treated
   just like any other object with respect to reference counts.


.. c:macro:: Py_RETURN_FALSE

   Return :const:`Py_False` from a function, properly incrementing its reference
   count.


.. c:macro:: Py_RETURN_TRUE

   Return :const:`Py_True` from a function, properly incrementing its reference
   count.


.. c:function:: PyObject* PyBool_FromLong(long v)

   Return a new reference to :const:`Py_True` or :const:`Py_False` depending on the
   truth value of *v*.


================================================
FILE: Doc/c-api/buffer.rst
================================================
.. highlight:: c

.. index::
   single: buffer protocol
   single: buffer interface; (see buffer protocol)
   single: buffer object; (see buffer protocol)

.. _bufferobjects:

Buffer Protocol
---------------

.. sectionauthor:: Greg Stein <gstein@lyra.org>
.. sectionauthor:: Benjamin Peterson
.. sectionauthor:: Stefan Krah


Certain objects available in Python wrap access to an underlying memory
array or *buffer*.  Such objects include the built-in :class:`bytes` and
:class:`bytearray`, and some extension types like :class:`array.array`.
Third-party libraries may define their own types for special purposes, such
as image processing or numeric analysis.

While each of these types have their own semantics, they share the common
characteristic of being backed by a possibly large memory buffer.  It is
then desirable, in some situations, to access that buffer directly and
without intermediate copying.

Python provides such a facility at the C level in the form of the :ref:`buffer
protocol <bufferobjects>`.  This protocol has two sides:

.. index:: single: PyBufferProcs

- on the producer side, a type can export a "buffer interface" which allows
  objects of that type to expose information about their underlying buffer.
  This interface is described in the section :ref:`buffer-structs`;

- on the consumer side, several means are available to obtain a pointer to
  the raw underlying data of an object (for example a method parameter).

Simple objects such as :class:`bytes` and :class:`bytearray` expose their
underlying buffer in byte-oriented form.  Other forms are possible; for example,
the elements exposed by an :class:`array.array` can be multi-byte values.

An example consumer of the buffer interface is the :meth:`~io.BufferedIOBase.write`
method of file objects: any object that can export a series of bytes through
the buffer interface can be written to a file.  While :meth:`write` only
needs read-only access to the internal contents of the object passed to it,
other methods such as :meth:`~io.BufferedIOBase.readinto` need write access
to the contents of their argument.  The buffer interface allows objects to
selectively allow or reject exporting of read-write and read-only buffers.

There are two ways for a consumer of the buffer interface to acquire a buffer
over a target object:

* call :c:func:`PyObject_GetBuffer` with the right parameters;

* call :c:func:`PyArg_ParseTuple` (or one of its siblings) with one of the
  ``y*``, ``w*`` or ``s*`` :ref:`format codes <arg-parsing>`.

In both cases, :c:func:`PyBuffer_Release` must be called when the buffer
isn't needed anymore.  Failure to do so could lead to various issues such as
resource leaks.


.. _buffer-structure:

Buffer structure
================

Buffer structures (or simply "buffers") are useful as a way to expose the
binary data from another object to the Python programmer.  They can also be
used as a zero-copy slicing mechanism.  Using their ability to reference a
block of memory, it is possible to expose any data to the Python programmer
quite easily.  The memory could be a large, constant array in a C extension,
it could be a raw block of memory for manipulation before passing to an
operating system library, or it could be used to pass around structured data
in its native, in-memory format.

Contrary to most data types exposed by the Python interpreter, buffers
are not :c:type:`PyObject` pointers but rather simple C structures.  This
allows them to be created and copied very simply.  When a generic wrapper
around a buffer is needed, a :ref:`memoryview <memoryview-objects>` object
can be created.

For short instructions how to write an exporting object, see
:ref:`Buffer Object Structures <buffer-structs>`. For obtaining
a buffer, see :c:func:`PyObject_GetBuffer`.

.. c:type:: Py_buffer

   .. c:member:: void *buf

      A pointer to the start of the logical structure described by the buffer
      fields. This can be any location within the underlying physical memory
      block of the exporter. For example, with negative :c:member:`~Py_buffer.strides`
      the value may point to the end of the memory block.

      For :term:`contiguous` arrays, the value points to the beginning of
      the memory block.

   .. c:member:: void *obj

      A new reference to the exporting object. The reference is owned by
      the consumer and automatically decremented and set to ``NULL`` by
      :c:func:`PyBuffer_Release`. The field is the equivalent of the return
      value of any standard C-API function.

      As a special case, for *temporary* buffers that are wrapped by
      :c:func:`PyMemoryView_FromBuffer` or :c:func:`PyBuffer_FillInfo`
      this field is ``NULL``. In general, exporting objects MUST NOT
      use this scheme.

   .. c:member:: Py_ssize_t len

      ``product(shape) * itemsize``. For contiguous arrays, this is the length
      of the underlying memory block. For non-contiguous arrays, it is the length
      that the logical structure would have if it were copied to a contiguous
      representation.

      Accessing ``((char *)buf)[0] up to ((char *)buf)[len-1]`` is only valid
      if the buffer has been obtained by a request that guarantees contiguity. In
      most cases such a request will be :c:macro:`PyBUF_SIMPLE` or :c:macro:`PyBUF_WRITABLE`.

   .. c:member:: int readonly

      An indicator of whether the buffer is read-only. This field is controlled
      by the :c:macro:`PyBUF_WRITABLE` flag.

   .. c:member:: Py_ssize_t itemsize

      Item size in bytes of a single element. Same as the value of :func:`struct.calcsize`
      called on non-``NULL`` :c:member:`~Py_buffer.format` values.

      Important exception: If a consumer requests a buffer without the
      :c:macro:`PyBUF_FORMAT` flag, :c:member:`~Py_buffer.format` will
      be set to  ``NULL``,  but :c:member:`~Py_buffer.itemsize` still has
      the value for the original format.

      If :c:member:`~Py_buffer.shape` is present, the equality
      ``product(shape) * itemsize == len`` still holds and the consumer
      can use :c:member:`~Py_buffer.itemsize` to navigate the buffer.

      If :c:member:`~Py_buffer.shape` is ``NULL`` as a result of a :c:macro:`PyBUF_SIMPLE`
      or a :c:macro:`PyBUF_WRITABLE` request, the consumer must disregard
      :c:member:`~Py_buffer.itemsize` and assume ``itemsize == 1``.

   .. c:member:: const char *format

      A *NUL* terminated string in :mod:`struct` module style syntax describing
      the contents of a single item. If this is ``NULL``, ``"B"`` (unsigned bytes)
      is assumed.

      This field is controlled by the :c:macro:`PyBUF_FORMAT` flag.

   .. c:member:: int ndim

      The number of dimensions the memory represents as an n-dimensional array.
      If it is ``0``, :c:member:`~Py_buffer.buf` points to a single item representing
      a scalar. In this case, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer.strides`
      and :c:member:`~Py_buffer.suboffsets` MUST be ``NULL``.

      The macro :c:macro:`PyBUF_MAX_NDIM` limits the maximum number of dimensions
      to 64. Exporters MUST respect this limit, consumers of multi-dimensional
      buffers SHOULD be able to handle up to :c:macro:`PyBUF_MAX_NDIM` dimensions.

   .. c:member:: Py_ssize_t *shape

      An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
      indicating the shape of the memory as an n-dimensional array. Note that
      ``shape[0] * ... * shape[ndim-1] * itemsize`` MUST be equal to
      :c:member:`~Py_buffer.len`.

      Shape values are restricted to ``shape[n] >= 0``. The case
      ``shape[n] == 0`` requires special attention. See `complex arrays`_
      for further information.

      The shape array is read-only for the consumer.

   .. c:member:: Py_ssize_t *strides

      An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
      giving the number of bytes to skip to get to a new element in each
      dimension.

      Stride values can be any integer. For regular arrays, strides are
      usually positive, but a consumer MUST be able to handle the case
      ``strides[n] <= 0``. See `complex arrays`_ for further information.

      The strides array is read-only for the consumer.

   .. c:member:: Py_ssize_t *suboffsets

      An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`.
      If ``suboffsets[n] >= 0``, the values stored along the nth dimension are
      pointers and the suboffset value dictates how many bytes to add to each
      pointer after de-referencing. A suboffset value that is negative
      indicates that no de-referencing should occur (striding in a contiguous
      memory block).

      If all suboffsets are negative (i.e. no de-referencing is needed), then
      this field must be ``NULL`` (the default value).

      This type of array representation is used by the Python Imaging Library
      (PIL). See `complex arrays`_ for further information how to access elements
      of such an array.

      The suboffsets array is read-only for the consumer.

   .. c:member:: void *internal

      This is for use internally by the exporting object. For example, this
      might be re-cast as an integer by the exporter and used to store flags
      about whether or not the shape, strides, and suboffsets arrays must be
      freed when the buffer is released. The consumer MUST NOT alter this
      value.

.. _buffer-request-types:

Buffer request types
====================

Buffers are usually obtained by sending a buffer request to an exporting
object via :c:func:`PyObject_GetBuffer`. Since the complexity of the logical
structure of the memory can vary drastically, the consumer uses the *flags*
argument to specify the exact buffer type it can handle.

All :c:data:`Py_buffer` fields are unambiguously defined by the request
type.

request-independent fields
~~~~~~~~~~~~~~~~~~~~~~~~~~
The following fields are not influenced by *flags* and must always be filled in
with the correct values: :c:member:`~Py_buffer.obj`, :c:member:`~Py_buffer.buf`,
:c:member:`~Py_buffer.len`, :c:member:`~Py_buffer.itemsize`, :c:member:`~Py_buffer.ndim`.


readonly, format
~~~~~~~~~~~~~~~~

   .. c:macro:: PyBUF_WRITABLE

      Controls the :c:member:`~Py_buffer.readonly` field. If set, the exporter
      MUST provide a writable buffer or else report failure. Otherwise, the
      exporter MAY provide either a read-only or writable buffer, but the choice
      MUST be consistent for all consumers.

   .. c:macro:: PyBUF_FORMAT

      Controls the :c:member:`~Py_buffer.format` field. If set, this field MUST
      be filled in correctly. Otherwise, this field MUST be ``NULL``.


:c:macro:`PyBUF_WRITABLE` can be \|'d to any of the flags in the next section.
Since :c:macro:`PyBUF_SIMPLE` is defined as 0, :c:macro:`PyBUF_WRITABLE`
can be used as a stand-alone flag to request a simple writable buffer.

:c:macro:`PyBUF_FORMAT` can be \|'d to any of the flags except :c:macro:`PyBUF_SIMPLE`.
The latter already implies format ``B`` (unsigned bytes).


shape, strides, suboffsets
~~~~~~~~~~~~~~~~~~~~~~~~~~

The flags that control the logical structure of the memory are listed
in decreasing order of complexity. Note that each flag contains all bits
of the flags below it.

.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|

+-----------------------------+-------+---------+------------+
|  Request                    | shape | strides | suboffsets |
+=============================+=======+=========+============+
| .. c:macro:: PyBUF_INDIRECT |  yes  |   yes   | if needed  |
+-----------------------------+-------+---------+------------+
| .. c:macro:: PyBUF_STRIDES  |  yes  |   yes   |    NULL    |
+-----------------------------+-------+---------+------------+
| .. c:macro:: PyBUF_ND       |  yes  |   NULL  |    NULL    |
+-----------------------------+-------+---------+------------+
| .. c:macro:: PyBUF_SIMPLE   |  NULL |   NULL  |    NULL    |
+-----------------------------+-------+---------+------------+


.. index:: contiguous, C-contiguous, Fortran contiguous

contiguity requests
~~~~~~~~~~~~~~~~~~~

C or Fortran :term:`contiguity <contiguous>` can be explicitly requested,
with and without stride information. Without stride information, the buffer
must be C-contiguous.

.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|

+-----------------------------------+-------+---------+------------+--------+
|  Request                          | shape | strides | suboffsets | contig |
+===================================+=======+=========+============+========+
| .. c:macro:: PyBUF_C_CONTIGUOUS   |  yes  |   yes   |    NULL    |   C    |
+-----------------------------------+-------+---------+------------+--------+
| .. c:macro:: PyBUF_F_CONTIGUOUS   |  yes  |   yes   |    NULL    |   F    |
+-----------------------------------+-------+---------+------------+--------+
| .. c:macro:: PyBUF_ANY_CONTIGUOUS |  yes  |   yes   |    NULL    | C or F |
+-----------------------------------+-------+---------+------------+--------+
| :c:macro:`PyBUF_ND`               |  yes  |   NULL  |    NULL    |   C    |
+-----------------------------------+-------+---------+------------+--------+


compound requests
~~~~~~~~~~~~~~~~~

All possible requests are fully defined by some combination of the flags in
the previous section. For convenience, the buffer protocol provides frequently
used combinations as single flags.

In the following table *U* stands for undefined contiguity. The consumer would
have to call :c:func:`PyBuffer_IsContiguous` to determine contiguity.

.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|l|l|

+-------------------------------+-------+---------+------------+--------+----------+--------+
|  Request                      | shape | strides | suboffsets | contig | readonly | format |
+===============================+=======+=========+============+========+==========+========+
| .. c:macro:: PyBUF_FULL       |  yes  |   yes   | if needed  |   U    |     0    |  yes   |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_FULL_RO    |  yes  |   yes   | if needed  |   U    |  1 or 0  |  yes   |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_RECORDS    |  yes  |   yes   |    NULL    |   U    |     0    |  yes   |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_RECORDS_RO |  yes  |   yes   |    NULL    |   U    |  1 or 0  |  yes   |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_STRIDED    |  yes  |   yes   |    NULL    |   U    |     0    |  NULL  |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_STRIDED_RO |  yes  |   yes   |    NULL    |   U    |  1 or 0  |  NULL  |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_CONTIG     |  yes  |   NULL  |    NULL    |   C    |     0    |  NULL  |
+-------------------------------+-------+---------+------------+--------+----------+--------+
| .. c:macro:: PyBUF_CONTIG_RO  |  yes  |   NULL  |    NULL    |   C    |  1 or 0  |  NULL  |
+-------------------------------+-------+---------+------------+--------+----------+--------+


Complex arrays
==============

NumPy-style: shape and strides
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The logical structure of NumPy-style arrays is defined by :c:member:`~Py_buffer.itemsize`,
:c:member:`~Py_buffer.ndim`, :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides`.

If ``ndim == 0``, the memory location pointed to by :c:member:`~Py_buffer.buf` is
interpreted as a scalar of size :c:member:`~Py_buffer.itemsize`. In that case,
both :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides` are ``NULL``.

If :c:member:`~Py_buffer.strides` is ``NULL``, the array is interpreted as
a standard n-dimensional C-array. Otherwise, the consumer must access an
n-dimensional array as follows:

.. code-block:: c

   ptr = (char *)buf + indices[0] * strides[0] + ... + indices[n-1] * strides[n-1];
   item = *((typeof(item) *)ptr);


As noted above, :c:member:`~Py_buffer.buf` can point to any location within
the actual memory block. An exporter can check the validity of a buffer with
this function:

.. code-block:: python

   def verify_structure(memlen, itemsize, ndim, shape, strides, offset):
       """Verify that the parameters represent a valid array within
          the bounds of the allocated memory:
              char *mem: start of the physical memory block
              memlen: length of the physical memory block
              offset: (char *)buf - mem
       """
       if offset % itemsize:
           return False
       if offset < 0 or offset+itemsize > memlen:
           return False
       if any(v % itemsize for v in strides):
           return False

       if ndim <= 0:
           return ndim == 0 and not shape and not strides
       if 0 in shape:
           return True

       imin = sum(strides[j]*(shape[j]-1) for j in range(ndim)
                  if strides[j] <= 0)
       imax = sum(strides[j]*(shape[j]-1) for j in range(ndim)
                  if strides[j] > 0)

       return 0 <= offset+imin and offset+imax+itemsize <= memlen


PIL-style: shape, strides and suboffsets
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In addition to the regular items, PIL-style arrays can contain pointers
that must be followed in order to get to the next element in a dimension.
For example, the regular three-dimensional C-array ``char v[2][2][3]`` can
also be viewed as an array of 2 pointers to 2 two-dimensional arrays:
``char (*v[2])[2][3]``. In suboffsets representation, those two pointers
can be embedded at the start of :c:member:`~Py_buffer.buf`, pointing
to two ``char x[2][3]`` arrays that can be located anywhere in memory.


Here is a function that returns a pointer to the element in an N-D array
pointed to by an N-dimensional index when there are both non-``NULL`` strides
and suboffsets::

   void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
                          Py_ssize_t *suboffsets, Py_ssize_t *indices) {
       char *pointer = (char*)buf;
       int i;
       for (i = 0; i < ndim; i++) {
           pointer += strides[i] * indices[i];
           if (suboffsets[i] >=0 ) {
               pointer = *((char**)pointer) + suboffsets[i];
           }
       }
       return (void*)pointer;
   }


Buffer-related functions
========================

.. c:function:: int PyObject_CheckBuffer(PyObject *obj)

   Return ``1`` if *obj* supports the buffer interface otherwise ``0``.  When ``1`` is
   returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will
   succeed.  This function always succeeds.


.. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags)

   Send a request to *exporter* to fill in *view* as specified by  *flags*.
   If the exporter cannot provide a buffer of the exact type, it MUST raise
   :c:data:`PyExc_BufferError`, set ``view->obj`` to ``NULL`` and
   return ``-1``.

   On success, fill in *view*, set ``view->obj`` to a new reference
   to *exporter* and return 0. In the case of chained buffer providers
   that redirect requests to a single object, ``view->obj`` MAY
   refer to this object instead of *exporter* (See :ref:`Buffer Object Structures <buffer-structs>`).

   Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls
   to :c:func:`PyBuffer_Release`, similar to :c:func:`malloc` and :c:func:`free`.
   Thus, after the consumer is done with the buffer, :c:func:`PyBuffer_Release`
   must be called exactly once.


.. c:function:: void PyBuffer_Release(Py_buffer *view)

   Release the buffer *view* and decrement the reference count for
   ``view->obj``. This function MUST be called when the buffer
   is no longer being used, otherwise reference leaks may occur.

   It is an error to call this function on a buffer that was not obtained via
   :c:func:`PyObject_GetBuffer`.


.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *format)

   Return the implied :c:data:`~Py_buffer.itemsize` from :c:data:`~Py_buffer.format`.
   On error, raise an exception and return -1.

   .. versionadded:: 3.9


.. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)

   Return ``1`` if the memory defined by the *view* is C-style (*order* is
   ``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
   (*order* is ``'A'``).  Return ``0`` otherwise.  This function always succeeds.


.. c:function:: void* PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)

   Get the memory area pointed to by the *indices* inside the given *view*.
   *indices* must point to an array of ``view->ndim`` indices.


.. c:function:: int PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)

   Copy contiguous *len* bytes from *buf* to *view*.
   *fort* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering).
   ``0`` is returned on success, ``-1`` on error.


.. c:function:: int PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order)

   Copy *len* bytes from *src* to its contiguous representation in *buf*.
   *order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style
   ordering or either one). ``0`` is returned on success, ``-1`` on error.

   This function fails if *len* != *src->len*.


.. c:function:: void PyBuffer_FillContiguousStrides(int ndims, Py_ssize_t *shape, Py_ssize_t *strides, int itemsize, char order)

   Fill the *strides* array with byte-strides of a :term:`contiguous` (C-style if
   *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the
   given shape with the given number of bytes per element.


.. c:function:: int PyBuffer_FillInfo(Py_buffer *view, PyObject *exporter, void *buf, Py_ssize_t len, int readonly, int flags)

   Handle buffer requests for an exporter that wants to expose *buf* of size *len*
   with writability set according to *readonly*. *buf* is interpreted as a sequence
   of unsigned bytes.

   The *flags* argument indicates the request type. This function always fills in
   *view* as specified by flags, unless *buf* has been designated as read-only
   and :c:macro:`PyBUF_WRITABLE` is set in *flags*.

   On success, set ``view->obj`` to a new reference to *exporter* and
   return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set
   ``view->obj`` to ``NULL`` and return ``-1``;

   If this function is used as part of a :ref:`getbufferproc <buffer-structs>`,
   *exporter* MUST be set to the exporting object and *flags* must be passed
   unmodified. Otherwise, *exporter* MUST be ``NULL``.


================================================
FILE: Doc/c-api/bytearray.rst
================================================
.. highlight:: c

.. _bytearrayobjects:

Byte Array Objects
------------------

.. index:: object: bytearray


.. c:type:: PyByteArrayObject

   This subtype of :c:type:`PyObject` represents a Python bytearray object.


.. c:var:: PyTypeObject PyByteArray_Type

   This instance of :c:type:`PyTypeObject` represents the Python bytearray type;
   it is the same object as :class:`bytearray` in the Python layer.


Type check macros
^^^^^^^^^^^^^^^^^

.. c:function:: int PyByteArray_Check(PyObject *o)

   Return true if the object *o* is a bytearray object or an instance of a
   subtype of the bytearray type.  This function always succeeds.


.. c:function:: int PyByteArray_CheckExact(PyObject *o)

   Return true if the object *o* is a bytearray object, but not an instance of a
   subtype of the bytearray type.  This function always succeeds.


Direct API functions
^^^^^^^^^^^^^^^^^^^^

.. c:function:: PyObject* PyByteArray_FromObject(PyObject *o)

   Return a new bytearray object from any object, *o*, that implements the
   :ref:`buffer protocol <bufferobjects>`.

   .. XXX expand about the buffer protocol, at least somewhere


.. c:function:: PyObject* PyByteArray_FromStringAndSize(const char *string, Py_ssize_t len)

   Create a new bytearray object from *string* and its length, *len*.  On
   failure, ``NULL`` is returned.


.. c:function:: PyObject* PyByteArray_Concat(PyObject *a, PyObject *b)

   Concat bytearrays *a* and *b* and return a new bytearray with the result.


.. c:function:: Py_ssize_t PyByteArray_Size(PyObject *bytearray)

   Return the size of *bytearray* after checking for a ``NULL`` pointer.


.. c:function:: char* PyByteArray_AsString(PyObject *bytearray)

   Return the contents of *bytearray* as a char array after checking for a
   ``NULL`` pointer.  The returned array always has an extra
   null byte appended.


.. c:function:: int PyByteArray_Resize(PyObject *bytearray, Py_ssize_t len)

   Resize the internal buffer of *bytearray* to *len*.

Macros
^^^^^^

These macros trade safety for speed and they don't check pointers.

.. c:function:: char* PyByteArray_AS_STRING(PyObject *bytearray)

   Macro version of :c:func:`PyByteArray_AsString`.


.. c:function:: Py_ssize_t PyByteArray_GET_SIZE(PyObject *bytearray)

   Macro version of :c:func:`PyByteArray_Size`.


================================================
FILE: Doc/c-api/bytes.rst
================================================
.. highlight:: c

.. _bytesobjects:

Bytes Objects
-------------

These functions raise :exc:`TypeError` when expecting a bytes parameter and are
called with a non-bytes parameter.

.. index:: object: bytes


.. c:type:: PyBytesObject

   This subtype of :c:type:`PyObject` represents a Python bytes object.


.. c:var:: PyTypeObject PyBytes_Type

   This instance of :c:type:`PyTypeObject` represents the Python bytes type; it
   is the same object as :class:`bytes` in the Python layer.


.. c:function:: int PyBytes_Check(PyObject *o)

   Return true if the object *o* is a bytes object or an instance of a subtype
   of the bytes type.  This function always succeeds.


.. c:function:: int PyBytes_CheckExact(PyObject *o)

   Return true if the object *o* is a bytes object, but not an instance of a
   subtype of the bytes type.  This function always succeeds.


.. c:function:: PyObject* PyBytes_FromString(const char *v)

   Return a new bytes object with a copy of the string *v* as value on success,
   and ``NULL`` on failure.  The parameter *v* must not be ``NULL``; it will not be
   checked.


.. c:function:: PyObject* PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)

   Return a new bytes object with a copy of the string *v* as value and length
   *len* on success, and ``NULL`` on failure.  If *v* is ``NULL``, the contents of
   the bytes object are uninitialized.


.. c:function:: PyObject* PyBytes_FromFormat(const char *format, ...)

   Take a C :c:func:`printf`\ -style *format* string and a variable number of
   arguments, calculate the size of the resulting Python bytes object and return
   a bytes object with the values formatted into it.  The variable arguments
   must be C types and must correspond exactly to the format characters in the
   *format* string.  The following format characters are allowed:

   .. % XXX: This should be exactly the same as the table in PyErr_Format.
   .. % One should just refer to the other.
   .. % XXX: The descriptions for %zd and %zu are wrong, but the truth is complicated
   .. % because not all compilers support the %z width modifier -- we fake it
   .. % when necessary via interpolating PY_FORMAT_SIZE_T.

   .. tabularcolumns:: |l|l|L|

   +-------------------+---------------+--------------------------------+
   | Format Characters | Type          | Comment                        |
   +===================+===============+================================+
   | :attr:`%%`        | *n/a*         | The literal % character.       |
   +-------------------+---------------+--------------------------------+
   | :attr:`%c`        | int           | A single byte,                 |
   |                   |               | represented as a C int.        |
   +-------------------+---------------+--------------------------------+
   | :attr:`%d`        | int           | Equivalent to                  |
   |                   |               | ``printf("%d")``. [1]_         |
   +-------------------+---------------+--------------------------------+
   | :attr:`%u`        | unsigned int  | Equivalent to                  |
   |                   |               | ``printf("%u")``. [1]_         |
   +-------------------+---------------+--------------------------------+
   | :attr:`%ld`       | long          | Equivalent to                  |
   |                   |               | ``printf("%ld")``. [1]_        |
   +-------------------+---------------+--------------------------------+
   | :attr:`%lu`       | unsigned long | Equivalent to                  |
   |                   |               | ``printf("%lu")``. [1]_        |
   +-------------------+---------------+--------------------------------+
   | :attr:`%zd`       | Py_ssize_t    | Equivalent to                  |
   |                   |               | ``printf("%zd")``. [1]_        |
   +-------------------+---------------+--------------------------------+
   | :attr:`%zu`       | size_t        | Equivalent to                  |
   |                   |               | ``printf("%zu")``. [1]_        |
   +-------------------+---------------+--------------------------------+
   | :attr:`%i`        | int           | Equivalent to                  |
   |                   |               | ``printf("%i")``. [1]_         |
   +-------------------+---------------+--------------------------------+
   | :attr:`%x`        | int           | Equivalent to                  |
   |                   |               | ``printf("%x")``. [1]_         |
   +-------------------+---------------+--------------------------------+
   | :attr:`%s`        | const char\*  | A null-terminated C character  |
   |                   |               | array.                         |
   +-------------------+---------------+--------------------------------+
   | :attr:`%p`        | const void\*  | The hex representation of a C  |
   |                   |               | pointer. Mostly equivalent to  |
   |                   |               | ``printf("%p")`` except that   |
   |                   |               | it is guaranteed to start with |
   |                   |               | the literal ``0x`` regardless  |
   |                   |               | of what the platform's         |
   |                   |               | ``printf`` yields.             |
   +-------------------+---------------+--------------------------------+

   An unrecognized format character causes all the rest of the format string to be
   copied as-is to the result object, and any extra arguments discarded.

   .. [1] For integer specifiers (d, u, ld, lu, zd, zu, i, x): the 0-conversion
      flag has effect even when a precision is given.


.. c:function:: PyObject* PyBytes_
Download .txt
gitextract_qq8bwfw7/

├── .azure-pipelines/
│   ├── ci.yml
│   ├── docs-steps.yml
│   ├── macos-steps.yml
│   ├── posix-deps-apt.sh
│   ├── posix-steps.yml
│   ├── pr.yml
│   ├── prebuild-checks.yml
│   ├── windows-layout-steps.yml
│   ├── windows-release/
│   │   ├── build-steps.yml
│   │   ├── checkout.yml
│   │   ├── find-sdk.yml
│   │   ├── gpg-sign.yml
│   │   ├── layout-command.yml
│   │   ├── mingw-lib.yml
│   │   ├── msi-steps.yml
│   │   ├── stage-build.yml
│   │   ├── stage-layout-embed.yml
│   │   ├── stage-layout-full.yml
│   │   ├── stage-layout-msix.yml
│   │   ├── stage-layout-nuget.yml
│   │   ├── stage-msi.yml
│   │   ├── stage-pack-msix.yml
│   │   ├── stage-pack-nuget.yml
│   │   ├── stage-publish-nugetorg.yml
│   │   ├── stage-publish-pythonorg.yml
│   │   ├── stage-publish-store.yml
│   │   ├── stage-sign.yml
│   │   ├── stage-test-embed.yml
│   │   ├── stage-test-msi.yml
│   │   └── stage-test-nuget.yml
│   ├── windows-release.yml
│   └── windows-steps.yml
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── CONTRIBUTING.rst
│   ├── FUNDING.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── SECURITY.md
│   ├── dependabot.yml
│   ├── problem-matchers/
│   │   ├── gcc.json
│   │   ├── msvc.json
│   │   └── sphinx.json
│   └── workflows/
│       ├── build.yml
│       ├── build_msi.yml
│       ├── doc.yml
│       ├── posix-deps-apt.sh
│       └── stale.yml
├── .gitignore
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── Doc/
│   ├── Makefile
│   ├── README.rst
│   ├── about.rst
│   ├── bugs.rst
│   ├── c-api/
│   │   ├── abstract.rst
│   │   ├── allocation.rst
│   │   ├── apiabiversion.rst
│   │   ├── arg.rst
│   │   ├── bool.rst
│   │   ├── buffer.rst
│   │   ├── bytearray.rst
│   │   ├── bytes.rst
│   │   ├── call.rst
│   │   ├── capsule.rst
│   │   ├── cell.rst
│   │   ├── code.rst
│   │   ├── codec.rst
│   │   ├── complex.rst
│   │   ├── concrete.rst
│   │   ├── contextvars.rst
│   │   ├── conversion.rst
│   │   ├── coro.rst
│   │   ├── datetime.rst
│   │   ├── descriptor.rst
│   │   ├── dict.rst
│   │   ├── exceptions.rst
│   │   ├── file.rst
│   │   ├── float.rst
│   │   ├── function.rst
│   │   ├── gcsupport.rst
│   │   ├── gen.rst
│   │   ├── import.rst
│   │   ├── index.rst
│   │   ├── init.rst
│   │   ├── init_config.rst
│   │   ├── intro.rst
│   │   ├── iter.rst
│   │   ├── iterator.rst
│   │   ├── list.rst
│   │   ├── long.rst
│   │   ├── mapping.rst
│   │   ├── marshal.rst
│   │   ├── memory.rst
│   │   ├── memoryview.rst
│   │   ├── method.rst
│   │   ├── module.rst
│   │   ├── none.rst
│   │   ├── number.rst
│   │   ├── objbuffer.rst
│   │   ├── object.rst
│   │   ├── objimpl.rst
│   │   ├── refcounting.rst
│   │   ├── reflection.rst
│   │   ├── sequence.rst
│   │   ├── set.rst
│   │   ├── slice.rst
│   │   ├── stable.rst
│   │   ├── structures.rst
│   │   ├── sys.rst
│   │   ├── tuple.rst
│   │   ├── type.rst
│   │   ├── typehints.rst
│   │   ├── typeobj.rst
│   │   ├── unicode.rst
│   │   ├── utilities.rst
│   │   ├── veryhigh.rst
│   │   └── weakref.rst
│   ├── conf.py
│   ├── contents.rst
│   ├── copyright.rst
│   ├── data/
│   │   └── python3.10.abi
│   ├── distributing/
│   │   └── index.rst
│   ├── distutils/
│   │   ├── _setuptools_disclaimer.rst
│   │   ├── apiref.rst
│   │   ├── builtdist.rst
│   │   ├── commandref.rst
│   │   ├── configfile.rst
│   │   ├── examples.rst
│   │   ├── extending.rst
│   │   ├── index.rst
│   │   ├── introduction.rst
│   │   ├── packageindex.rst
│   │   ├── setupscript.rst
│   │   ├── sourcedist.rst
│   │   └── uploading.rst
│   ├── extending/
│   │   ├── building.rst
│   │   ├── embedding.rst
│   │   ├── extending.rst
│   │   ├── index.rst
│   │   ├── newtypes.rst
│   │   ├── newtypes_tutorial.rst
│   │   └── windows.rst
│   ├── faq/
│   │   ├── design.rst
│   │   ├── extending.rst
│   │   ├── general.rst
│   │   ├── gui.rst
│   │   ├── index.rst
│   │   ├── installed.rst
│   │   ├── library.rst
│   │   ├── programming.rst
│   │   └── windows.rst
│   ├── glossary.rst
│   ├── howto/
│   │   ├── annotations.rst
│   │   ├── argparse.rst
│   │   ├── clinic.rst
│   │   ├── cporting.rst
│   │   ├── curses.rst
│   │   ├── descriptor.rst
│   │   ├── functional.rst
│   │   ├── index.rst
│   │   ├── instrumentation.rst
│   │   ├── ipaddress.rst
│   │   ├── logging-cookbook.rst
│   │   ├── logging.rst
│   │   ├── pyporting.rst
│   │   ├── regex.rst
│   │   ├── sockets.rst
│   │   ├── sorting.rst
│   │   ├── unicode.rst
│   │   └── urllib2.rst
│   ├── includes/
│   │   ├── custom.c
│   │   ├── custom2.c
│   │   ├── custom3.c
│   │   ├── custom4.c
│   │   ├── dbpickle.py
│   │   ├── email-alternative.py
│   │   ├── email-dir.py
│   │   ├── email-headers.py
│   │   ├── email-mime.py
│   │   ├── email-read-alternative.py
│   │   ├── email-simple.py
│   │   ├── email-unpack.py
│   │   ├── minidom-example.py
│   │   ├── mp_newtype.py
│   │   ├── mp_pool.py
│   │   ├── mp_workers.py
│   │   ├── run-func.c
│   │   ├── setup.py
│   │   ├── sqlite3/
│   │   │   ├── adapter_datetime.py
│   │   │   ├── adapter_point_1.py
│   │   │   ├── adapter_point_2.py
│   │   │   ├── collation_reverse.py
│   │   │   ├── complete_statement.py
│   │   │   ├── converter_point.py
│   │   │   ├── ctx_manager.py
│   │   │   ├── execute_1.py
│   │   │   ├── executemany_1.py
│   │   │   ├── executemany_2.py
│   │   │   ├── executescript.py
│   │   │   ├── load_extension.py
│   │   │   ├── md5func.py
│   │   │   ├── mysumaggr.py
│   │   │   ├── pysqlite_datetime.py
│   │   │   ├── row_factory.py
│   │   │   ├── rowclass.py
│   │   │   ├── shortcut_methods.py
│   │   │   └── text_factory.py
│   │   ├── sublist.c
│   │   ├── test.py
│   │   ├── turtle-star.py
│   │   ├── typestruct.h
│   │   └── tzinfo_examples.py
│   ├── install/
│   │   └── index.rst
│   ├── installing/
│   │   └── index.rst
│   ├── library/
│   │   ├── 2to3.rst
│   │   ├── __future__.rst
│   │   ├── __main__.rst
│   │   ├── _thread.rst
│   │   ├── abc.rst
│   │   ├── aifc.rst
│   │   ├── allos.rst
│   │   ├── archiving.rst
│   │   ├── argparse.rst
│   │   ├── array.rst
│   │   ├── ast.rst
│   │   ├── asynchat.rst
│   │   ├── asyncio-api-index.rst
│   │   ├── asyncio-dev.rst
│   │   ├── asyncio-eventloop.rst
│   │   ├── asyncio-exceptions.rst
│   │   ├── asyncio-future.rst
│   │   ├── asyncio-llapi-index.rst
│   │   ├── asyncio-platforms.rst
│   │   ├── asyncio-policy.rst
│   │   ├── asyncio-protocol.rst
│   │   ├── asyncio-queue.rst
│   │   ├── asyncio-stream.rst
│   │   ├── asyncio-subprocess.rst
│   │   ├── asyncio-sync.rst
│   │   ├── asyncio-task.rst
│   │   ├── asyncio.rst
│   │   ├── asyncore.rst
│   │   ├── atexit.rst
│   │   ├── audioop.rst
│   │   ├── audit_events.rst
│   │   ├── base64.rst
│   │   ├── bdb.rst
│   │   ├── binary.rst
│   │   ├── binascii.rst
│   │   ├── binhex.rst
│   │   ├── bisect.rst
│   │   ├── builtins.rst
│   │   ├── bz2.rst
│   │   ├── calendar.rst
│   │   ├── cgi.rst
│   │   ├── cgitb.rst
│   │   ├── chunk.rst
│   │   ├── cmath.rst
│   │   ├── cmd.rst
│   │   ├── code.rst
│   │   ├── codecs.rst
│   │   ├── codeop.rst
│   │   ├── collections.abc.rst
│   │   ├── collections.rst
│   │   ├── colorsys.rst
│   │   ├── compileall.rst
│   │   ├── concurrency.rst
│   │   ├── concurrent.futures.rst
│   │   ├── concurrent.rst
│   │   ├── configparser.rst
│   │   ├── constants.rst
│   │   ├── contextlib.rst
│   │   ├── contextvars.rst
│   │   ├── copy.rst
│   │   ├── copyreg.rst
│   │   ├── crypt.rst
│   │   ├── crypto.rst
│   │   ├── csv.rst
│   │   ├── ctypes.rst
│   │   ├── curses.ascii.rst
│   │   ├── curses.panel.rst
│   │   ├── curses.rst
│   │   ├── custominterp.rst
│   │   ├── dataclasses.rst
│   │   ├── datatypes.rst
│   │   ├── datetime.rst
│   │   ├── dbm.rst
│   │   ├── debug.rst
│   │   ├── decimal.rst
│   │   ├── development.rst
│   │   ├── devmode.rst
│   │   ├── dialog.rst
│   │   ├── difflib.rst
│   │   ├── dis.rst
│   │   ├── distribution.rst
│   │   ├── distutils.rst
│   │   ├── doctest.rst
│   │   ├── email.charset.rst
│   │   ├── email.compat32-message.rst
│   │   ├── email.contentmanager.rst
│   │   ├── email.encoders.rst
│   │   ├── email.errors.rst
│   │   ├── email.examples.rst
│   │   ├── email.generator.rst
│   │   ├── email.header.rst
│   │   ├── email.headerregistry.rst
│   │   ├── email.iterators.rst
│   │   ├── email.message.rst
│   │   ├── email.mime.rst
│   │   ├── email.parser.rst
│   │   ├── email.policy.rst
│   │   ├── email.rst
│   │   ├── email.utils.rst
│   │   ├── ensurepip.rst
│   │   ├── enum.rst
│   │   ├── errno.rst
│   │   ├── exceptions.rst
│   │   ├── faulthandler.rst
│   │   ├── fcntl.rst
│   │   ├── filecmp.rst
│   │   ├── fileformats.rst
│   │   ├── fileinput.rst
│   │   ├── filesys.rst
│   │   ├── fnmatch.rst
│   │   ├── fractions.rst
│   │   ├── frameworks.rst
│   │   ├── ftplib.rst
│   │   ├── functional.rst
│   │   ├── functions.rst
│   │   ├── functools.rst
│   │   ├── gc.rst
│   │   ├── getopt.rst
│   │   ├── getpass.rst
│   │   ├── gettext.rst
│   │   ├── glob.rst
│   │   ├── graphlib.rst
│   │   ├── grp.rst
│   │   ├── gzip.rst
│   │   ├── hashlib.rst
│   │   ├── heapq.rst
│   │   ├── hmac.rst
│   │   ├── html.entities.rst
│   │   ├── html.parser.rst
│   │   ├── html.rst
│   │   ├── http.client.rst
│   │   ├── http.cookiejar.rst
│   │   ├── http.cookies.rst
│   │   ├── http.rst
│   │   ├── http.server.rst
│   │   ├── i18n.rst
│   │   ├── idle.rst
│   │   ├── imaplib.rst
│   │   ├── imghdr.rst
│   │   ├── imp.rst
│   │   ├── importlib.metadata.rst
│   │   ├── importlib.rst
│   │   ├── index.rst
│   │   ├── inspect.rst
│   │   ├── internet.rst
│   │   ├── intro.rst
│   │   ├── io.rst
│   │   ├── ipaddress.rst
│   │   ├── ipc.rst
│   │   ├── itertools.rst
│   │   ├── json.rst
│   │   ├── keyword.rst
│   │   ├── language.rst
│   │   ├── linecache.rst
│   │   ├── locale.rst
│   │   ├── logging.config.rst
│   │   ├── logging.handlers.rst
│   │   ├── logging.rst
│   │   ├── lzma.rst
│   │   ├── mailbox.rst
│   │   ├── mailcap.rst
│   │   ├── markup.rst
│   │   ├── marshal.rst
│   │   ├── math.rst
│   │   ├── mimetypes.rst
│   │   ├── mm.rst
│   │   ├── mmap.rst
│   │   ├── modulefinder.rst
│   │   ├── modules.rst
│   │   ├── msilib.rst
│   │   ├── msvcrt.rst
│   │   ├── multiprocessing.rst
│   │   ├── multiprocessing.shared_memory.rst
│   │   ├── netdata.rst
│   │   ├── netrc.rst
│   │   ├── nis.rst
│   │   ├── nntplib.rst
│   │   ├── numbers.rst
│   │   ├── numeric.rst
│   │   ├── operator.rst
│   │   ├── optparse.rst
│   │   ├── os.path.rst
│   │   ├── os.rst
│   │   ├── ossaudiodev.rst
│   │   ├── pathlib.rst
│   │   ├── pdb.rst
│   │   ├── persistence.rst
│   │   ├── pickle.rst
│   │   ├── pickletools.rst
│   │   ├── pipes.rst
│   │   ├── pkgutil.rst
│   │   ├── platform.rst
│   │   ├── plistlib.rst
│   │   ├── poplib.rst
│   │   ├── posix.rst
│   │   ├── pprint.rst
│   │   ├── profile.rst
│   │   ├── pty.rst
│   │   ├── pwd.rst
│   │   ├── py_compile.rst
│   │   ├── pyclbr.rst
│   │   ├── pydoc.rst
│   │   ├── pyexpat.rst
│   │   ├── python.rst
│   │   ├── queue.rst
│   │   ├── quopri.rst
│   │   ├── random.rst
│   │   ├── re.rst
│   │   ├── readline.rst
│   │   ├── reprlib.rst
│   │   ├── resource.rst
│   │   ├── rlcompleter.rst
│   │   ├── runpy.rst
│   │   ├── sched.rst
│   │   ├── secrets.rst
│   │   ├── security_warnings.rst
│   │   ├── select.rst
│   │   ├── selectors.rst
│   │   ├── shelve.rst
│   │   ├── shlex.rst
│   │   ├── shutil.rst
│   │   ├── signal.rst
│   │   ├── site.rst
│   │   ├── smtpd.rst
│   │   ├── smtplib.rst
│   │   ├── sndhdr.rst
│   │   ├── socket.rst
│   │   ├── socketserver.rst
│   │   ├── spwd.rst
│   │   ├── sqlite3.rst
│   │   ├── ssl.rst
│   │   ├── stat.rst
│   │   ├── statistics.rst
│   │   ├── stdtypes.rst
│   │   ├── string.rst
│   │   ├── stringprep.rst
│   │   ├── struct.rst
│   │   ├── subprocess.rst
│   │   ├── sunau.rst
│   │   ├── superseded.rst
│   │   ├── symtable.rst
│   │   ├── sys.rst
│   │   ├── sysconfig.rst
│   │   ├── syslog.rst
│   │   ├── tabnanny.rst
│   │   ├── tarfile.rst
│   │   ├── telnetlib.rst
│   │   ├── tempfile.rst
│   │   ├── termios.rst
│   │   ├── test.rst
│   │   ├── text.rst
│   │   ├── textwrap.rst
│   │   ├── threading.rst
│   │   ├── time.rst
│   │   ├── timeit.rst
│   │   ├── tk.rst
│   │   ├── tkinter.colorchooser.rst
│   │   ├── tkinter.dnd.rst
│   │   ├── tkinter.font.rst
│   │   ├── tkinter.messagebox.rst
│   │   ├── tkinter.rst
│   │   ├── tkinter.scrolledtext.rst
│   │   ├── tkinter.tix.rst
│   │   ├── tkinter.ttk.rst
│   │   ├── token-list.inc
│   │   ├── token.rst
│   │   ├── tokenize.rst
│   │   ├── trace.rst
│   │   ├── traceback.rst
│   │   ├── tracemalloc.rst
│   │   ├── tty.rst
│   │   ├── tulip_coro.dia
│   │   ├── turtle-star.ps
│   │   ├── turtle.rst
│   │   ├── types.rst
│   │   ├── typing.rst
│   │   ├── undoc.rst
│   │   ├── unicodedata.rst
│   │   ├── unittest.mock-examples.rst
│   │   ├── unittest.mock.rst
│   │   ├── unittest.rst
│   │   ├── unix.rst
│   │   ├── urllib.error.rst
│   │   ├── urllib.parse.rst
│   │   ├── urllib.request.rst
│   │   ├── urllib.robotparser.rst
│   │   ├── urllib.rst
│   │   ├── uu.rst
│   │   ├── uuid.rst
│   │   ├── venv.rst
│   │   ├── warnings.rst
│   │   ├── wave.rst
│   │   ├── weakref.rst
│   │   ├── webbrowser.rst
│   │   ├── windows.rst
│   │   ├── winreg.rst
│   │   ├── winsound.rst
│   │   ├── wsgiref.rst
│   │   ├── xdrlib.rst
│   │   ├── xml.dom.minidom.rst
│   │   ├── xml.dom.pulldom.rst
│   │   ├── xml.dom.rst
│   │   ├── xml.etree.elementtree.rst
│   │   ├── xml.rst
│   │   ├── xml.sax.handler.rst
│   │   ├── xml.sax.reader.rst
│   │   ├── xml.sax.rst
│   │   ├── xml.sax.utils.rst
│   │   ├── xmlrpc.client.rst
│   │   ├── xmlrpc.rst
│   │   ├── xmlrpc.server.rst
│   │   ├── zipapp.rst
│   │   ├── zipfile.rst
│   │   ├── zipimport.rst
│   │   ├── zlib.rst
│   │   └── zoneinfo.rst
│   ├── license.rst
│   ├── make.bat
│   ├── reference/
│   │   ├── compound_stmts.rst
│   │   ├── datamodel.rst
│   │   ├── executionmodel.rst
│   │   ├── expressions.rst
│   │   ├── grammar.rst
│   │   ├── import.rst
│   │   ├── index.rst
│   │   ├── introduction.rst
│   │   ├── lexical_analysis.rst
│   │   ├── simple_stmts.rst
│   │   └── toplevel_components.rst
│   ├── requirements.txt
│   ├── runtime.txt
│   ├── tools/
│   │   ├── extensions/
│   │   │   ├── asdl_highlight.py
│   │   │   ├── c_annotations.py
│   │   │   ├── escape4chm.py
│   │   │   ├── glossary_search.py
│   │   │   ├── patchlevel.py
│   │   │   ├── peg_highlight.py
│   │   │   ├── pyspecific.py
│   │   │   └── suspicious.py
│   │   ├── rstlint.py
│   │   ├── static/
│   │   │   └── changelog_search.js
│   │   ├── susp-ignored.csv
│   │   └── templates/
│   │       ├── customsourcelink.html
│   │       ├── download.html
│   │       ├── dummy.html
│   │       ├── indexcontent.html
│   │       ├── indexsidebar.html
│   │       ├── layout.html
│   │       ├── opensearch.xml
│   │       └── search.html
│   ├── tutorial/
│   │   ├── appendix.rst
│   │   ├── appetite.rst
│   │   ├── classes.rst
│   │   ├── controlflow.rst
│   │   ├── datastructures.rst
│   │   ├── errors.rst
│   │   ├── floatingpoint.rst
│   │   ├── index.rst
│   │   ├── inputoutput.rst
│   │   ├── interactive.rst
│   │   ├── interpreter.rst
│   │   ├── introduction.rst
│   │   ├── modules.rst
│   │   ├── stdlib.rst
│   │   ├── stdlib2.rst
│   │   ├── venv.rst
│   │   └── whatnow.rst
│   ├── using/
│   │   ├── cmdline.rst
│   │   ├── configure.rst
│   │   ├── editors.rst
│   │   ├── index.rst
│   │   ├── mac.rst
│   │   ├── unix.rst
│   │   ├── venv-create.inc
│   │   └── windows.rst
│   └── whatsnew/
│       ├── 2.0.rst
│       ├── 2.1.rst
│       ├── 2.2.rst
│       ├── 2.3.rst
│       ├── 2.4.rst
│       ├── 2.5.rst
│       ├── 2.6.rst
│       ├── 2.7.rst
│       ├── 3.0.rst
│       ├── 3.1.rst
│       ├── 3.10.rst
│       ├── 3.2.rst
│       ├── 3.3.rst
│       ├── 3.4.rst
│       ├── 3.5.rst
│       ├── 3.6.rst
│       ├── 3.7.rst
│       ├── 3.8.rst
│       ├── 3.9.rst
│       ├── changelog.rst
│       └── index.rst
├── Grammar/
│   ├── Tokens
│   └── python.gram
├── Include/
│   ├── Python.h
│   ├── README.rst
│   ├── abstract.h
│   ├── bltinmodule.h
│   ├── boolobject.h
│   ├── bytearrayobject.h
│   ├── bytesobject.h
│   ├── cellobject.h
│   ├── ceval.h
│   ├── classobject.h
│   ├── code.h
│   ├── codecs.h
│   ├── compile.h
│   ├── complexobject.h
│   ├── context.h
│   ├── cpython/
│   │   ├── abstract.h
│   │   ├── bytearrayobject.h
│   │   ├── bytesobject.h
│   │   ├── ceval.h
│   │   ├── code.h
│   │   ├── compile.h
│   │   ├── dictobject.h
│   │   ├── fileobject.h
│   │   ├── fileutils.h
│   │   ├── frameobject.h
│   │   ├── import.h
│   │   ├── initconfig.h
│   │   ├── interpreteridobject.h
│   │   ├── listobject.h
│   │   ├── methodobject.h
│   │   ├── object.h
│   │   ├── objimpl.h
│   │   ├── odictobject.h
│   │   ├── picklebufobject.h
│   │   ├── pyctype.h
│   │   ├── pydebug.h
│   │   ├── pyerrors.h
│   │   ├── pyfpe.h
│   │   ├── pylifecycle.h
│   │   ├── pymem.h
│   │   ├── pystate.h
│   │   ├── pythonrun.h
│   │   ├── pytime.h
│   │   ├── sysmodule.h
│   │   ├── traceback.h
│   │   ├── tupleobject.h
│   │   └── unicodeobject.h
│   ├── datetime.h
│   ├── descrobject.h
│   ├── dictobject.h
│   ├── dynamic_annotations.h
│   ├── enumobject.h
│   ├── errcode.h
│   ├── eval.h
│   ├── exports.h
│   ├── fileobject.h
│   ├── fileutils.h
│   ├── floatobject.h
│   ├── frameobject.h
│   ├── funcobject.h
│   ├── genericaliasobject.h
│   ├── genobject.h
│   ├── import.h
│   ├── internal/
│   │   ├── pycore_abstract.h
│   │   ├── pycore_accu.h
│   │   ├── pycore_asdl.h
│   │   ├── pycore_ast.h
│   │   ├── pycore_ast_state.h
│   │   ├── pycore_atomic.h
│   │   ├── pycore_atomic_funcs.h
│   │   ├── pycore_bitutils.h
│   │   ├── pycore_blocks_output_buffer.h
│   │   ├── pycore_bytes_methods.h
│   │   ├── pycore_call.h
│   │   ├── pycore_ceval.h
│   │   ├── pycore_code.h
│   │   ├── pycore_compile.h
│   │   ├── pycore_condvar.h
│   │   ├── pycore_context.h
│   │   ├── pycore_dtoa.h
│   │   ├── pycore_fileutils.h
│   │   ├── pycore_format.h
│   │   ├── pycore_gc.h
│   │   ├── pycore_getopt.h
│   │   ├── pycore_gil.h
│   │   ├── pycore_hamt.h
│   │   ├── pycore_hashtable.h
│   │   ├── pycore_import.h
│   │   ├── pycore_initconfig.h
│   │   ├── pycore_interp.h
│   │   ├── pycore_list.h
│   │   ├── pycore_long.h
│   │   ├── pycore_moduleobject.h
│   │   ├── pycore_object.h
│   │   ├── pycore_parser.h
│   │   ├── pycore_pathconfig.h
│   │   ├── pycore_pyarena.h
│   │   ├── pycore_pyerrors.h
│   │   ├── pycore_pyhash.h
│   │   ├── pycore_pylifecycle.h
│   │   ├── pycore_pymem.h
│   │   ├── pycore_pystate.h
│   │   ├── pycore_runtime.h
│   │   ├── pycore_structseq.h
│   │   ├── pycore_symtable.h
│   │   ├── pycore_sysmodule.h
│   │   ├── pycore_traceback.h
│   │   ├── pycore_tuple.h
│   │   ├── pycore_ucnhash.h
│   │   ├── pycore_unionobject.h
│   │   └── pycore_warnings.h
│   ├── interpreteridobject.h
│   ├── intrcheck.h
│   ├── iterobject.h
│   ├── listobject.h
│   ├── longintrepr.h
│   ├── longobject.h
│   ├── marshal.h
│   ├── memoryobject.h
│   ├── methodobject.h
│   ├── modsupport.h
│   ├── moduleobject.h
│   ├── namespaceobject.h
│   ├── object.h
│   ├── objimpl.h
│   ├── opcode.h
│   ├── osdefs.h
│   ├── osmodule.h
│   ├── patchlevel.h
│   ├── py_curses.h
│   ├── pycapsule.h
│   ├── pydtrace.d
│   ├── pydtrace.h
│   ├── pyerrors.h
│   ├── pyexpat.h
│   ├── pyframe.h
│   ├── pyhash.h
│   ├── pylifecycle.h
│   ├── pymacconfig.h
│   ├── pymacro.h
│   ├── pymath.h
│   ├── pymem.h
│   ├── pyport.h
│   ├── pystate.h
│   ├── pystrcmp.h
│   ├── pystrhex.h
│   ├── pystrtod.h
│   ├── pythonrun.h
│   ├── pythread.h
│   ├── rangeobject.h
│   ├── setobject.h
│   ├── sliceobject.h
│   ├── structmember.h
│   ├── structseq.h
│   ├── sysmodule.h
│   ├── token.h
│   ├── traceback.h
│   ├── tracemalloc.h
│   ├── tupleobject.h
│   ├── typeslots.h
│   ├── unicodeobject.h
│   ├── warnings.h
│   ├── weakrefobject.h
│   └── win7compat.h
├── LICENSE
├── Lib/
│   ├── __future__.py
│   ├── __phello__.foo.py
│   ├── _aix_support.py
│   ├── _bootsubprocess.py
│   ├── _collections_abc.py
│   ├── _compat_pickle.py
│   ├── _compression.py
│   ├── _markupbase.py
│   ├── _osx_support.py
│   ├── _py_abc.py
│   ├── _pydecimal.py
│   ├── _pyio.py
│   ├── _sitebuiltins.py
│   ├── _strptime.py
│   ├── _threading_local.py
│   ├── _weakrefset.py
│   ├── abc.py
│   ├── aifc.py
│   ├── antigravity.py
│   ├── argparse.py
│   ├── ast.py
│   ├── asynchat.py
│   ├── asyncio/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── base_events.py
│   │   ├── base_futures.py
│   │   ├── base_subprocess.py
│   │   ├── base_tasks.py
│   │   ├── constants.py
│   │   ├── coroutines.py
│   │   ├── events.py
│   │   ├── exceptions.py
│   │   ├── format_helpers.py
│   │   ├── futures.py
│   │   ├── locks.py
│   │   ├── log.py
│   │   ├── mixins.py
│   │   ├── proactor_events.py
│   │   ├── protocols.py
│   │   ├── queues.py
│   │   ├── runners.py
│   │   ├── selector_events.py
│   │   ├── sslproto.py
│   │   ├── staggered.py
│   │   ├── streams.py
│   │   ├── subprocess.py
│   │   ├── tasks.py
│   │   ├── threads.py
│   │   ├── transports.py
│   │   ├── trsock.py
│   │   ├── unix_events.py
│   │   ├── windows_events.py
│   │   └── windows_utils.py
│   ├── asyncore.py
│   ├── base64.py
│   ├── bdb.py
│   ├── binhex.py
│   ├── bisect.py
│   ├── bz2.py
│   ├── cProfile.py
│   ├── calendar.py
│   ├── cgi.py
│   ├── cgitb.py
│   ├── chunk.py
│   ├── cmd.py
│   ├── code.py
│   ├── codecs.py
│   ├── codeop.py
│   ├── collections/
│   │   ├── __init__.py
│   │   └── abc.py
│   ├── colorsys.py
│   ├── compileall.py
│   ├── concurrent/
│   │   ├── __init__.py
│   │   └── futures/
│   │       ├── __init__.py
│   │       ├── _base.py
│   │       ├── process.py
│   │       └── thread.py
│   ├── configparser.py
│   ├── contextlib.py
│   ├── contextvars.py
│   ├── copy.py
│   ├── copyreg.py
│   ├── crypt.py
│   ├── csv.py
│   ├── ctypes/
│   │   ├── __init__.py
│   │   ├── _aix.py
│   │   ├── _endian.py
│   │   ├── macholib/
│   │   │   ├── README.ctypes
│   │   │   ├── __init__.py
│   │   │   ├── dyld.py
│   │   │   ├── dylib.py
│   │   │   ├── fetch_macholib
│   │   │   ├── fetch_macholib.bat
│   │   │   └── framework.py
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_anon.py
│   │   │   ├── test_array_in_pointer.py
│   │   │   ├── test_arrays.py
│   │   │   ├── test_as_parameter.py
│   │   │   ├── test_bitfields.py
│   │   │   ├── test_buffers.py
│   │   │   ├── test_bytes.py
│   │   │   ├── test_byteswap.py
│   │   │   ├── test_callbacks.py
│   │   │   ├── test_cast.py
│   │   │   ├── test_cfuncs.py
│   │   │   ├── test_checkretval.py
│   │   │   ├── test_delattr.py
│   │   │   ├── test_errno.py
│   │   │   ├── test_find.py
│   │   │   ├── test_frombuffer.py
│   │   │   ├── test_funcptr.py
│   │   │   ├── test_functions.py
│   │   │   ├── test_incomplete.py
│   │   │   ├── test_init.py
│   │   │   ├── test_internals.py
│   │   │   ├── test_keeprefs.py
│   │   │   ├── test_libc.py
│   │   │   ├── test_loading.py
│   │   │   ├── test_macholib.py
│   │   │   ├── test_memfunctions.py
│   │   │   ├── test_numbers.py
│   │   │   ├── test_objects.py
│   │   │   ├── test_parameters.py
│   │   │   ├── test_pep3118.py
│   │   │   ├── test_pickling.py
│   │   │   ├── test_pointers.py
│   │   │   ├── test_prototypes.py
│   │   │   ├── test_python_api.py
│   │   │   ├── test_random_things.py
│   │   │   ├── test_refcounts.py
│   │   │   ├── test_repr.py
│   │   │   ├── test_returnfuncptrs.py
│   │   │   ├── test_simplesubclasses.py
│   │   │   ├── test_sizes.py
│   │   │   ├── test_slicing.py
│   │   │   ├── test_stringptr.py
│   │   │   ├── test_strings.py
│   │   │   ├── test_struct_fields.py
│   │   │   ├── test_structures.py
│   │   │   ├── test_unaligned_structures.py
│   │   │   ├── test_unicode.py
│   │   │   ├── test_values.py
│   │   │   ├── test_varsize_struct.py
│   │   │   ├── test_win32.py
│   │   │   └── test_wintypes.py
│   │   ├── util.py
│   │   └── wintypes.py
│   ├── curses/
│   │   ├── __init__.py
│   │   ├── ascii.py
│   │   ├── has_key.py
│   │   ├── panel.py
│   │   └── textpad.py
│   ├── dataclasses.py
│   ├── datetime.py
│   ├── dbm/
│   │   ├── __init__.py
│   │   ├── dumb.py
│   │   ├── gnu.py
│   │   └── ndbm.py
│   ├── decimal.py
│   ├── difflib.py
│   ├── dis.py
│   ├── distutils/
│   │   ├── README
│   │   ├── __init__.py
│   │   ├── _msvccompiler.py
│   │   ├── archive_util.py
│   │   ├── bcppcompiler.py
│   │   ├── ccompiler.py
│   │   ├── cmd.py
│   │   ├── command/
│   │   │   ├── __init__.py
│   │   │   ├── bdist.py
│   │   │   ├── bdist_dumb.py
│   │   │   ├── bdist_msi.py
│   │   │   ├── bdist_rpm.py
│   │   │   ├── build.py
│   │   │   ├── build_clib.py
│   │   │   ├── build_ext.py
│   │   │   ├── build_py.py
│   │   │   ├── build_scripts.py
│   │   │   ├── check.py
│   │   │   ├── clean.py
│   │   │   ├── command_template
│   │   │   ├── config.py
│   │   │   ├── install.py
│   │   │   ├── install_data.py
│   │   │   ├── install_egg_info.py
│   │   │   ├── install_headers.py
│   │   │   ├── install_lib.py
│   │   │   ├── install_scripts.py
│   │   │   ├── register.py
│   │   │   ├── sdist.py
│   │   │   └── upload.py
│   │   ├── config.py
│   │   ├── core.py
│   │   ├── cygwinccompiler.py
│   │   ├── debug.py
│   │   ├── dep_util.py
│   │   ├── dir_util.py
│   │   ├── dist.py
│   │   ├── errors.py
│   │   ├── extension.py
│   │   ├── fancy_getopt.py
│   │   ├── file_util.py
│   │   ├── filelist.py
│   │   ├── log.py
│   │   ├── msvc9compiler.py
│   │   ├── msvccompiler.py
│   │   ├── spawn.py
│   │   ├── sysconfig.py
│   │   ├── tests/
│   │   │   ├── Setup.sample
│   │   │   ├── __init__.py
│   │   │   ├── includetest.rst
│   │   │   ├── support.py
│   │   │   ├── test_archive_util.py
│   │   │   ├── test_bdist.py
│   │   │   ├── test_bdist_dumb.py
│   │   │   ├── test_bdist_msi.py
│   │   │   ├── test_bdist_rpm.py
│   │   │   ├── test_build.py
│   │   │   ├── test_build_clib.py
│   │   │   ├── test_build_ext.py
│   │   │   ├── test_build_py.py
│   │   │   ├── test_build_scripts.py
│   │   │   ├── test_check.py
│   │   │   ├── test_clean.py
│   │   │   ├── test_cmd.py
│   │   │   ├── test_config.py
│   │   │   ├── test_config_cmd.py
│   │   │   ├── test_core.py
│   │   │   ├── test_cygwinccompiler.py
│   │   │   ├── test_dep_util.py
│   │   │   ├── test_dir_util.py
│   │   │   ├── test_dist.py
│   │   │   ├── test_extension.py
│   │   │   ├── test_file_util.py
│   │   │   ├── test_filelist.py
│   │   │   ├── test_install.py
│   │   │   ├── test_install_data.py
│   │   │   ├── test_install_headers.py
│   │   │   ├── test_install_lib.py
│   │   │   ├── test_install_scripts.py
│   │   │   ├── test_log.py
│   │   │   ├── test_msvc9compiler.py
│   │   │   ├── test_msvccompiler.py
│   │   │   ├── test_register.py
│   │   │   ├── test_sdist.py
│   │   │   ├── test_spawn.py
│   │   │   ├── test_sysconfig.py
│   │   │   ├── test_text_file.py
│   │   │   ├── test_unixccompiler.py
│   │   │   ├── test_upload.py
│   │   │   ├── test_util.py
│   │   │   ├── test_version.py
│   │   │   └── test_versionpredicate.py
│   │   ├── text_file.py
│   │   ├── unixccompiler.py
│   │   ├── util.py
│   │   ├── version.py
│   │   └── versionpredicate.py
│   ├── doctest.py
│   ├── email/
│   │   ├── __init__.py
│   │   ├── _encoded_words.py
│   │   ├── _header_value_parser.py
│   │   ├── _parseaddr.py
│   │   ├── _policybase.py
│   │   ├── architecture.rst
│   │   ├── base64mime.py
│   │   ├── charset.py
│   │   ├── contentmanager.py
│   │   ├── encoders.py
│   │   ├── errors.py
│   │   ├── feedparser.py
│   │   ├── generator.py
│   │   ├── header.py
│   │   ├── headerregistry.py
│   │   ├── iterators.py
│   │   ├── message.py
│   │   ├── mime/
│   │   │   ├── __init__.py
│   │   │   ├── application.py
│   │   │   ├── audio.py
│   │   │   ├── base.py
│   │   │   ├── image.py
│   │   │   ├── message.py
│   │   │   ├── multipart.py
│   │   │   ├── nonmultipart.py
│   │   │   └── text.py
│   │   ├── parser.py
│   │   ├── policy.py
│   │   ├── quoprimime.py
│   │   └── utils.py
│   ├── encodings/
│   │   ├── __init__.py
│   │   ├── aliases.py
│   │   ├── ascii.py
│   │   ├── base64_codec.py
│   │   ├── big5.py
│   │   ├── big5hkscs.py
│   │   ├── bz2_codec.py
│   │   ├── charmap.py
│   │   ├── cp037.py
│   │   ├── cp1006.py
│   │   ├── cp1026.py
│   │   ├── cp1125.py
│   │   ├── cp1140.py
│   │   ├── cp1250.py
│   │   ├── cp1251.py
│   │   ├── cp1252.py
│   │   ├── cp1253.py
│   │   ├── cp1254.py
│   │   ├── cp1255.py
│   │   ├── cp1256.py
│   │   ├── cp1257.py
│   │   ├── cp1258.py
│   │   ├── cp273.py
│   │   ├── cp424.py
│   │   ├── cp437.py
│   │   ├── cp500.py
│   │   ├── cp720.py
│   │   ├── cp737.py
│   │   ├── cp775.py
│   │   ├── cp850.py
│   │   ├── cp852.py
│   │   ├── cp855.py
│   │   ├── cp856.py
│   │   ├── cp857.py
│   │   ├── cp858.py
│   │   ├── cp860.py
│   │   ├── cp861.py
│   │   ├── cp862.py
│   │   ├── cp863.py
│   │   ├── cp864.py
│   │   ├── cp865.py
│   │   ├── cp866.py
│   │   ├── cp869.py
│   │   ├── cp874.py
│   │   ├── cp875.py
│   │   ├── cp932.py
│   │   ├── cp949.py
│   │   ├── cp950.py
│   │   ├── euc_jis_2004.py
│   │   ├── euc_jisx0213.py
│   │   ├── euc_jp.py
│   │   ├── euc_kr.py
│   │   ├── gb18030.py
│   │   ├── gb2312.py
│   │   ├── gbk.py
│   │   ├── hex_codec.py
│   │   ├── hp_roman8.py
│   │   ├── hz.py
│   │   ├── idna.py
│   │   ├── iso2022_jp.py
│   │   ├── iso2022_jp_1.py
│   │   ├── iso2022_jp_2.py
│   │   ├── iso2022_jp_2004.py
│   │   ├── iso2022_jp_3.py
│   │   ├── iso2022_jp_ext.py
│   │   ├── iso2022_kr.py
│   │   ├── iso8859_1.py
│   │   ├── iso8859_10.py
│   │   ├── iso8859_11.py
│   │   ├── iso8859_13.py
│   │   ├── iso8859_14.py
│   │   ├── iso8859_15.py
│   │   ├── iso8859_16.py
│   │   ├── iso8859_2.py
│   │   ├── iso8859_3.py
│   │   ├── iso8859_4.py
│   │   ├── iso8859_5.py
│   │   ├── iso8859_6.py
│   │   ├── iso8859_7.py
│   │   ├── iso8859_8.py
│   │   ├── iso8859_9.py
│   │   ├── johab.py
│   │   ├── koi8_r.py
│   │   ├── koi8_t.py
│   │   ├── koi8_u.py
│   │   ├── kz1048.py
│   │   ├── latin_1.py
│   │   ├── mac_arabic.py
│   │   ├── mac_croatian.py
│   │   ├── mac_cyrillic.py
│   │   ├── mac_farsi.py
│   │   ├── mac_greek.py
│   │   ├── mac_iceland.py
│   │   ├── mac_latin2.py
│   │   ├── mac_roman.py
│   │   ├── mac_romanian.py
│   │   ├── mac_turkish.py
│   │   ├── mbcs.py
│   │   ├── oem.py
│   │   ├── palmos.py
│   │   ├── ptcp154.py
│   │   ├── punycode.py
│   │   ├── quopri_codec.py
│   │   ├── raw_unicode_escape.py
│   │   ├── rot_13.py
│   │   ├── shift_jis.py
│   │   ├── shift_jis_2004.py
│   │   ├── shift_jisx0213.py
│   │   ├── tis_620.py
│   │   ├── undefined.py
│   │   ├── unicode_escape.py
│   │   ├── utf_16.py
│   │   ├── utf_16_be.py
│   │   ├── utf_16_le.py
│   │   ├── utf_32.py
│   │   ├── utf_32_be.py
│   │   ├── utf_32_le.py
│   │   ├── utf_7.py
│   │   ├── utf_8.py
│   │   ├── utf_8_sig.py
│   │   ├── uu_codec.py
│   │   └── zlib_codec.py
│   ├── ensurepip/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _bundled/
│   │   │   ├── __init__.py
│   │   │   ├── pip-21.2.4-py3-none-any.whl
│   │   │   └── setuptools-58.1.0-py3-none-any.whl
│   │   └── _uninstall.py
│   ├── enum.py
│   ├── filecmp.py
│   ├── fileinput.py
│   ├── fnmatch.py
│   ├── fractions.py
│   ├── ftplib.py
│   ├── functools.py
│   ├── genericpath.py
│   ├── getopt.py
│   ├── getpass.py
│   ├── gettext.py
│   ├── glob.py
│   ├── graphlib.py
│   ├── gzip.py
│   ├── hashlib.py
│   ├── heapq.py
│   ├── hmac.py
│   ├── html/
│   │   ├── __init__.py
│   │   ├── entities.py
│   │   └── parser.py
│   ├── http/
│   │   ├── __init__.py
│   │   ├── client.py
│   │   ├── cookiejar.py
│   │   ├── cookies.py
│   │   └── server.py
│   ├── idlelib/
│   │   ├── CREDITS.txt
│   │   ├── ChangeLog
│   │   ├── HISTORY.txt
│   │   ├── Icons/
│   │   │   └── README.txt
│   │   ├── NEWS.txt
│   │   ├── NEWS2x.txt
│   │   ├── README.txt
│   │   ├── TODO.txt
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── autocomplete.py
│   │   ├── autocomplete_w.py
│   │   ├── autoexpand.py
│   │   ├── browser.py
│   │   ├── calltip.py
│   │   ├── calltip_w.py
│   │   ├── codecontext.py
│   │   ├── colorizer.py
│   │   ├── config-extensions.def
│   │   ├── config-highlight.def
│   │   ├── config-keys.def
│   │   ├── config-main.def
│   │   ├── config.py
│   │   ├── config_key.py
│   │   ├── configdialog.py
│   │   ├── debugger.py
│   │   ├── debugger_r.py
│   │   ├── debugobj.py
│   │   ├── debugobj_r.py
│   │   ├── delegator.py
│   │   ├── dynoption.py
│   │   ├── editor.py
│   │   ├── extend.txt
│   │   ├── filelist.py
│   │   ├── format.py
│   │   ├── grep.py
│   │   ├── help.html
│   │   ├── help.py
│   │   ├── help_about.py
│   │   ├── history.py
│   │   ├── hyperparser.py
│   │   ├── idle.bat
│   │   ├── idle.py
│   │   ├── idle.pyw
│   │   ├── idle_test/
│   │   │   ├── README.txt
│   │   │   ├── __init__.py
│   │   │   ├── htest.py
│   │   │   ├── mock_idle.py
│   │   │   ├── mock_tk.py
│   │   │   ├── template.py
│   │   │   ├── test_autocomplete.py
│   │   │   ├── test_autocomplete_w.py
│   │   │   ├── test_autoexpand.py
│   │   │   ├── test_browser.py
│   │   │   ├── test_calltip.py
│   │   │   ├── test_calltip_w.py
│   │   │   ├── test_codecontext.py
│   │   │   ├── test_colorizer.py
│   │   │   ├── test_config.py
│   │   │   ├── test_config_key.py
│   │   │   ├── test_configdialog.py
│   │   │   ├── test_debugger.py
│   │   │   ├── test_debugger_r.py
│   │   │   ├── test_debugobj.py
│   │   │   ├── test_debugobj_r.py
│   │   │   ├── test_delegator.py
│   │   │   ├── test_editmenu.py
│   │   │   ├── test_editor.py
│   │   │   ├── test_filelist.py
│   │   │   ├── test_format.py
│   │   │   ├── test_grep.py
│   │   │   ├── test_help.py
│   │   │   ├── test_help_about.py
│   │   │   ├── test_history.py
│   │   │   ├── test_hyperparser.py
│   │   │   ├── test_iomenu.py
│   │   │   ├── test_macosx.py
│   │   │   ├── test_mainmenu.py
│   │   │   ├── test_multicall.py
│   │   │   ├── test_outwin.py
│   │   │   ├── test_parenmatch.py
│   │   │   ├── test_pathbrowser.py
│   │   │   ├── test_percolator.py
│   │   │   ├── test_pyparse.py
│   │   │   ├── test_pyshell.py
│   │   │   ├── test_query.py
│   │   │   ├── test_redirector.py
│   │   │   ├── test_replace.py
│   │   │   ├── test_rpc.py
│   │   │   ├── test_run.py
│   │   │   ├── test_runscript.py
│   │   │   ├── test_scrolledlist.py
│   │   │   ├── test_search.py
│   │   │   ├── test_searchbase.py
│   │   │   ├── test_searchengine.py
│   │   │   ├── test_sidebar.py
│   │   │   ├── test_squeezer.py
│   │   │   ├── test_stackviewer.py
│   │   │   ├── test_statusbar.py
│   │   │   ├── test_text.py
│   │   │   ├── test_textview.py
│   │   │   ├── test_tooltip.py
│   │   │   ├── test_tree.py
│   │   │   ├── test_undo.py
│   │   │   ├── test_warning.py
│   │   │   ├── test_window.py
│   │   │   ├── test_zoomheight.py
│   │   │   ├── test_zzdummy.py
│   │   │   └── tkinter_testing_utils.py
│   │   ├── iomenu.py
│   │   ├── macosx.py
│   │   ├── mainmenu.py
│   │   ├── multicall.py
│   │   ├── outwin.py
│   │   ├── parenmatch.py
│   │   ├── pathbrowser.py
│   │   ├── percolator.py
│   │   ├── pyparse.py
│   │   ├── pyshell.py
│   │   ├── query.py
│   │   ├── redirector.py
│   │   ├── replace.py
│   │   ├── rpc.py
│   │   ├── run.py
│   │   ├── runscript.py
│   │   ├── scrolledlist.py
│   │   ├── search.py
│   │   ├── searchbase.py
│   │   ├── searchengine.py
│   │   ├── sidebar.py
│   │   ├── squeezer.py
│   │   ├── stackviewer.py
│   │   ├── statusbar.py
│   │   ├── textview.py
│   │   ├── tooltip.py
│   │   ├── tree.py
│   │   ├── undo.py
│   │   ├── window.py
│   │   ├── zoomheight.py
│   │   └── zzdummy.py
│   ├── imaplib.py
│   ├── imghdr.py
│   ├── imp.py
│   ├── importlib/
│   │   ├── __init__.py
│   │   ├── _abc.py
│   │   ├── _adapters.py
│   │   ├── _bootstrap.py
│   │   ├── _bootstrap_external.py
│   │   ├── _common.py
│   │   ├── abc.py
│   │   ├── machinery.py
│   │   ├── metadata/
│   │   │   ├── __init__.py
│   │   │   ├── _adapters.py
│   │   │   ├── _collections.py
│   │   │   ├── _functools.py
│   │   │   ├── _itertools.py
│   │   │   ├── _meta.py
│   │   │   └── _text.py
│   │   ├── readers.py
│   │   ├── resources.py
│   │   └── util.py
│   ├── inspect.py
│   ├── io.py
│   ├── ipaddress.py
│   ├── json/
│   │   ├── __init__.py
│   │   ├── decoder.py
│   │   ├── encoder.py
│   │   ├── scanner.py
│   │   └── tool.py
│   ├── keyword.py
│   ├── lib2to3/
│   │   ├── Grammar.txt
│   │   ├── PatternGrammar.txt
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── btm_matcher.py
│   │   ├── btm_utils.py
│   │   ├── fixer_base.py
│   │   ├── fixer_util.py
│   │   ├── fixes/
│   │   │   ├── __init__.py
│   │   │   ├── fix_apply.py
│   │   │   ├── fix_asserts.py
│   │   │   ├── fix_basestring.py
│   │   │   ├── fix_buffer.py
│   │   │   ├── fix_dict.py
│   │   │   ├── fix_except.py
│   │   │   ├── fix_exec.py
│   │   │   ├── fix_execfile.py
│   │   │   ├── fix_exitfunc.py
│   │   │   ├── fix_filter.py
│   │   │   ├── fix_funcattrs.py
│   │   │   ├── fix_future.py
│   │   │   ├── fix_getcwdu.py
│   │   │   ├── fix_has_key.py
│   │   │   ├── fix_idioms.py
│   │   │   ├── fix_import.py
│   │   │   ├── fix_imports.py
│   │   │   ├── fix_imports2.py
│   │   │   ├── fix_input.py
│   │   │   ├── fix_intern.py
│   │   │   ├── fix_isinstance.py
│   │   │   ├── fix_itertools.py
│   │   │   ├── fix_itertools_imports.py
│   │   │   ├── fix_long.py
│   │   │   ├── fix_map.py
│   │   │   ├── fix_metaclass.py
│   │   │   ├── fix_methodattrs.py
│   │   │   ├── fix_ne.py
│   │   │   ├── fix_next.py
│   │   │   ├── fix_nonzero.py
│   │   │   ├── fix_numliterals.py
│   │   │   ├── fix_operator.py
│   │   │   ├── fix_paren.py
│   │   │   ├── fix_print.py
│   │   │   ├── fix_raise.py
│   │   │   ├── fix_raw_input.py
│   │   │   ├── fix_reduce.py
│   │   │   ├── fix_reload.py
│   │   │   ├── fix_renames.py
│   │   │   ├── fix_repr.py
│   │   │   ├── fix_set_literal.py
│   │   │   ├── fix_standarderror.py
│   │   │   ├── fix_sys_exc.py
│   │   │   ├── fix_throw.py
│   │   │   ├── fix_tuple_params.py
│   │   │   ├── fix_types.py
│   │   │   ├── fix_unicode.py
│   │   │   ├── fix_urllib.py
│   │   │   ├── fix_ws_comma.py
│   │   │   ├── fix_xrange.py
│   │   │   ├── fix_xreadlines.py
│   │   │   └── fix_zip.py
│   │   ├── main.py
│   │   ├── patcomp.py
│   │   ├── pgen2/
│   │   │   ├── __init__.py
│   │   │   ├── conv.py
│   │   │   ├── driver.py
│   │   │   ├── grammar.py
│   │   │   ├── literals.py
│   │   │   ├── parse.py
│   │   │   ├── pgen.py
│   │   │   ├── token.py
│   │   │   └── tokenize.py
│   │   ├── pygram.py
│   │   ├── pytree.py
│   │   ├── refactor.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── __main__.py
│   │       ├── data/
│   │       │   ├── README
│   │       │   ├── bom.py
│   │       │   ├── crlf.py
│   │       │   ├── different_encoding.py
│   │       │   ├── false_encoding.py
│   │       │   ├── fixers/
│   │       │   │   ├── bad_order.py
│   │       │   │   ├── myfixes/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── fix_explicit.py
│   │       │   │   │   ├── fix_first.py
│   │       │   │   │   ├── fix_last.py
│   │       │   │   │   ├── fix_parrot.py
│   │       │   │   │   └── fix_preorder.py
│   │       │   │   ├── no_fixer_cls.py
│   │       │   │   └── parrot_example.py
│   │       │   ├── infinite_recursion.py
│   │       │   ├── py2_test_grammar.py
│   │       │   └── py3_test_grammar.py
│   │       ├── pytree_idempotency.py
│   │       ├── support.py
│   │       ├── test_all_fixers.py
│   │       ├── test_fixers.py
│   │       ├── test_main.py
│   │       ├── test_parser.py
│   │       ├── test_pytree.py
│   │       ├── test_refactor.py
│   │       └── test_util.py
│   ├── linecache.py
│   ├── locale.py
│   ├── logging/
│   │   ├── __init__.py
│   │   ├── config.py
│   │   └── handlers.py
│   ├── lzma.py
│   ├── mailbox.py
│   ├── mailcap.py
│   ├── mimetypes.py
│   ├── modulefinder.py
│   ├── msilib/
│   │   ├── __init__.py
│   │   ├── schema.py
│   │   ├── sequence.py
│   │   └── text.py
│   ├── multiprocessing/
│   │   ├── __init__.py
│   │   ├── connection.py
│   │   ├── context.py
│   │   ├── dummy/
│   │   │   ├── __init__.py
│   │   │   └── connection.py
│   │   ├── forkserver.py
│   │   ├── heap.py
│   │   ├── managers.py
│   │   ├── pool.py
│   │   ├── popen_fork.py
│   │   ├── popen_forkserver.py
│   │   ├── popen_spawn_posix.py
│   │   ├── popen_spawn_win32.py
│   │   ├── process.py
│   │   ├── queues.py
│   │   ├── reduction.py
│   │   ├── resource_sharer.py
│   │   ├── resource_tracker.py
│   │   ├── shared_memory.py
│   │   ├── sharedctypes.py
│   │   ├── spawn.py
│   │   ├── synchronize.py
│   │   └── util.py
│   ├── netrc.py
│   ├── nntplib.py
│   ├── ntpath.py
│   ├── nturl2path.py
│   ├── numbers.py
│   ├── opcode.py
│   ├── operator.py
│   ├── optparse.py
│   ├── os.py
│   ├── pathlib.py
│   ├── pdb.py
│   ├── pickle.py
│   ├── pickletools.py
│   ├── pipes.py
│   ├── pkgutil.py
│   ├── platform.py
│   ├── plistlib.py
│   ├── poplib.py
│   ├── posixpath.py
│   ├── pprint.py
│   ├── profile.py
│   ├── pstats.py
│   ├── pty.py
│   ├── py_compile.py
│   ├── pyclbr.py
│   ├── pydoc.py
│   ├── pydoc_data/
│   │   ├── __init__.py
│   │   ├── _pydoc.css
│   │   └── topics.py
│   ├── queue.py
│   ├── quopri.py
│   ├── random.py
│   ├── re.py
│   ├── reprlib.py
│   ├── rlcompleter.py
│   ├── runpy.py
│   ├── sched.py
│   ├── secrets.py
│   ├── selectors.py
│   ├── shelve.py
│   ├── shlex.py
│   ├── shutil.py
│   ├── signal.py
│   ├── site-packages/
│   │   └── README.txt
│   ├── site.py
│   ├── smtpd.py
│   ├── smtplib.py
│   ├── sndhdr.py
│   ├── socket.py
│   ├── socketserver.py
│   ├── sqlite3/
│   │   ├── __init__.py
│   │   ├── dbapi2.py
│   │   ├── dump.py
│   │   └── test/
│   │       ├── __init__.py
│   │       ├── backup.py
│   │       ├── dbapi.py
│   │       ├── dump.py
│   │       ├── factory.py
│   │       ├── hooks.py
│   │       ├── regression.py
│   │       ├── transactions.py
│   │       ├── types.py
│   │       └── userfunctions.py
│   ├── sre_compile.py
│   ├── sre_constants.py
│   ├── sre_parse.py
│   ├── ssl.py
│   ├── stat.py
│   ├── statistics.py
│   ├── string.py
│   ├── stringprep.py
│   ├── struct.py
│   ├── subprocess.py
│   ├── sunau.py
│   ├── symtable.py
│   ├── sysconfig.py
│   ├── tabnanny.py
│   ├── tarfile.py
│   ├── telnetlib.py
│   ├── tempfile.py
│   ├── test/
│   │   ├── Sine-1000Hz-300ms.aif
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _test_atexit.py
│   │   ├── _test_eintr.py
│   │   ├── _test_embed_set_config.py
│   │   ├── _test_multiprocessing.py
│   │   ├── _typed_dict_helper.py
│   │   ├── allsans.pem
│   │   ├── ann_module.py
│   │   ├── ann_module2.py
│   │   ├── ann_module3.py
│   │   ├── ann_module4.py
│   │   ├── ann_module5.py
│   │   ├── ann_module6.py
│   │   ├── audiodata/
│   │   │   ├── pluck-alaw.aifc
│   │   │   ├── pluck-pcm16.aiff
│   │   │   ├── pluck-pcm16.au
│   │   │   ├── pluck-pcm24.aiff
│   │   │   ├── pluck-pcm24.au
│   │   │   ├── pluck-pcm32.aiff
│   │   │   ├── pluck-pcm32.au
│   │   │   ├── pluck-pcm8.aiff
│   │   │   ├── pluck-pcm8.au
│   │   │   ├── pluck-ulaw.aifc
│   │   │   └── pluck-ulaw.au
│   │   ├── audiotest.au
│   │   ├── audiotests.py
│   │   ├── audit-tests.py
│   │   ├── autotest.py
│   │   ├── bad_coding.py
│   │   ├── bad_coding2.py
│   │   ├── bad_getattr.py
│   │   ├── bad_getattr2.py
│   │   ├── bad_getattr3.py
│   │   ├── badcert.pem
│   │   ├── badkey.pem
│   │   ├── badsyntax_3131.py
│   │   ├── badsyntax_future10.py
│   │   ├── badsyntax_future3.py
│   │   ├── badsyntax_future4.py
│   │   ├── badsyntax_future5.py
│   │   ├── badsyntax_future6.py
│   │   ├── badsyntax_future7.py
│   │   ├── badsyntax_future8.py
│   │   ├── badsyntax_future9.py
│   │   ├── badsyntax_pep3120.py
│   │   ├── bisect_cmd.py
│   │   ├── capath/
│   │   │   ├── 4e1295a3.0
│   │   │   ├── 5ed36f99.0
│   │   │   ├── 6e88d7b8.0
│   │   │   ├── 99d0fa06.0
│   │   │   ├── b1930218.0
│   │   │   └── ceff1710.0
│   │   ├── cfgparser.1
│   │   ├── cfgparser.2
│   │   ├── cfgparser.3
│   │   ├── cjkencodings/
│   │   │   ├── big5-utf8.txt
│   │   │   ├── big5.txt
│   │   │   ├── big5hkscs-utf8.txt
│   │   │   ├── big5hkscs.txt
│   │   │   ├── cp949-utf8.txt
│   │   │   ├── cp949.txt
│   │   │   ├── euc_jisx0213-utf8.txt
│   │   │   ├── euc_jisx0213.txt
│   │   │   ├── euc_jp-utf8.txt
│   │   │   ├── euc_jp.txt
│   │   │   ├── euc_kr-utf8.txt
│   │   │   ├── euc_kr.txt
│   │   │   ├── gb18030-utf8.txt
│   │   │   ├── gb18030.txt
│   │   │   ├── gb2312-utf8.txt
│   │   │   ├── gb2312.txt
│   │   │   ├── gbk-utf8.txt
│   │   │   ├── gbk.txt
│   │   │   ├── hz-utf8.txt
│   │   │   ├── hz.txt
│   │   │   ├── iso2022_jp-utf8.txt
│   │   │   ├── iso2022_jp.txt
│   │   │   ├── iso2022_kr-utf8.txt
│   │   │   ├── iso2022_kr.txt
│   │   │   ├── johab-utf8.txt
│   │   │   ├── johab.txt
│   │   │   ├── shift_jis-utf8.txt
│   │   │   ├── shift_jis.txt
│   │   │   ├── shift_jisx0213-utf8.txt
│   │   │   └── shift_jisx0213.txt
│   │   ├── clinic.test
│   │   ├── cmath_testcases.txt
│   │   ├── coding20731.py
│   │   ├── crashers/
│   │   │   ├── README
│   │   │   ├── bogus_code_obj.py
│   │   │   ├── gc_inspection.py
│   │   │   ├── infinite_loop_re.py
│   │   │   ├── mutation_inside_cyclegc.py
│   │   │   ├── recursive_call.py
│   │   │   ├── trace_at_recursion_limit.py
│   │   │   └── underlying_dict.py
│   │   ├── curses_tests.py
│   │   ├── data/
│   │   │   └── README
│   │   ├── dataclass_module_1.py
│   │   ├── dataclass_module_1_str.py
│   │   ├── dataclass_module_2.py
│   │   ├── dataclass_module_2_str.py
│   │   ├── dataclass_textanno.py
│   │   ├── datetimetester.py
│   │   ├── decimaltestdata/
│   │   │   ├── abs.decTest
│   │   │   ├── add.decTest
│   │   │   ├── and.decTest
│   │   │   ├── base.decTest
│   │   │   ├── clamp.decTest
│   │   │   ├── class.decTest
│   │   │   ├── compare.decTest
│   │   │   ├── comparetotal.decTest
│   │   │   ├── comparetotmag.decTest
│   │   │   ├── copy.decTest
│   │   │   ├── copyabs.decTest
│   │   │   ├── copynegate.decTest
│   │   │   ├── copysign.decTest
│   │   │   ├── ddAbs.decTest
│   │   │   ├── ddAdd.decTest
│   │   │   ├── ddAnd.decTest
│   │   │   ├── ddBase.decTest
│   │   │   ├── ddCanonical.decTest
│   │   │   ├── ddClass.decTest
│   │   │   ├── ddCompare.decTest
│   │   │   ├── ddCompareSig.decTest
│   │   │   ├── ddCompareTotal.decTest
│   │   │   ├── ddCompareTotalMag.decTest
│   │   │   ├── ddCopy.decTest
│   │   │   ├── ddCopyAbs.decTest
│   │   │   ├── ddCopyNegate.decTest
│   │   │   ├── ddCopySign.decTest
│   │   │   ├── ddDivide.decTest
│   │   │   ├── ddDivideInt.decTest
│   │   │   ├── ddEncode.decTest
│   │   │   ├── ddFMA.decTest
│   │   │   ├── ddInvert.decTest
│   │   │   ├── ddLogB.decTest
│   │   │   ├── ddMax.decTest
│   │   │   ├── ddMaxMag.decTest
│   │   │   ├── ddMin.decTest
│   │   │   ├── ddMinMag.decTest
│   │   │   ├── ddMinus.decTest
│   │   │   ├── ddMultiply.decTest
│   │   │   ├── ddNextMinus.decTest
│   │   │   ├── ddNextPlus.decTest
│   │   │   ├── ddNextToward.decTest
│   │   │   ├── ddOr.decTest
│   │   │   ├── ddPlus.decTest
│   │   │   ├── ddQuantize.decTest
│   │   │   ├── ddReduce.decTest
│   │   │   ├── ddRemainder.decTest
│   │   │   ├── ddRemainderNear.decTest
│   │   │   ├── ddRotate.decTest
│   │   │   ├── ddSameQuantum.decTest
│   │   │   ├── ddScaleB.decTest
│   │   │   ├── ddShift.decTest
│   │   │   ├── ddSubtract.decTest
│   │   │   ├── ddToIntegral.decTest
│   │   │   ├── ddXor.decTest
│   │   │   ├── decDouble.decTest
│   │   │   ├── decQuad.decTest
│   │   │   ├── decSingle.decTest
│   │   │   ├── divide.decTest
│   │   │   ├── divideint.decTest
│   │   │   ├── dqAbs.decTest
│   │   │   ├── dqAdd.decTest
│   │   │   ├── dqAnd.decTest
│   │   │   ├── dqBase.decTest
│   │   │   ├── dqCanonical.decTest
│   │   │   ├── dqClass.decTest
│   │   │   ├── dqCompare.decTest
│   │   │   ├── dqCompareSig.decTest
│   │   │   ├── dqCompareTotal.decTest
│   │   │   ├── dqCompareTotalMag.decTest
│   │   │   ├── dqCopy.decTest
│   │   │   ├── dqCopyAbs.decTest
│   │   │   ├── dqCopyNegate.decTest
│   │   │   ├── dqCopySign.decTest
│   │   │   ├── dqDivide.decTest
│   │   │   ├── dqDivideInt.decTest
│   │   │   ├── dqEncode.decTest
│   │   │   ├── dqFMA.decTest
│   │   │   ├── dqInvert.decTest
│   │   │   ├── dqLogB.decTest
│   │   │   ├── dqMax.decTest
│   │   │   ├── dqMaxMag.decTest
│   │   │   ├── dqMin.decTest
│   │   │   ├── dqMinMag.decTest
│   │   │   ├── dqMinus.decTest
│   │   │   ├── dqMultiply.decTest
│   │   │   ├── dqNextMinus.decTest
│   │   │   ├── dqNextPlus.decTest
│   │   │   ├── dqNextToward.decTest
│   │   │   ├── dqOr.decTest
│   │   │   ├── dqPlus.decTest
│   │   │   ├── dqQuantize.decTest
│   │   │   ├── dqReduce.decTest
│   │   │   ├── dqRemainder.decTest
│   │   │   ├── dqRemainderNear.decTest
│   │   │   ├── dqRotate.decTest
│   │   │   ├── dqSameQuantum.decTest
│   │   │   ├── dqScaleB.decTest
│   │   │   ├── dqShift.decTest
│   │   │   ├── dqSubtract.decTest
│   │   │   ├── dqToIntegral.decTest
│   │   │   ├── dqXor.decTest
│   │   │   ├── dsBase.decTest
│   │   │   ├── dsEncode.decTest
│   │   │   ├── exp.decTest
│   │   │   ├── extra.decTest
│   │   │   ├── fma.decTest
│   │   │   ├── inexact.decTest
│   │   │   ├── invert.decTest
│   │   │   ├── ln.decTest
│   │   │   ├── log10.decTest
│   │   │   ├── logb.decTest
│   │   │   ├── max.decTest
│   │   │   ├── maxmag.decTest
│   │   │   ├── min.decTest
│   │   │   ├── minmag.decTest
│   │   │   ├── minus.decTest
│   │   │   ├── multiply.decTest
│   │   │   ├── nextminus.decTest
│   │   │   ├── nextplus.decTest
│   │   │   ├── nexttoward.decTest
│   │   │   ├── or.decTest
│   │   │   ├── plus.decTest
│   │   │   ├── power.decTest
│   │   │   ├── powersqrt.decTest
│   │   │   ├── quantize.decTest
│   │   │   ├── randomBound32.decTest
│   │   │   ├── randoms.decTest
│   │   │   ├── reduce.decTest
│   │   │   ├── remainder.decTest
│   │   │   ├── remainderNear.decTest
│   │   │   ├── rescale.decTest
│   │   │   ├── rotate.decTest
│   │   │   ├── rounding.decTest
│   │   │   ├── samequantum.decTest
│   │   │   ├── scaleb.decTest
│   │   │   ├── shift.decTest
│   │   │   ├── squareroot.decTest
│   │   │   ├── subtract.decTest
│   │   │   ├── testall.decTest
│   │   │   ├── tointegral.decTest
│   │   │   ├── tointegralx.decTest
│   │   │   └── xor.decTest
│   │   ├── dis_module.py
│   │   ├── doctest_aliases.py
│   │   ├── double_const.py
│   │   ├── dtracedata/
│   │   │   ├── assert_usable.d
│   │   │   ├── assert_usable.stp
│   │   │   ├── call_stack.d
│   │   │   ├── call_stack.d.expected
│   │   │   ├── call_stack.py
│   │   │   ├── call_stack.stp
│   │   │   ├── call_stack.stp.expected
│   │   │   ├── gc.d
│   │   │   ├── gc.d.expected
│   │   │   ├── gc.py
│   │   │   ├── gc.stp
│   │   │   ├── gc.stp.expected
│   │   │   ├── instance.py
│   │   │   ├── line.d
│   │   │   ├── line.d.expected
│   │   │   └── line.py
│   │   ├── empty.vbs
│   │   ├── encoded_modules/
│   │   │   ├── __init__.py
│   │   │   ├── module_iso_8859_1.py
│   │   │   └── module_koi8_r.py
│   │   ├── exception_hierarchy.txt
│   │   ├── ffdh3072.pem
│   │   ├── final_a.py
│   │   ├── final_b.py
│   │   ├── floating_points.txt
│   │   ├── fork_wait.py
│   │   ├── formatfloat_testcases.txt
│   │   ├── future_test1.py
│   │   ├── future_test2.py
│   │   ├── gdb_sample.py
│   │   ├── good_getattr.py
│   │   ├── idnsans.pem
│   │   ├── ieee754.txt
│   │   ├── imghdrdata/
│   │   │   ├── python.exr
│   │   │   ├── python.pbm
│   │   │   ├── python.pgm
│   │   │   ├── python.ppm
│   │   │   ├── python.ras
│   │   │   ├── python.sgi
│   │   │   ├── python.tiff
│   │   │   └── python.xbm
│   │   ├── imp_dummy.py
│   │   ├── inspect_fodder.py
│   │   ├── inspect_fodder2.py
│   │   ├── inspect_stock_annotations.py
│   │   ├── inspect_stringized_annotations.py
│   │   ├── inspect_stringized_annotations_2.py
│   │   ├── keycert.passwd.pem
│   │   ├── keycert.pem
│   │   ├── keycert2.pem
│   │   ├── keycert3.pem
│   │   ├── keycert4.pem
│   │   ├── keycertecc.pem
│   │   ├── leakers/
│   │   │   ├── README.txt
│   │   │   ├── __init__.py
│   │   │   ├── test_ctypes.py
│   │   │   └── test_selftype.py
│   │   ├── libregrtest/
│   │   │   ├── __init__.py
│   │   │   ├── cmdline.py
│   │   │   ├── main.py
│   │   │   ├── pgo.py
│   │   │   ├── refleak.py
│   │   │   ├── runtest.py
│   │   │   ├── runtest_mp.py
│   │   │   ├── save_env.py
│   │   │   ├── setup.py
│   │   │   ├── utils.py
│   │   │   └── win_utils.py
│   │   ├── list_tests.py
│   │   ├── lock_tests.py
│   │   ├── mailcap.txt
│   │   ├── make_ssl_certs.py
│   │   ├── mapping_tests.py
│   │   ├── math_testcases.txt
│   │   ├── memory_watchdog.py
│   │   ├── mime.types
│   │   ├── mock_socket.py
│   │   ├── mod_generics_cache.py
│   │   ├── mp_fork_bomb.py
│   │   ├── mp_preload.py
│   │   ├── multibytecodec_support.py
│   │   ├── nokia.pem
│   │   ├── nosan.pem
│   │   ├── nullbytecert.pem
│   │   ├── nullcert.pem
│   │   ├── pickletester.py
│   │   ├── profilee.py
│   │   ├── pstats.pck
│   │   ├── pycacert.pem
│   │   ├── pycakey.pem
│   │   ├── pyclbr_input.py
│   │   ├── pydoc_mod.py
│   │   ├── pydocfodder.py
│   │   ├── pythoninfo.py
│   │   ├── randv2_32.pck
│   │   ├── randv2_64.pck
│   │   ├── randv3.pck
│   │   ├── re_tests.py
│   │   ├── regrtest.py
│   │   ├── relimport.py
│   │   ├── reperf.py
│   │   ├── revocation.crl
│   │   ├── sample_doctest.py
│   │   ├── sample_doctest_no_docstrings.py
│   │   ├── sample_doctest_no_doctests.py
│   │   ├── secp384r1.pem
│   │   ├── selfsigned_pythontestdotnet.pem
│   │   ├── seq_tests.py
│   │   ├── sgml_input.html
│   │   ├── signalinterproctester.py
│   │   ├── sndhdrdata/
│   │   │   ├── README
│   │   │   ├── sndhdr.8svx
│   │   │   ├── sndhdr.aifc
│   │   │   ├── sndhdr.aiff
│   │   │   ├── sndhdr.au
│   │   │   ├── sndhdr.hcom
│   │   │   ├── sndhdr.sndt
│   │   │   └── sndhdr.voc
│   │   ├── sortperf.py
│   │   ├── ssl_cert.pem
│   │   ├── ssl_key.passwd.pem
│   │   ├── ssl_key.pem
│   │   ├── ssl_servers.py
│   │   ├── ssltests.py
│   │   ├── string_tests.py
│   │   ├── subprocessdata/
│   │   │   ├── fd_status.py
│   │   │   ├── input_reader.py
│   │   │   ├── qcat.py
│   │   │   ├── qgrep.py
│   │   │   └── sigchild_ignore.py
│   │   ├── support/
│   │   │   ├── __init__.py
│   │   │   ├── bytecode_helper.py
│   │   │   ├── hashlib_helper.py
│   │   │   ├── import_helper.py
│   │   │   ├── interpreters.py
│   │   │   ├── logging_helper.py
│   │   │   ├── os_helper.py
│   │   │   ├── script_helper.py
│   │   │   ├── socket_helper.py
│   │   │   ├── testresult.py
│   │   │   ├── threading_helper.py
│   │   │   └── warnings_helper.py
│   │   ├── talos-2019-0758.pem
│   │   ├── test___all__.py
│   │   ├── test___future__.py
│   │   ├── test__locale.py
│   │   ├── test__opcode.py
│   │   ├── test__osx_support.py
│   │   ├── test__xxsubinterpreters.py
│   │   ├── test_abc.py
│   │   ├── test_abstract_numbers.py
│   │   ├── test_aifc.py
│   │   ├── test_argparse.py
│   │   ├── test_array.py
│   │   ├── test_asdl_parser.py
│   │   ├── test_ast.py
│   │   ├── test_asyncgen.py
│   │   ├── test_asynchat.py
│   │   ├── test_asyncio/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── echo.py
│   │   │   ├── echo2.py
│   │   │   ├── echo3.py
│   │   │   ├── functional.py
│   │   │   ├── test_asyncio_waitfor.py
│   │   │   ├── test_base_events.py
│   │   │   ├── test_buffered_proto.py
│   │   │   ├── test_context.py
│   │   │   ├── test_events.py
│   │   │   ├── test_futures.py
│   │   │   ├── test_futures2.py
│   │   │   ├── test_locks.py
│   │   │   ├── test_pep492.py
│   │   │   ├── test_proactor_events.py
│   │   │   ├── test_protocols.py
│   │   │   ├── test_queues.py
│   │   │   ├── test_runners.py
│   │   │   ├── test_selector_events.py
│   │   │   ├── test_sendfile.py
│   │   │   ├── test_server.py
│   │   │   ├── test_sock_lowlevel.py
│   │   │   ├── test_sslproto.py
│   │   │   ├── test_streams.py
│   │   │   ├── test_subprocess.py
│   │   │   ├── test_tasks.py
│   │   │   ├── test_threads.py
│   │   │   ├── test_transports.py
│   │   │   ├── test_unix_events.py
│   │   │   ├── test_windows_events.py
│   │   │   ├── test_windows_utils.py
│   │   │   └── utils.py
│   │   ├── test_asyncore.py
│   │   ├── test_atexit.py
│   │   ├── test_audioop.py
│   │   ├── test_audit.py
│   │   ├── test_augassign.py
│   │   ├── test_base64.py
│   │   ├── test_baseexception.py
│   │   ├── test_bdb.py
│   │   ├── test_bigaddrspace.py
│   │   ├── test_bigmem.py
│   │   ├── test_binascii.py
│   │   ├── test_binhex.py
│   │   ├── test_binop.py
│   │   ├── test_bisect.py
│   │   ├── test_bool.py
│   │   ├── test_buffer.py
│   │   ├── test_bufio.py
│   │   ├── test_builtin.py
│   │   ├── test_bytes.py
│   │   ├── test_bz2.py
│   │   ├── test_c_locale_coercion.py
│   │   ├── test_calendar.py
│   │   ├── test_call.py
│   │   ├── test_capi.py
│   │   ├── test_cgi.py
│   │   ├── test_cgitb.py
│   │   ├── test_charmapcodec.py
│   │   ├── test_check_c_globals.py
│   │   ├── test_class.py
│   │   ├── test_clinic.py
│   │   ├── test_cmath.py
│   │   ├── test_cmd.py
│   │   ├── test_cmd_line.py
│   │   ├── test_cmd_line_script.py
│   │   ├── test_code.py
│   │   ├── test_code_module.py
│   │   ├── test_codeccallbacks.py
│   │   ├── test_codecencodings_cn.py
│   │   ├── test_codecencodings_hk.py
│   │   ├── test_codecencodings_iso2022.py
│   │   ├── test_codecencodings_jp.py
│   │   ├── test_codecencodings_kr.py
│   │   ├── test_codecencodings_tw.py
│   │   ├── test_codecmaps_cn.py
│   │   ├── test_codecmaps_hk.py
│   │   ├── test_codecmaps_jp.py
│   │   ├── test_codecmaps_kr.py
│   │   ├── test_codecmaps_tw.py
│   │   ├── test_codecs.py
│   │   ├── test_codeop.py
│   │   ├── test_collections.py
│   │   ├── test_colorsys.py
│   │   ├── test_compare.py
│   │   ├── test_compile.py
│   │   ├── test_compileall.py
│   │   ├── test_complex.py
│   │   ├── test_concurrent_futures.py
│   │   ├── test_configparser.py
│   │   ├── test_contains.py
│   │   ├── test_context.py
│   │   ├── test_contextlib.py
│   │   ├── test_contextlib_async.py
│   │   ├── test_copy.py
│   │   ├── test_copyreg.py
│   │   ├── test_coroutines.py
│   │   ├── test_cprofile.py
│   │   ├── test_crashers.py
│   │   ├── test_crypt.py
│   │   ├── test_csv.py
│   │   ├── test_ctypes.py
│   │   ├── test_curses.py
│   │   ├── test_dataclasses.py
│   │   ├── test_datetime.py
│   │   ├── test_dbm.py
│   │   ├── test_dbm_dumb.py
│   │   ├── test_dbm_gnu.py
│   │   ├── test_dbm_ndbm.py
│   │   ├── test_decimal.py
│   │   ├── test_decorators.py
│   │   ├── test_defaultdict.py
│   │   ├── test_deque.py
│   │   ├── test_descr.py
│   │   ├── test_descrtut.py
│   │   ├── test_devpoll.py
│   │   ├── test_dict.py
│   │   ├── test_dict_version.py
│   │   ├── test_dictcomps.py
│   │   ├── test_dictviews.py
│   │   ├── test_difflib.py
│   │   ├── test_difflib_expect.html
│   │   ├── test_dis.py
│   │   ├── test_distutils.py
│   │   ├── test_doctest.py
│   │   ├── test_doctest.txt
│   │   ├── test_doctest2.py
│   │   ├── test_doctest2.txt
│   │   ├── test_doctest3.txt
│   │   ├── test_doctest4.txt
│   │   ├── test_docxmlrpc.py
│   │   ├── test_dtrace.py
│   │   ├── test_dynamic.py
│   │   ├── test_dynamicclassattribute.py
│   │   ├── test_eintr.py
│   │   ├── test_email/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── data/
│   │   │   │   ├── audiotest.au
│   │   │   │   ├── msg_01.txt
│   │   │   │   ├── msg_02.txt
│   │   │   │   ├── msg_03.txt
│   │   │   │   ├── msg_04.txt
│   │   │   │   ├── msg_05.txt
│   │   │   │   ├── msg_06.txt
│   │   │   │   ├── msg_07.txt
│   │   │   │   ├── msg_08.txt
│   │   │   │   ├── msg_09.txt
│   │   │   │   ├── msg_10.txt
│   │   │   │   ├── msg_11.txt
│   │   │   │   ├── msg_12.txt
│   │   │   │   ├── msg_12a.txt
│   │   │   │   ├── msg_13.txt
│   │   │   │   ├── msg_14.txt
│   │   │   │   ├── msg_15.txt
│   │   │   │   ├── msg_16.txt
│   │   │   │   ├── msg_17.txt
│   │   │   │   ├── msg_18.txt
│   │   │   │   ├── msg_19.txt
│   │   │   │   ├── msg_20.txt
│   │   │   │   ├── msg_21.txt
│   │   │   │   ├── msg_22.txt
│   │   │   │   ├── msg_23.txt
│   │   │   │   ├── msg_24.txt
│   │   │   │   ├── msg_25.txt
│   │   │   │   ├── msg_26.txt
│   │   │   │   ├── msg_27.txt
│   │   │   │   ├── msg_28.txt
│   │   │   │   ├── msg_29.txt
│   │   │   │   ├── msg_30.txt
│   │   │   │   ├── msg_31.txt
│   │   │   │   ├── msg_32.txt
│   │   │   │   ├── msg_33.txt
│   │   │   │   ├── msg_34.txt
│   │   │   │   ├── msg_35.txt
│   │   │   │   ├── msg_36.txt
│   │   │   │   ├── msg_37.txt
│   │   │   │   ├── msg_38.txt
│   │   │   │   ├── msg_39.txt
│   │   │   │   ├── msg_40.txt
│   │   │   │   ├── msg_41.txt
│   │   │   │   ├── msg_42.txt
│   │   │   │   ├── msg_43.txt
│   │   │   │   ├── msg_44.txt
│   │   │   │   ├── msg_45.txt
│   │   │   │   └── msg_46.txt
│   │   │   ├── test__encoded_words.py
│   │   │   ├── test__header_value_parser.py
│   │   │   ├── test_asian_codecs.py
│   │   │   ├── test_contentmanager.py
│   │   │   ├── test_defect_handling.py
│   │   │   ├── test_email.py
│   │   │   ├── test_generator.py
│   │   │   ├── test_headerregistry.py
│   │   │   ├── test_inversion.py
│   │   │   ├── test_message.py
│   │   │   ├── test_parser.py
│   │   │   ├── test_pickleable.py
│   │   │   ├── test_policy.py
│   │   │   ├── test_utils.py
│   │   │   └── torture_test.py
│   │   ├── test_embed.py
│   │   ├── test_ensurepip.py
│   │   ├── test_enum.py
│   │   ├── test_enumerate.py
│   │   ├── test_eof.py
│   │   ├── test_epoll.py
│   │   ├── test_errno.py
│   │   ├── test_exception_hierarchy.py
│   │   ├── test_exception_variations.py
│   │   ├── test_exceptions.py
│   │   ├── test_extcall.py
│   │   ├── test_faulthandler.py
│   │   ├── test_fcntl.py
│   │   ├── test_file.py
│   │   ├── test_file_eintr.py
│   │   ├── test_filecmp.py
│   │   ├── test_fileinput.py
│   │   ├── test_fileio.py
│   │   ├── test_finalization.py
│   │   ├── test_float.py
│   │   ├── test_flufl.py
│   │   ├── test_fnmatch.py
│   │   ├── test_fork1.py
│   │   ├── test_format.py
│   │   ├── test_fractions.py
│   │   ├── test_frame.py
│   │   ├── test_frozen.py
│   │   ├── test_fstring.py
│   │   ├── test_ftplib.py
│   │   ├── test_funcattrs.py
│   │   ├── test_functools.py
│   │   ├── test_future.py
│   │   ├── test_future3.py
│   │   ├── test_future4.py
│   │   ├── test_future5.py
│   │   ├── test_gc.py
│   │   ├── test_gdb.py
│   │   ├── test_generator_stop.py
│   │   ├── test_generators.py
│   │   ├── test_genericalias.py
│   │   ├── test_genericclass.py
│   │   ├── test_genericpath.py
│   │   ├── test_genexps.py
│   │   ├── test_getargs2.py
│   │   ├── test_getopt.py
│   │   ├── test_getpass.py
│   │   ├── test_gettext.py
│   │   ├── test_glob.py
│   │   ├── test_global.py
│   │   ├── test_grammar.py
│   │   ├── test_graphlib.py
│   │   ├── test_grp.py
│   │   ├── test_gzip.py
│   │   ├── test_hash.py
│   │   ├── test_hashlib.py
│   │   ├── test_heapq.py
│   │   ├── test_hmac.py
│   │   ├── test_html.py
│   │   ├── test_htmlparser.py
│   │   ├── test_http_cookiejar.py
│   │   ├── test_http_cookies.py
│   │   ├── test_httplib.py
│   │   ├── test_httpservers.py
│   │   ├── test_idle.py
│   │   ├── test_imaplib.py
│   │   ├── test_imghdr.py
│   │   ├── test_imp.py
│   │   ├── test_import/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── data/
│   │   │       ├── circular_imports/
│   │   │       │   ├── basic.py
│   │   │       │   ├── basic2.py
│   │   │       │   ├── binding.py
│   │   │       │   ├── binding2.py
│   │   │       │   ├── from_cycle1.py
│   │   │       │   ├── from_cycle2.py
│   │   │       │   ├── indirect.py
│   │   │       │   ├── rebinding.py
│   │   │       │   ├── rebinding2.py
│   │   │       │   ├── source.py
│   │   │       │   ├── subpackage.py
│   │   │       │   ├── subpkg/
│   │   │       │   │   ├── subpackage2.py
│   │   │       │   │   └── util.py
│   │   │       │   ├── use.py
│   │   │       │   └── util.py
│   │   │       ├── package/
│   │   │       │   ├── __init__.py
│   │   │       │   └── submodule.py
│   │   │       ├── package2/
│   │   │       │   ├── submodule1.py
│   │   │       │   └── submodule2.py
│   │   │       └── unwritable/
│   │   │           ├── __init__.py
│   │   │           └── x.py
│   │   ├── test_importlib/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── abc.py
│   │   │   ├── builtin/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_finder.py
│   │   │   │   └── test_loader.py
│   │   │   ├── data/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── example-21.12-py3-none-any.whl
│   │   │   │   └── example-21.12-py3.6.egg
│   │   │   ├── data01/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── binary.file
│   │   │   │   ├── subdirectory/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── binary.file
│   │   │   │   ├── utf-16.file
│   │   │   │   └── utf-8.file
│   │   │   ├── data02/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── one/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── resource1.txt
│   │   │   │   └── two/
│   │   │   │       ├── __init__.py
│   │   │   │       └── resource2.txt
│   │   │   ├── data03/
│   │   │   │   ├── __init__.py
│   │   │   │   └── namespace/
│   │   │   │       ├── portion1/
│   │   │   │       │   └── __init__.py
│   │   │   │       ├── portion2/
│   │   │   │       │   └── __init__.py
│   │   │   │       └── resource1.txt
│   │   │   ├── extension/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_case_sensitivity.py
│   │   │   │   ├── test_finder.py
│   │   │   │   ├── test_loader.py
│   │   │   │   └── test_path_hook.py
│   │   │   ├── fixtures.py
│   │   │   ├── frozen/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_finder.py
│   │   │   │   └── test_loader.py
│   │   │   ├── import_/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test___loader__.py
│   │   │   │   ├── test___package__.py
│   │   │   │   ├── test_api.py
│   │   │   │   ├── test_caching.py
│   │   │   │   ├── test_fromlist.py
│   │   │   │   ├── test_meta_path.py
│   │   │   │   ├── test_packages.py
│   │   │   │   ├── test_path.py
│   │   │   │   └── test_relative_imports.py
│   │   │   ├── namespace_pkgs/
│   │   │   │   ├── both_portions/
│   │   │   │   │   └── foo/
│   │   │   │   │       ├── one.py
│   │   │   │   │       └── two.py
│   │   │   │   ├── module_and_namespace_package/
│   │   │   │   │   ├── a_test/
│   │   │   │   │   │   └── empty
│   │   │   │   │   └── a_test.py
│   │   │   │   ├── not_a_namespace_pkg/
│   │   │   │   │   └── foo/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── one.py
│   │   │   │   ├── portion1/
│   │   │   │   │   └── foo/
│   │   │   │   │       └── one.py
│   │   │   │   ├── portion2/
│   │   │   │   │   └── foo/
│   │   │   │   │       └── two.py
│   │   │   │   ├── project1/
│   │   │   │   │   └── parent/
│   │   │   │   │       └── child/
│   │   │   │   │           └── one.py
│   │   │   │   ├── project2/
│   │   │   │   │   └── parent/
│   │   │   │   │       └── child/
│   │   │   │   │           └── two.py
│   │   │   │   └── project3/
│   │   │   │       └── parent/
│   │   │   │           └── child/
│   │   │   │               └── three.py
│   │   │   ├── namespacedata01/
│   │   │   │   ├── binary.file
│   │   │   │   ├── utf-16.file
│   │   │   │   └── utf-8.file
│   │   │   ├── partial/
│   │   │   │   ├── cfimport.py
│   │   │   │   └── pool_in_threads.py
│   │   │   ├── source/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── test_case_sensitivity.py
│   │   │   │   ├── test_file_loader.py
│   │   │   │   ├── test_finder.py
│   │   │   │   ├── test_path_hook.py
│   │   │   │   └── test_source_encoding.py
│   │   │   ├── stubs.py
│   │   │   ├── test_abc.py
│   │   │   ├── test_api.py
│   │   │   ├── test_files.py
│   │   │   ├── test_lazy.py
│   │   │   ├── test_locks.py
│   │   │   ├── test_main.py
│   │   │   ├── test_metadata_api.py
│   │   │   ├── test_namespace_pkgs.py
│   │   │   ├── test_open.py
│   │   │   ├── test_path.py
│   │   │   ├── test_pkg_import.py
│   │   │   ├── test_read.py
│   │   │   ├── test_reader.py
│   │   │   ├── test_resource.py
│   │   │   ├── test_spec.py
│   │   │   ├── test_threaded_import.py
│   │   │   ├── test_util.py
│   │   │   ├── test_windows.py
│   │   │   ├── test_zip.py
│   │   │   ├── threaded_import_hangers.py
│   │   │   ├── update-zips.py
│   │   │   ├── util.py
│   │   │   ├── zipdata01/
│   │   │   │   └── __init__.py
│   │   │   └── zipdata02/
│   │   │       └── __init__.py
│   │   ├── test_index.py
│   │   ├── test_inspect.py
│   │   ├── test_int.py
│   │   ├── test_int_literal.py
│   │   ├── test_interpreters.py
│   │   ├── test_io.py
│   │   ├── test_ioctl.py
│   │   ├── test_ipaddress.py
│   │   ├── test_isinstance.py
│   │   ├── test_iter.py
│   │   ├── test_iterlen.py
│   │   ├── test_itertools.py
│   │   ├── test_json/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_decode.py
│   │   │   ├── test_default.py
│   │   │   ├── test_dump.py
│   │   │   ├── test_encode_basestring_ascii.py
│   │   │   ├── test_enum.py
│   │   │   ├── test_fail.py
│   │   │   ├── test_float.py
│   │   │   ├── test_indent.py
│   │   │   ├── test_pass1.py
│   │   │   ├── test_pass2.py
│   │   │   ├── test_pass3.py
│   │   │   ├── test_recursion.py
│   │   │   ├── test_scanstring.py
│   │   │   ├── test_separators.py
│   │   │   ├── test_speedups.py
│   │   │   ├── test_tool.py
│   │   │   └── test_unicode.py
│   │   ├── test_keyword.py
│   │   ├── test_keywordonlyarg.py
│   │   ├── test_kqueue.py
│   │   ├── test_largefile.py
│   │   ├── test_lib2to3.py
│   │   ├── test_linecache.py
│   │   ├── test_list.py
│   │   ├── test_listcomps.py
│   │   ├── test_lltrace.py
│   │   ├── test_locale.py
│   │   ├── test_logging.py
│   │   ├── test_long.py
│   │   ├── test_longexp.py
│   │   ├── test_lzma.py
│   │   ├── test_mailbox.py
│   │   ├── test_mailcap.py
│   │   ├── test_marshal.py
│   │   ├── test_math.py
│   │   ├── test_memoryio.py
│   │   ├── test_memoryview.py
│   │   ├── test_metaclass.py
│   │   ├── test_mimetypes.py
│   │   ├── test_minidom.py
│   │   ├── test_mmap.py
│   │   ├── test_module.py
│   │   ├── test_modulefinder.py
│   │   ├── test_msilib.py
│   │   ├── test_multibytecodec.py
│   │   ├── test_multiprocessing_fork.py
│   │   ├── test_multiprocessing_forkserver.py
│   │   ├── test_multiprocessing_main_handling.py
│   │   ├── test_multiprocessing_spawn.py
│   │   ├── test_named_expressions.py
│   │   ├── test_netrc.py
│   │   ├── test_nis.py
│   │   ├── test_nntplib.py
│   │   ├── test_ntpath.py
│   │   ├── test_numeric_tower.py
│   │   ├── test_opcache.py
│   │   ├── test_opcodes.py
│   │   ├── test_openpty.py
│   │   ├── test_operator.py
│   │   ├── test_optparse.py
│   │   ├── test_ordered_dict.py
│   │   ├── test_os.py
│   │   ├── test_ossaudiodev.py
│   │   ├── test_osx_env.py
│   │   ├── test_pathlib.py
│   │   ├── test_patma.py
│   │   ├── test_pdb.py
│   │   ├── test_peepholer.py
│   │   ├── test_peg_generator/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_c_parser.py
│   │   │   ├── test_first_sets.py
│   │   │   ├── test_grammar_validator.py
│   │   │   └── test_pegen.py
│   │   ├── test_pickle.py
│   │   ├── test_picklebuffer.py
│   │   ├── test_pickletools.py
│   │   ├── test_pipes.py
│   │   ├── test_pkg.py
│   │   ├── test_pkgutil.py
│   │   ├── test_platform.py
│   │   ├── test_plistlib.py
│   │   ├── test_poll.py
│   │   ├── test_popen.py
│   │   ├── test_poplib.py
│   │   ├── test_positional_only_arg.py
│   │   ├── test_posix.py
│   │   ├── test_posixpath.py
│   │   ├── test_pow.py
│   │   ├── test_pprint.py
│   │   ├── test_print.py
│   │   ├── test_profile.py
│   │   ├── test_property.py
│   │   ├── test_pstats.py
│   │   ├── test_pty.py
│   │   ├── test_pulldom.py
│   │   ├── test_pwd.py
│   │   ├── test_py_compile.py
│   │   ├── test_pyclbr.py
│   │   ├── test_pydoc.py
│   │   ├── test_pyexpat.py
│   │   ├── test_queue.py
│   │   ├── test_quopri.py
│   │   ├── test_raise.py
│   │   ├── test_random.py
│   │   ├── test_range.py
│   │   ├── test_re.py
│   │   ├── test_readline.py
│   │   ├── test_regrtest.py
│   │   ├── test_repl.py
│   │   ├── test_reprlib.py
│   │   ├── test_resource.py
│   │   ├── test_richcmp.py
│   │   ├── test_rlcompleter.py
│   │   ├── test_robotparser.py
│   │   ├── test_runpy.py
│   │   ├── test_sax.py
│   │   ├── test_sched.py
│   │   ├── test_scope.py
│   │   ├── test_script_helper.py
│   │   ├── test_secrets.py
│   │   ├── test_select.py
│   │   ├── test_selectors.py
│   │   ├── test_set.py
│   │   ├── test_setcomps.py
│   │   ├── test_shelve.py
│   │   ├── test_shlex.py
│   │   ├── test_shutil.py
│   │   ├── test_signal.py
│   │   ├── test_site.py
│   │   ├── test_slice.py
│   │   ├── test_smtpd.py
│   │   ├── test_smtplib.py
│   │   ├── test_smtpnet.py
│   │   ├── test_sndhdr.py
│   │   ├── test_socket.py
│   │   ├── test_socketserver.py
│   │   ├── test_sort.py
│   │   ├── test_source_encoding.py
│   │   ├── test_spwd.py
│   │   ├── test_sqlite.py
│   │   ├── test_ssl.py
│   │   ├── test_startfile.py
│   │   ├── test_stat.py
│   │   ├── test_statistics.py
│   │   ├── test_strftime.py
│   │   ├── test_string.py
│   │   ├── test_string_literals.py
│   │   ├── test_stringprep.py
│   │   ├── test_strptime.py
│   │   ├── test_strtod.py
│   │   ├── test_struct.py
│   │   ├── test_structmembers.py
│   │   ├── test_structseq.py
│   │   ├── test_subclassinit.py
│   │   ├── test_subprocess.py
│   │   ├── test_sunau.py
│   │   ├── test_sundry.py
│   │   ├── test_super.py
│   │   ├── test_support.py
│   │   ├── test_symtable.py
│   │   ├── test_syntax.py
│   │   ├── test_sys.py
│   │   ├── test_sys_setprofile.py
│   │   ├── test_sys_settrace.py
│   │   ├── test_sysconfig.py
│   │   ├── test_syslog.py
│   │   ├── test_tabnanny.py
│   │   ├── test_tarfile.py
│   │   ├── test_tcl.py
│   │   ├── test_telnetlib.py
│   │   ├── test_tempfile.py
│   │   ├── test_textwrap.py
│   │   ├── test_thread.py
│   │   ├── test_threadedtempfile.py
│   │   ├── test_threading.py
│   │   ├── test_threading_local.py
│   │   ├── test_threadsignals.py
│   │   ├── test_time.py
│   │   ├── test_timeit.py
│   │   ├── test_timeout.py
│   │   ├── test_tix.py
│   │   ├── test_tk.py
│   │   ├── test_tokenize.py
│   │   ├── test_tools/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── test_fixcid.py
│   │   │   ├── test_gprof2html.py
│   │   │   ├── test_i18n.py
│   │   │   ├── test_lll.py
│   │   │   ├── test_md5sum.py
│   │   │   ├── test_pathfix.py
│   │   │   ├── test_pdeps.py
│   │   │   ├── test_pindent.py
│   │   │   ├── test_reindent.py
│   │   │   └── test_sundry.py
│   │   ├── test_trace.py
│   │   ├── test_traceback.py
│   │   ├── test_tracemalloc.py
│   │   ├── test_ttk_guionly.py
│   │   ├── test_ttk_textonly.py
│   │   ├── test_tuple.py
│   │   ├── test_turtle.py
│   │   ├── test_type_annotations.py
│   │   ├── test_type_comments.py
│   │   ├── test_typechecks.py
│   │   ├── test_types.py
│   │   ├── test_typing.py
│   │   ├── test_ucn.py
│   │   ├── test_unary.py
│   │   ├── test_unicode.py
│   │   ├── test_unicode_file.py
│   │   ├── test_unicode_file_functions.py
│   │   ├── test_unicode_identifiers.py
│   │   ├── test_unicodedata.py
│   │   ├── test_unittest.py
│   │   ├── test_univnewlines.py
│   │   ├── test_unpack.py
│   │   ├── test_unpack_ex.py
│   │   ├── test_unparse.py
│   │   ├── test_urllib.py
│   │   ├── test_urllib2.py
│   │   ├── test_urllib2_localnet.py
│   │   ├── test_urllib2net.py
│   │   ├── test_urllib_response.py
│   │   ├── test_urllibnet.py
│   │   ├── test_urlparse.py
│   │   ├── test_userdict.py
│   │   ├── test_userlist.py
│   │   ├── test_userstring.py
│   │   ├── test_utf8_mode.py
│   │   ├── test_utf8source.py
│   │   ├── test_uu.py
│   │   ├── test_uuid.py
│   │   ├── test_venv.py
│   │   ├── test_wait3.py
│   │   ├── test_wait4.py
│   │   ├── test_warnings/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   └── data/
│   │   │       ├── import_warning.py
│   │   │       └── stacklevel.py
│   │   ├── test_wave.py
│   │   ├── test_weakref.py
│   │   ├── test_weakset.py
│   │   ├── test_webbrowser.py
│   │   ├── test_winconsoleio.py
│   │   ├── test_winreg.py
│   │   ├── test_winsound.py
│   │   ├── test_with.py
│   │   ├── test_wsgiref.py
│   │   ├── test_xdrlib.py
│   │   ├── test_xml_dom_minicompat.py
│   │   ├── test_xml_etree.py
│   │   ├── test_xml_etree_c.py
│   │   ├── test_xmlrpc.py
│   │   ├── test_xmlrpc_net.py
│   │   ├── test_xxlimited.py
│   │   ├── test_xxtestfuzz.py
│   │   ├── test_yield_from.py
│   │   ├── test_zipapp.py
│   │   ├── test_zipfile.py
│   │   ├── test_zipfile64.py
│   │   ├── test_zipimport.py
│   │   ├── test_zipimport_support.py
│   │   ├── test_zlib.py
│   │   ├── test_zoneinfo/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _support.py
│   │   │   ├── data/
│   │   │   │   ├── update_test_data.py
│   │   │   │   └── zoneinfo_data.json
│   │   │   └── test_zoneinfo.py
│   │   ├── testcodec.py
│   │   ├── testtar.tar.xz
│   │   ├── tf_inherit_check.py
│   │   ├── time_hashlib.py
│   │   ├── tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
│   │   ├── tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
│   │   ├── tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
│   │   ├── tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
│   │   ├── tokenize_tests.txt
│   │   ├── tracedmodules/
│   │   │   ├── __init__.py
│   │   │   └── testmod.py
│   │   ├── win_console_handler.py
│   │   ├── xmltestdata/
│   │   │   ├── c14n-20/
│   │   │   │   ├── README
│   │   │   │   ├── c14nComment.xml
│   │   │   │   ├── c14nDefault.xml
│   │   │   │   ├── c14nPrefix.xml
│   │   │   │   ├── c14nPrefixQname.xml
│   │   │   │   ├── c14nPrefixQnameXpathElem.xml
│   │   │   │   ├── c14nQname.xml
│   │   │   │   ├── c14nQnameElem.xml
│   │   │   │   ├── c14nQnameXpathElem.xml
│   │   │   │   ├── c14nTrim.xml
│   │   │   │   ├── doc.dtd
│   │   │   │   ├── doc.xsl
│   │   │   │   ├── inC14N1.xml
│   │   │   │   ├── inC14N2.xml
│   │   │   │   ├── inC14N3.xml
│   │   │   │   ├── inC14N4.xml
│   │   │   │   ├── inC14N5.xml
│   │   │   │   ├── inC14N6.xml
│   │   │   │   ├── inNsContent.xml
│   │   │   │   ├── inNsDefault.xml
│   │   │   │   ├── inNsPushdown.xml
│   │   │   │   ├── inNsRedecl.xml
│   │   │   │   ├── inNsSort.xml
│   │   │   │   ├── inNsSuperfluous.xml
│   │   │   │   ├── inNsXml.xml
│   │   │   │   ├── out_inC14N1_c14nComment.xml
│   │   │   │   ├── out_inC14N1_c14nDefault.xml
│   │   │   │   ├── out_inC14N2_c14nDefault.xml
│   │   │   │   ├── out_inC14N2_c14nTrim.xml
│   │   │   │   ├── out_inC14N3_c14nDefault.xml
│   │   │   │   ├── out_inC14N3_c14nPrefix.xml
│   │   │   │   ├── out_inC14N3_c14nTrim.xml
│   │   │   │   ├── out_inC14N4_c14nDefault.xml
│   │   │   │   ├── out_inC14N4_c14nTrim.xml
│   │   │   │   ├── out_inC14N5_c14nDefault.xml
│   │   │   │   ├── out_inC14N5_c14nTrim.xml
│   │   │   │   ├── out_inC14N6_c14nDefault.xml
│   │   │   │   ├── out_inNsContent_c14nDefault.xml
│   │   │   │   ├── out_inNsContent_c14nPrefixQnameXpathElem.xml
│   │   │   │   ├── out_inNsContent_c14nQnameElem.xml
│   │   │   │   ├── out_inNsContent_c14nQnameXpathElem.xml
│   │   │   │   ├── out_inNsDefault_c14nDefault.xml
│   │   │   │   ├── out_inNsDefault_c14nPrefix.xml
│   │   │   │   ├── out_inNsPushdown_c14nDefault.xml
│   │   │   │   ├── out_inNsPushdown_c14nPrefix.xml
│   │   │   │   ├── out_inNsRedecl_c14nDefault.xml
│   │   │   │   ├── out_inNsRedecl_c14nPrefix.xml
│   │   │   │   ├── out_inNsSort_c14nDefault.xml
│   │   │   │   ├── out_inNsSort_c14nPrefix.xml
│   │   │   │   ├── out_inNsSuperfluous_c14nDefault.xml
│   │   │   │   ├── out_inNsSuperfluous_c14nPrefix.xml
│   │   │   │   ├── out_inNsXml_c14nDefault.xml
│   │   │   │   ├── out_inNsXml_c14nPrefix.xml
│   │   │   │   ├── out_inNsXml_c14nPrefixQname.xml
│   │   │   │   ├── out_inNsXml_c14nQname.xml
│   │   │   │   └── world.txt
│   │   │   ├── expat224_utf8_bug.xml
│   │   │   ├── simple-ns.xml
│   │   │   ├── simple.xml
│   │   │   ├── test.xml
│   │   │   └── test.xml.out
│   │   ├── xmltests.py
│   │   └── ziptestdata/
│   │       ├── README.md
│   │       ├── exe_with_z64
│   │       ├── exe_with_zip
│   │       ├── header.sh
│   │       └── testdata_module_inside_zip.py
│   ├── textwrap.py
│   ├── this.py
│   ├── threading.py
│   ├── timeit.py
│   ├── tkinter/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── colorchooser.py
│   │   ├── commondialog.py
│   │   ├── constants.py
│   │   ├── dialog.py
│   │   ├── dnd.py
│   │   ├── filedialog.py
│   │   ├── font.py
│   │   ├── messagebox.py
│   │   ├── scrolledtext.py
│   │   ├── simpledialog.py
│   │   ├── test/
│   │   │   ├── README
│   │   │   ├── __init__.py
│   │   │   ├── support.py
│   │   │   ├── test_tkinter/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_colorchooser.py
│   │   │   │   ├── test_font.py
│   │   │   │   ├── test_geometry_managers.py
│   │   │   │   ├── test_images.py
│   │   │   │   ├── test_loadtk.py
│   │   │   │   ├── test_messagebox.py
│   │   │   │   ├── test_misc.py
│   │   │   │   ├── test_simpledialog.py
│   │   │   │   ├── test_text.py
│   │   │   │   ├── test_variables.py
│   │   │   │   └── test_widgets.py
│   │   │   ├── test_ttk/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── test_extensions.py
│   │   │   │   ├── test_style.py
│   │   │   │   └── test_widgets.py
│   │   │   └── widget_tests.py
│   │   ├── tix.py
│   │   └── ttk.py
│   ├── token.py
│   ├── tokenize.py
│   ├── trace.py
│   ├── traceback.py
│   ├── tracemalloc.py
│   ├── tty.py
│   ├── turtle.py
│   ├── turtledemo/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── bytedesign.py
│   │   ├── chaos.py
│   │   ├── clock.py
│   │   ├── colormixer.py
│   │   ├── forest.py
│   │   ├── fractalcurves.py
│   │   ├── lindenmayer.py
│   │   ├── minimal_hanoi.py
│   │   ├── nim.py
│   │   ├── paint.py
│   │   ├── peace.py
│   │   ├── penrose.py
│   │   ├── planet_and_moon.py
│   │   ├── rosette.py
│   │   ├── round_dance.py
│   │   ├── sorting_animate.py
│   │   ├── tree.py
│   │   ├── turtle.cfg
│   │   ├── two_canvases.py
│   │   └── yinyang.py
│   ├── types.py
│   ├── typing.py
│   ├── unittest/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── _log.py
│   │   ├── async_case.py
│   │   ├── case.py
│   │   ├── loader.py
│   │   ├── main.py
│   │   ├── mock.py
│   │   ├── result.py
│   │   ├── runner.py
│   │   ├── signals.py
│   │   ├── suite.py
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _test_warnings.py
│   │   │   ├── dummy.py
│   │   │   ├── support.py
│   │   │   ├── test_assertions.py
│   │   │   ├── test_async_case.py
│   │   │   ├── test_break.py
│   │   │   ├── test_case.py
│   │   │   ├── test_discovery.py
│   │   │   ├── test_functiontestcase.py
│   │   │   ├── test_loader.py
│   │   │   ├── test_program.py
│   │   │   ├── test_result.py
│   │   │   ├── test_runner.py
│   │   │   ├── test_setups.py
│   │   │   ├── test_skipping.py
│   │   │   ├── test_suite.py
│   │   │   └── testmock/
│   │   │       ├── __init__.py
│   │   │       ├── __main__.py
│   │   │       ├── support.py
│   │   │       ├── testasync.py
│   │   │       ├── testcallable.py
│   │   │       ├── testhelpers.py
│   │   │       ├── testmagicmethods.py
│   │   │       ├── testmock.py
│   │   │       ├── testpatch.py
│   │   │       ├── testsealable.py
│   │   │       ├── testsentinel.py
│   │   │       └── testwith.py
│   │   └── util.py
│   ├── urllib/
│   │   ├── __init__.py
│   │   ├── error.py
│   │   ├── parse.py
│   │   ├── request.py
│   │   ├── response.py
│   │   └── robotparser.py
│   ├── uu.py
│   ├── uuid.py
│   ├── venv/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   └── scripts/
│   │       ├── common/
│   │       │   ├── Activate.ps1
│   │       │   └── activate
│   │       ├── nt/
│   │       │   ├── activate.bat
│   │       │   └── deactivate.bat
│   │       └── posix/
│   │           ├── activate.csh
│   │           └── activate.fish
│   ├── warnings.py
│   ├── wave.py
│   ├── weakref.py
│   ├── webbrowser.py
│   ├── wsgiref/
│   │   ├── __init__.py
│   │   ├── handlers.py
│   │   ├── headers.py
│   │   ├── simple_server.py
│   │   ├── util.py
│   │   └── validate.py
│   ├── xdrlib.py
│   ├── xml/
│   │   ├── __init__.py
│   │   ├── dom/
│   │   │   ├── NodeFilter.py
│   │   │   ├── __init__.py
│   │   │   ├── domreg.py
│   │   │   ├── expatbuilder.py
│   │   │   ├── minicompat.py
│   │   │   ├── minidom.py
│   │   │   ├── pulldom.py
│   │   │   └── xmlbuilder.py
│   │   ├── etree/
│   │   │   ├── ElementInclude.py
│   │   │   ├── ElementPath.py
│   │   │   ├── ElementTree.py
│   │   │   ├── __init__.py
│   │   │   └── cElementTree.py
│   │   ├── parsers/
│   │   │   ├── __init__.py
│   │   │   └── expat.py
│   │   └── sax/
│   │       ├── __init__.py
│   │       ├── _exceptions.py
│   │       ├── expatreader.py
│   │       ├── handler.py
│   │       ├── saxutils.py
│   │       └── xmlreader.py
│   ├── xmlrpc/
│   │   ├── __init__.py
│   │   ├── client.py
│   │   └── server.py
│   ├── zipapp.py
│   ├── zipfile.py
│   ├── zipimport.py
│   └── zoneinfo/
│       ├── __init__.py
│       ├── _common.py
│       ├── _tzpath.py
│       └── _zoneinfo.py
├── Mac/
│   ├── BuildScript/
│   │   ├── 0001-Darwin-platform-allows-to-build-on-releases-before-Y.patch
│   │   ├── README.rst
│   │   ├── build-installer.py
│   │   ├── resources/
│   │   │   ├── Conclusion.rtf
│   │   │   ├── License.rtf
│   │   │   ├── ReadMe.rtf
│   │   │   ├── Welcome.rtf
│   │   │   └── install_certificates.command
│   │   ├── scripts/
│   │   │   ├── postflight.documentation
│   │   │   ├── postflight.ensurepip
│   │   │   ├── postflight.framework
│   │   │   └── postflight.patch-profile
│   │   ├── seticon.m
│   │   └── tk868_on_10_8_10_9.patch
│   ├── Extras.install.py
│   ├── IDLE/
│   │   └── IDLE.app/
│   │       └── Contents/
│   │           ├── Info.plist
│   │           ├── MacOS/
│   │           │   └── IDLE
│   │           ├── PkgInfo
│   │           └── Resources/
│   │               ├── IDLE.icns
│   │               ├── PythonCompiled.icns
│   │               ├── PythonSource.icns
│   │               └── idlemain.py
│   ├── Icons/
│   │   ├── Disk Image.icns
│   │   ├── IDLE.icns
│   │   ├── Python Folder.icns
│   │   ├── PythonCompiled.icns
│   │   ├── PythonLauncher.icns
│   │   ├── PythonSource.icns
│   │   └── ReadMe.txt
│   ├── Makefile.in
│   ├── PythonLauncher/
│   │   ├── English.lproj/
│   │   │   ├── Credits.rtf
│   │   │   ├── MainMenu.nib/
│   │   │   │   ├── classes.nib
│   │   │   │   ├── info.nib
│   │   │   │   └── objects.nib
│   │   │   ├── MyDocument.nib/
│   │   │   │   ├── classes.nib
│   │   │   │   ├── info.nib
│   │   │   │   └── objects.nib
│   │   │   └── PreferenceWindow.nib/
│   │   │       ├── classes.nib
│   │   │       ├── info.nib
│   │   │       └── objects.nib
│   │   ├── FileSettings.h
│   │   ├── FileSettings.m
│   │   ├── Info.plist.in
│   │   ├── Makefile.in
│   │   ├── MyAppDelegate.h
│   │   ├── MyAppDelegate.m
│   │   ├── MyDocument.h
│   │   ├── MyDocument.m
│   │   ├── PreferencesWindowController.h
│   │   ├── PreferencesWindowController.m
│   │   ├── doscript.h
│   │   ├── doscript.m
│   │   ├── factorySettings.plist
│   │   └── main.m
│   ├── README.rst
│   ├── Resources/
│   │   ├── app/
│   │   │   ├── Info.plist.in
│   │   │   ├── PkgInfo
│   │   │   └── Resources/
│   │   │       ├── PythonApplet.icns
│   │   │       └── PythonInterpreter.icns
│   │   ├── framework/
│   │   │   └── Info.plist.in
│   │   └── iconsrc/
│   │       ├── IDE.psd
│   │       ├── PackageManager.psd
│   │       ├── PythonApplet.psd
│   │       ├── PythonCompiled.psd
│   │       ├── PythonIcon.psd
│   │       ├── PythonSource.psd
│   │       └── PythonWSource.psd
│   └── Tools/
│       ├── plistlib_generate_testdata.py
│       └── pythonw.c
├── Makefile.pre.in
├── Misc/
│   ├── ACKS
│   ├── HISTORY
│   ├── NEWS.d/
│   │   ├── 3.10.0.rst
│   │   ├── 3.10.0a1.rst
│   │   ├── 3.10.0a2.rst
│   │   ├── 3.10.0a3.rst
│   │   ├── 3.10.0a4.rst
│   │   ├── 3.10.0a5.rst
│   │   ├── 3.10.0a6.rst
│   │   ├── 3.10.0a7.rst
│   │   ├── 3.10.0b1.rst
│   │   ├── 3.10.0b2.rst
│   │   ├── 3.10.0b3.rst
│   │   ├── 3.10.0b4.rst
│   │   ├── 3.10.0rc1.rst
│   │   ├── 3.10.0rc2.rst
│   │   ├── 3.10.1.rst
│   │   ├── 3.5.0.rst
│   │   ├── 3.5.0a1.rst
│   │   ├── 3.5.0a2.rst
│   │   ├── 3.5.0a3.rst
│   │   ├── 3.5.0a4.rst
│   │   ├── 3.5.0b1.rst
│   │   ├── 3.5.0b2.rst
│   │   ├── 3.5.0b3.rst
│   │   ├── 3.5.0b4.rst
│   │   ├── 3.5.0rc1.rst
│   │   ├── 3.5.0rc2.rst
│   │   ├── 3.5.0rc3.rst
│   │   ├── 3.5.0rc4.rst
│   │   ├── 3.5.1.rst
│   │   ├── 3.5.1rc1.rst
│   │   ├── 3.5.2.rst
│   │   ├── 3.5.2rc1.rst
│   │   ├── 3.5.3.rst
│   │   ├── 3.5.3rc1.rst
│   │   ├── 3.5.4.rst
│   │   ├── 3.5.4rc1.rst
│   │   ├── 3.5.5.rst
│   │   ├── 3.5.5rc1.rst
│   │   ├── 3.6.0.rst
│   │   ├── 3.6.0a1.rst
│   │   ├── 3.6.0a2.rst
│   │   ├── 3.6.0a3.rst
│   │   ├── 3.6.0a4.rst
│   │   ├── 3.6.0b1.rst
│   │   ├── 3.6.0b2.rst
│   │   ├── 3.6.0b3.rst
│   │   ├── 3.6.0b4.rst
│   │   ├── 3.6.0rc1.rst
│   │   ├── 3.6.0rc2.rst
│   │   ├── 3.6.1.rst
│   │   ├── 3.6.1rc1.rst
│   │   ├── 3.6.2.rst
│   │   ├── 3.6.2rc1.rst
│   │   ├── 3.6.2rc2.rst
│   │   ├── 3.6.3.rst
│   │   ├── 3.6.3rc1.rst
│   │   ├── 3.6.4.rst
│   │   ├── 3.6.4rc1.rst
│   │   ├── 3.6.5.rst
│   │   ├── 3.6.5rc1.rst
│   │   ├── 3.6.6.rst
│   │   ├── 3.6.6rc1.rst
│   │   ├── 3.7.0.rst
│   │   ├── 3.7.0a1.rst
│   │   ├── 3.7.0a2.rst
│   │   ├── 3.7.0a3.rst
│   │   ├── 3.7.0a4.rst
│   │   ├── 3.7.0b1.rst
│   │   ├── 3.7.0b2.rst
│   │   ├── 3.7.0b3.rst
│   │   ├── 3.7.0b4.rst
│   │   ├── 3.7.0b5.rst
│   │   ├── 3.7.0rc1.rst
│   │   ├── 3.8.0a1.rst
│   │   ├── 3.8.0a2.rst
│   │   ├── 3.8.0a3.rst
│   │   ├── 3.8.0a4.rst
│   │   ├── 3.8.0b1.rst
│   │   ├── 3.9.0a1.rst
│   │   ├── 3.9.0a2.rst
│   │   ├── 3.9.0a3.rst
│   │   ├── 3.9.0a4.rst
│   │   ├── 3.9.0a5.rst
│   │   ├── 3.9.0a6.rst
│   │   ├── 3.9.0b1.rst
│   │   └── next/
│   │       ├── Build/
│   │       │   └── README.rst
│   │       ├── C API/
│   │       │   └── README.rst
│   │       ├── Core and Builtins/
│   │       │   └── README.rst
│   │       ├── Documentation/
│   │       │   └── README.rst
│   │       ├── IDLE/
│   │       │   └── README.rst
│   │       ├── Library/
│   │       │   └── README.rst
│   │       ├── Security/
│   │       │   └── README.rst
│   │       ├── Tests/
│   │       │   └── README.rst
│   │       ├── Tools-Demos/
│   │       │   └── README.rst
│   │       ├── Windows/
│   │       │   └── README.rst
│   │       └── macOS/
│   │           └── README.rst
│   ├── Porting
│   ├── README
│   ├── README.AIX
│   ├── README.coverity
│   ├── README.valgrind
│   ├── SpecialBuilds.txt
│   ├── coverity_model.c
│   ├── gdbinit
│   ├── indent.pro
│   ├── python-config.in
│   ├── python-config.sh.in
│   ├── python-embed.pc.in
│   ├── python-wing3.wpr
│   ├── python-wing4.wpr
│   ├── python-wing5.wpr
│   ├── python.man
│   ├── python.pc.in
│   ├── requirements-test.txt
│   ├── stable_abi.txt
│   ├── svnmap.txt
│   ├── valgrind-python.supp
│   └── vgrindefs
├── Modules/
│   ├── README
│   ├── Setup
│   ├── _abc.c
│   ├── _asynciomodule.c
│   ├── _bisectmodule.c
│   ├── _blake2/
│   │   ├── blake2b2s.py
│   │   ├── blake2b_impl.c
│   │   ├── blake2module.c
│   │   ├── blake2ns.h
│   │   ├── blake2s_impl.c
│   │   ├── clinic/
│   │   │   ├── blake2b_impl.c.h
│   │   │   └── blake2s_impl.c.h
│   │   └── impl/
│   │       ├── blake2-config.h
│   │       ├── blake2-dispatch.c
│   │       ├── blake2-impl.h
│   │       ├── blake2-kat.h
│   │       ├── blake2.h
│   │       ├── blake2b-load-sse2.h
│   │       ├── blake2b-load-sse41.h
│   │       ├── blake2b-ref.c
│   │       ├── blake2b-round.h
│   │       ├── blake2b-test.c
│   │       ├── blake2b.c
│   │       ├── blake2bp-test.c
│   │       ├── blake2bp.c
│   │       ├── blake2s-load-sse2.h
│   │       ├── blake2s-load-sse41.h
│   │       ├── blake2s-load-xop.h
│   │       ├── blake2s-ref.c
│   │       ├── blake2s-round.h
│   │       ├── blake2s-test.c
│   │       ├── blake2s.c
│   │       ├── blake2sp-test.c
│   │       └── blake2sp.c
│   ├── _bz2module.c
│   ├── _codecsmodule.c
│   ├── _collectionsmodule.c
│   ├── _contextvarsmodule.c
│   ├── _cryptmodule.c
│   ├── _csv.c
│   ├── _ctypes/
│   │   ├── _ctypes.c
│   │   ├── _ctypes_test.c
│   │   ├── _ctypes_test.h
│   │   ├── callbacks.c
│   │   ├── callproc.c
│   │   ├── cfield.c
│   │   ├── ctypes.h
│   │   ├── ctypes_dlfcn.h
│   │   ├── darwin/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── README.ctypes
│   │   │   ├── dlfcn.h
│   │   │   └── dlfcn_simple.c
│   │   ├── libffi_osx/
│   │   │   ├── LICENSE
│   │   │   ├── README
│   │   │   ├── README.pyobjc
│   │   │   ├── ffi.c
│   │   │   ├── include/
│   │   │   │   ├── ffi.h
│   │   │   │   ├── ffi_common.h
│   │   │   │   ├── fficonfig.h
│   │   │   │   ├── ffitarget.h
│   │   │   │   ├── ppc-ffitarget.h
│   │   │   │   └── x86-ffitarget.h
│   │   │   ├── powerpc/
│   │   │   │   ├── ppc-darwin.S
│   │   │   │   ├── ppc-darwin.h
│   │   │   │   ├── ppc-darwin_closure.S
│   │   │   │   ├── ppc-ffi_darwin.c
│   │   │   │   └── ppc64-darwin_closure.S
│   │   │   ├── types.c
│   │   │   └── x86/
│   │   │       ├── darwin64.S
│   │   │       ├── x86-darwin.S
│   │   │       ├── x86-ffi64.c
│   │   │       └── x86-ffi_darwin.c
│   │   ├── malloc_closure.c
│   │   └── stgdict.c
│   ├── _curses_panel.c
│   ├── _cursesmodule.c
│   ├── _datetimemodule.c
│   ├── _dbmmodule.c
│   ├── _decimal/
│   │   ├── README.txt
│   │   ├── _decimal.c
│   │   ├── docstrings.h
│   │   ├── libmpdec/
│   │   │   ├── README.txt
│   │   │   ├── basearith.c
│   │   │   ├── basearith.h
│   │   │   ├── bench.c
│   │   │   ├── bench_full.c
│   │   │   ├── bits.h
│   │   │   ├── constants.c
│   │   │   ├── constants.h
│   │   │   ├── context.c
│   │   │   ├── convolute.c
│   │   │   ├── convolute.h
│   │   │   ├── crt.c
│   │   │   ├── crt.h
│   │   │   ├── difradix2.c
│   │   │   ├── difradix2.h
│   │   │   ├── examples/
│   │   │   │   ├── README.txt
│   │   │   │   ├── compare.c
│   │   │   │   ├── div.c
│   │   │   │   ├── divmod.c
│   │   │   │   ├── multiply.c
│   │   │   │   ├── pow.c
│   │   │   │   ├── powmod.c
│   │   │   │   ├── shift.c
│   │   │   │   └── sqrt.c
│   │   │   ├── fnt.c
│   │   │   ├── fnt.h
│   │   │   ├── fourstep.c
│   │   │   ├── fourstep.h
│   │   │   ├── io.c
│   │   │   ├── io.h
│   │   │   ├── literature/
│   │   │   │   ├── REFERENCES.txt
│   │   │   │   ├── bignum.txt
│   │   │   │   ├── fnt.py
│   │   │   │   ├── matrix-transform.txt
│   │   │   │   ├── mulmod-64.txt
│   │   │   │   ├── mulmod-ppro.txt
│   │   │   │   ├── six-step.txt
│   │   │   │   └── umodarith.lisp
│   │   │   ├── mpalloc.c
│   │   │   ├── mpalloc.h
│   │   │   ├── mpdecimal.c
│   │   │   ├── mpdecimal.h
│   │   │   ├── mpsignal.c
│   │   │   ├── numbertheory.c
│   │   │   ├── numbertheory.h
│   │   │   ├── sixstep.c
│   │   │   ├── sixstep.h
│   │   │   ├── transpose.c
│   │   │   ├── transpose.h
│   │   │   ├── typearith.h
│   │   │   ├── umodarith.h
│   │   │   └── vcdiv64.asm
│   │   └── tests/
│   │       ├── README.txt
│   │       ├── bench.py
│   │       ├── bignum.py
│   │       ├── deccheck.py
│   │       ├── formathelper.py
│   │       ├── randdec.py
│   │       ├── randfloat.py
│   │       ├── runall-memorydebugger.sh
│   │       └── runall.bat
│   ├── _elementtree.c
│   ├── _functoolsmodule.c
│   ├── _gdbmmodule.c
│   ├── _hashopenssl.c
│   ├── _heapqmodule.c
│   ├── _io/
│   │   ├── _iomodule.c
│   │   ├── _iomodule.h
│   │   ├── bufferedio.c
│   │   ├── bytesio.c
│   │   ├── clinic/
│   │   │   ├── _iomodule.c.h
│   │   │   ├── bufferedio.c.h
│   │   │   ├── bytesio.c.h
│   │   │   ├── fileio.c.h
│   │   │   ├── iobase.c.h
│   │   │   ├── stringio.c.h
│   │   │   ├── textio.c.h
│   │   │   └── winconsoleio.c.h
│   │   ├── fileio.c
│   │   ├── iobase.c
│   │   ├── stringio.c
│   │   ├── textio.c
│   │   └── winconsoleio.c
│   ├── _json.c
│   ├── _localemodule.c
│   ├── _lsprof.c
│   ├── _lzmamodule.c
│   ├── _math.c
│   ├── _math.h
│   ├── _multiprocessing/
│   │   ├── clinic/
│   │   │   ├── multiprocessing.c.h
│   │   │   ├── posixshmem.c.h
│   │   │   └── semaphore.c.h
│   │   ├── multiprocessing.c
│   │   ├── multiprocessing.h
│   │   ├── posixshmem.c
│   │   └── semaphore.c
│   ├── _opcode.c
│   ├── _operator.c
│   ├── _pickle.c
│   ├── _posixsubprocess.c
│   ├── _queuemodule.c
│   ├── _randommodule.c
│   ├── _scproxy.c
│   ├── _sha3/
│   │   ├── README.txt
│   │   ├── cleanup.py
│   │   ├── clinic/
│   │   │   └── sha3module.c.h
│   │   ├── kcp/
│   │   │   ├── KeccakHash.c
│   │   │   ├── KeccakHash.h
│   │   │   ├── KeccakP-1600-64.macros
│   │   │   ├── KeccakP-1600-SnP-opt32.h
│   │   │   ├── KeccakP-1600-SnP-opt64.h
│   │   │   ├── KeccakP-1600-SnP.h
│   │   │   ├── KeccakP-1600-inplace32BI.c
│   │   │   ├── KeccakP-1600-opt64-config.h
│   │   │   ├── KeccakP-1600-opt64.c
│   │   │   ├── KeccakP-1600-unrolling.macros
│   │   │   ├── KeccakSponge.c
│   │   │   ├── KeccakSponge.h
│   │   │   ├── KeccakSponge.inc
│   │   │   ├── PlSnP-Fallback.inc
│   │   │   ├── SnP-Relaned.h
│   │   │   └── align.h
│   │   └── sha3module.c
│   ├── _sqlite/
│   │   ├── cache.c
│   │   ├── cache.h
│   │   ├── clinic/
│   │   │   ├── connection.c.h
│   │   │   ├── cursor.c.h
│   │   │   ├── module.c.h
│   │   │   └── row.c.h
│   │   ├── connection.c
│   │   ├── connection.h
│   │   ├── cursor.c
│   │   ├── cursor.h
│   │   ├── microprotocols.c
│   │   ├── microprotocols.h
│   │   ├── module.c
│   │   ├── module.h
│   │   ├── prepare_protocol.c
│   │   ├── prepare_protocol.h
│   │   ├── row.c
│   │   ├── row.h
│   │   ├── statement.c
│   │   ├── statement.h
│   │   ├── util.c
│   │   └── util.h
│   ├── _sre.c
│   ├── _ssl/
│   │   ├── cert.c
│   │   ├── clinic/
│   │   │   └── cert.c.h
│   │   ├── debughelpers.c
│   │   └── misc.c
│   ├── _ssl.c
│   ├── _ssl.h
│   ├── _ssl_data.h
│   ├── _ssl_data_111.h
│   ├── _ssl_data_300.h
│   ├── _stat.c
│   ├── _statisticsmodule.c
│   ├── _struct.c
│   ├── _testbuffer.c
│   ├── _testcapimodule.c
│   ├── _testimportmultiple.c
│   ├── _testinternalcapi.c
│   ├── _testmultiphase.c
│   ├── _threadmodule.c
│   ├── _tkinter.c
│   ├── _tracemalloc.c
│   ├── _uuidmodule.c
│   ├── _weakref.c
│   ├── _winapi.c
│   ├── _xxsubinterpretersmodule.c
│   ├── _xxtestfuzz/
│   │   ├── README.rst
│   │   ├── _xxtestfuzz.c
│   │   ├── dictionaries/
│   │   │   ├── fuzz_json_loads.dict
│   │   │   └── fuzz_sre_compile.dict
│   │   ├── fuzz_csv_reader_corpus/
│   │   │   └── test.csv
│   │   ├── fuzz_json_loads_corpus/
│   │   │   ├── empty_array.json
│   │   │   ├── empty_object.json
│   │   │   ├── pass1.json
│   │   │   ├── pass2.json
│   │   │   ├── pass3.json
│   │   │   └── simple_array.json
│   │   ├── fuzz_sre_compile_corpus/
│   │   │   ├── anchor_links
│   │   │   ├── characters
│   │   │   ├── isbn
│   │   │   └── phone_number
│   │   ├── fuzz_struct_unpack_corpus/
│   │   │   ├── hello_string
│   │   │   ├── long_zero
│   │   │   └── varied_format_string
│   │   ├── fuzz_tests.txt
│   │   └── fuzzer.c
│   ├── _zoneinfo.c
│   ├── addrinfo.h
│   ├── arraymodule.c
│   ├── atexitmodule.c
│   ├── audioop.c
│   ├── binascii.c
│   ├── cjkcodecs/
│   │   ├── README
│   │   ├── _codecs_cn.c
│   │   ├── _codecs_hk.c
│   │   ├── _codecs_iso2022.c
│   │   ├── _codecs_jp.c
│   │   ├── _codecs_kr.c
│   │   ├── _codecs_tw.c
│   │   ├── alg_jisx0201.h
│   │   ├── cjkcodecs.h
│   │   ├── clinic/
│   │   │   └── multibytecodec.c.h
│   │   ├── emu_jisx0213_2000.h
│   │   ├── mappings_cn.h
│   │   ├── mappings_hk.h
│   │   ├── mappings_jisx0213_pair.h
│   │   ├── mappings_jp.h
│   │   ├── mappings_kr.h
│   │   ├── mappings_tw.h
│   │   ├── multibytecodec.c
│   │   └── multibytecodec.h
│   ├── clinic/
│   │   ├── _abc.c.h
│   │   ├── _asynciomodule.c.h
│   │   ├── _bisectmodule.c.h
│   │   ├── _bz2module.c.h
│   │   ├── _codecsmodule.c.h
│   │   ├── _collectionsmodule.c.h
│   │   ├── _contextvarsmodule.c.h
│   │   ├── _cryptmodule.c.h
│   │   ├── _curses_panel.c.h
│   │   ├── _cursesmodule.c.h
│   │   ├── _datetimemodule.c.h
│   │   ├── _dbmmodule.c.h
│   │   ├── _elementtree.c.h
│   │   ├── _gdbmmodule.c.h
│   │   ├── _hashopenssl.c.h
│   │   ├── _heapqmodule.c.h
│   │   ├── _localemodule.c.h
│   │   ├── _lsprof.c.h
│   │   ├── _lzmamodule.c.h
│   │   ├── _opcode.c.h
│   │   ├── _operator.c.h
│   │   ├── _pickle.c.h
│   │   ├── _queuemodule.c.h
│   │   ├── _randommodule.c.h
│   │   ├── _sre.c.h
│   │   ├── _ssl.c.h
│   │   ├── _statisticsmodule.c.h
│   │   ├── _struct.c.h
│   │   ├── _testmultiphase.c.h
│   │   ├── _tkinter.c.h
│   │   ├── _tracemalloc.c.h
│   │   ├── _weakref.c.h
│   │   ├── _winapi.c.h
│   │   ├── arraymodule.c.h
│   │   ├── audioop.c.h
│   │   ├── binascii.c.h
│   │   ├── cmathmodule.c.h
│   │   ├── fcntlmodule.c.h
│   │   ├── gcmodule.c.h
│   │   ├── grpmodule.c.h
│   │   ├── itertoolsmodule.c.h
│   │   ├── mathmodule.c.h
│   │   ├── md5module.c.h
│   │   ├── overlapped.c.h
│   │   ├── posixmodule.c.h
│   │   ├── pwdmodule.c.h
│   │   ├── pyexpat.c.h
│   │   ├── readline.c.h
│   │   ├── resource.c.h
│   │   ├── selectmodule.c.h
│   │   ├── sha1module.c.h
│   │   ├── sha256module.c.h
│   │   ├── sha512module.c.h
│   │   ├── signalmodule.c.h
│   │   ├── spwdmodule.c.h
│   │   ├── symtablemodule.c.h
│   │   ├── termios.c.h
│   │   ├── unicodedata.c.h
│   │   └── zlibmodule.c.h
│   ├── cmathmodule.c
│   ├── config.c.in
│   ├── errnomodule.c
│   ├── expat/
│   │   ├── COPYING
│   │   ├── ascii.h
│   │   ├── asciitab.h
│   │   ├── expat.h
│   │   ├── expat_config.h
│   │   ├── expat_external.h
│   │   ├── iasciitab.h
│   │   ├── internal.h
│   │   ├── latin1tab.h
│   │   ├── nametab.h
│   │   ├── pyexpatns.h
│   │   ├── siphash.h
│   │   ├── utf8tab.h
│   │   ├── winconfig.h
│   │   ├── xmlparse.c
│   │   ├── xmlrole.c
│   │   ├── xmlrole.h
│   │   ├── xmltok.c
│   │   ├── xmltok.h
│   │   ├── xmltok_impl.c
│   │   ├── xmltok_impl.h
│   │   └── xmltok_ns.c
│   ├── faulthandler.c
│   ├── fcntlmodule.c
│   ├── gc_weakref.txt
│   ├── gcmodule.c
│   ├── getaddrinfo.c
│   ├── getbuildinfo.c
│   ├── getnameinfo.c
│   ├── getpath.c
│   ├── grpmodule.c
│   ├── hashlib.h
│   ├── itertoolsmodule.c
│   ├── ld_so_aix.in
│   ├── main.c
│   ├── makesetup
│   ├── makexp_aix
│   ├── mathmodule.c
│   ├── md5module.c
│   ├── mmapmodule.c
│   ├── nismodule.c
│   ├── ossaudiodev.c
│   ├── overlapped.c
│   ├── posixmodule.c
│   ├── posixmodule.h
│   ├── pwdmodule.c
│   ├── pyexpat.c
│   ├── readline.c
│   ├── resource.c
│   ├── rotatingtree.c
│   ├── rotatingtree.h
│   ├── selectmodule.c
│   ├── sha1module.c
│   ├── sha256module.c
│   ├── sha512module.c
│   ├── signalmodule.c
│   ├── socketmodule.c
│   ├── socketmodule.h
│   ├── spwdmodule.c
│   ├── sre.h
│   ├── sre_constants.h
│   ├── sre_lib.h
│   ├── symtablemodule.c
│   ├── syslogmodule.c
│   ├── termios.c
│   ├── testcapi_long.h
│   ├── timemodule.c
│   ├── tkappinit.c
│   ├── tkinter.h
│   ├── unicodedata.c
│   ├── unicodedata_db.h
│   ├── unicodename_db.h
│   ├── winreparse.h
│   ├── xxlimited.c
│   ├── xxlimited_35.c
│   ├── xxmodule.c
│   ├── xxsubtype.c
│   └── zlibmodule.c
├── Objects/
│   ├── README
│   ├── abstract.c
│   ├── accu.c
│   ├── boolobject.c
│   ├── bytearrayobject.c
│   ├── bytes_methods.c
│   ├── bytesobject.c
│   ├── call.c
│   ├── capsule.c
│   ├── cellobject.c
│   ├── classobject.c
│   ├── clinic/
│   │   ├── bytearrayobject.c.h
│   │   ├── bytesobject.c.h
│   │   ├── codeobject.c.h
│   │   ├── complexobject.c.h
│   │   ├── descrobject.c.h
│   │   ├── dictobject.c.h
│   │   ├── enumobject.c.h
│   │   ├── floatobject.c.h
│   │   ├── funcobject.c.h
│   │   ├── listobject.c.h
│   │   ├── longobject.c.h
│   │   ├── memoryobject.c.h
│   │   ├── moduleobject.c.h
│   │   ├── odictobject.c.h
│   │   ├── structseq.c.h
│   │   ├── tupleobject.c.h
│   │   ├── typeobject.c.h
│   │   └── unicodeobject.c.h
│   ├── codeobject.c
│   ├── complexobject.c
│   ├── descrobject.c
│   ├── dict-common.h
│   ├── dictnotes.txt
│   ├── dictobject.c
│   ├── enumobject.c
│   ├── exceptions.c
│   ├── fileobject.c
│   ├── floatobject.c
│   ├── frameobject.c
│   ├── funcobject.c
│   ├── genericaliasobject.c
│   ├── genobject.c
│   ├── interpreteridobject.c
│   ├── iterobject.c
│   ├── listobject.c
│   ├── listsort.txt
│   ├── lnotab_notes.txt
│   ├── longobject.c
│   ├── memoryobject.c
│   ├── methodobject.c
│   ├── moduleobject.c
│   ├── namespaceobject.c
│   ├── object.c
│   ├── obmalloc.c
│   ├── odictobject.c
│   ├── picklebufobject.c
│   ├── rangeobject.c
│   ├── setobject.c
│   ├── sliceobject.c
│   ├── stringlib/
│   │   ├── README.txt
│   │   ├── asciilib.h
│   │   ├── clinic/
│   │   │   └── transmogrify.h.h
│   │   ├── codecs.h
│   │   ├── count.h
│   │   ├── ctype.h
│   │   ├── eq.h
│   │   ├── fastsearch.h
│   │   ├── find.h
│   │   ├── find_max_char.h
│   │   ├── join.h
│   │   ├── localeutil.h
│   │   ├── partition.h
│   │   ├── replace.h
│   │   ├── split.h
│   │   ├── stringdefs.h
│   │   ├── stringlib_find_two_way_notes.txt
│   │   ├── transmogrify.h
│   │   ├── ucs1lib.h
│   │   ├── ucs2lib.h
│   │   ├── ucs4lib.h
│   │   ├── undef.h
│   │   ├── unicode_format.h
│   │   └── unicodedefs.h
│   ├── structseq.c
│   ├── tupleobject.c
│   ├── typeobject.c
│   ├── typeslots.inc
│   ├── typeslots.py
│   ├── unicodectype.c
│   ├── unicodeobject.c
│   ├── unicodetype_db.h
│   ├── unionobject.c
│   └── weakrefobject.c
├── PC/
│   ├── WinMain.c
│   ├── _msi.c
│   ├── _testconsole.c
│   ├── classicAppCompat.can.xml
│   ├── classicAppCompat.cat
│   ├── classicAppCompat.sccd
│   ├── clinic/
│   │   ├── _msi.c.h
│   │   ├── _testconsole.c.h
│   │   ├── msvcrtmodule.c.h
│   │   ├── winreg.c.h
│   │   └── winsound.c.h
│   ├── config.c
│   ├── crtlicense.txt
│   ├── dl_nt.c
│   ├── empty.c
│   ├── errmap.h
│   ├── errmap.mak
│   ├── frozen_dllmain.c
│   ├── getpathp.c
│   ├── icons/
│   │   ├── launcher.icns
│   │   ├── py.icns
│   │   ├── pyc.icns
│   │   ├── pyd.icns
│   │   ├── python.icns
│   │   ├── pythonw.icns
│   │   └── setup.icns
│   ├── invalid_parameter_handler.c
│   ├── launcher.c
│   ├── layout/
│   │   ├── __init__.py
│   │   ├── __main__.py
│   │   ├── main.py
│   │   └── support/
│   │       ├── __init__.py
│   │       ├── appxmanifest.py
│   │       ├── catalog.py
│   │       ├── constants.py
│   │       ├── filesets.py
│   │       ├── logging.py
│   │       ├── nuspec.py
│   │       ├── options.py
│   │       ├── pip.py
│   │       ├── props.py
│   │       └── python.props
│   ├── msvcrtmodule.c
│   ├── pyconfig.h
│   ├── pylauncher.rc
│   ├── pyshellext.cpp
│   ├── pyshellext.def
│   ├── pyshellext.rc
│   ├── python.manifest
│   ├── python3dll.c
│   ├── python_exe.rc
│   ├── python_nt.rc
│   ├── python_uwp.cpp
│   ├── python_ver_rc.h
│   ├── pythonw_exe.rc
│   ├── readme.txt
│   ├── sqlite3.rc
│   ├── store_info.txt
│   ├── testpy.py
│   ├── validate_ucrtbase.py
│   ├── win7compat.c
│   ├── winreg.c
│   └── winsound.c
├── PCbuild/
│   ├── Directory.Build.props
│   ├── Directory.Build.targets
│   ├── _asyncio.vcxproj
│   ├── _asyncio.vcxproj.filters
│   ├── _bz2.vcxproj
│   ├── _bz2.vcxproj.filters
│   ├── _ctypes.vcxproj
│   ├── _ctypes.vcxproj.filters
│   ├── _ctypes_test.vcxproj
│   ├── _ctypes_test.vcxproj.filters
│   ├── _decimal.vcxproj
│   ├── _decimal.vcxproj.filters
│   ├── _elementtree.vcxproj
│   ├── _elementtree.vcxproj.filters
│   ├── _freeze_importlib.vcxproj
│   ├── _freeze_importlib.vcxproj.filters
│   ├── _hashlib.vcxproj
│   ├── _hashlib.vcxproj.filters
│   ├── _lzma.vcxproj
│   ├── _lzma.vcxproj.filters
│   ├── _msi.vcxproj
│   ├── _msi.vcxproj.filters
│   ├── _multiprocessing.vcxproj
│   ├── _multiprocessing.vcxproj.filters
│   ├── _overlapped.vcxproj
│   ├── _overlapped.vcxproj.filters
│   ├── _queue.vcxproj
│   ├── _queue.vcxproj.filters
│   ├── _socket.vcxproj
│   ├── _socket.vcxproj.filters
│   ├── _sqlite3.vcxproj
│   ├── _sqlite3.vcxproj.filters
│   ├── _ssl.vcxproj
│   ├── _ssl.vcxproj.filters
│   ├── _testbuffer.vcxproj
│   ├── _testbuffer.vcxproj.filters
│   ├── _testcapi.vcxproj
│   ├── _testcapi.vcxproj.filters
│   ├── _testconsole.vcxproj
│   ├── _testconsole.vcxproj.filters
│   ├── _testembed.vcxproj
│   ├── _testembed.vcxproj.filters
│   ├── _testimportmultiple.vcxproj
│   ├── _testimportmultiple.vcxproj.filters
│   ├── _testinternalcapi.vcxproj
│   ├── _testinternalcapi.vcxproj.filters
│   ├── _testmultiphase.vcxproj
│   ├── _testmultiphase.vcxproj.filters
│   ├── _tkinter.vcxproj
│   ├── _tkinter.vcxproj.filters
│   ├── _uuid.vcxproj
│   ├── _uuid.vcxproj.filters
│   ├── _zoneinfo.vcxproj
│   ├── _zoneinfo.vcxproj.filters
│   ├── blurb.bat
│   ├── build.bat
│   ├── build_env.bat
│   ├── clean.bat
│   ├── env.bat
│   ├── env.ps1
│   ├── field3.py
│   ├── find_msbuild.bat
│   ├── find_python.bat
│   ├── fix_encoding.py
│   ├── get_external.py
│   ├── get_externals.bat
│   ├── idle.bat
│   ├── lib.pyproj
│   ├── libffi.props
│   ├── liblzma.vcxproj
│   ├── liblzma.vcxproj.filters
│   ├── openssl.props
│   ├── openssl.vcxproj
│   ├── pcbuild.proj
│   ├── pcbuild.sln
│   ├── prepare_libffi.bat
│   ├── prepare_ssl.bat
│   ├── prepare_ssl.py
│   ├── prepare_tcltk.bat
│   ├── pyexpat.vcxproj
│   ├── pyexpat.vcxproj.filters
│   ├── pylauncher.vcxproj
│   ├── pylauncher.vcxproj.filters
│   ├── pyproject.props
│   ├── pyshellext.vcxproj
│   ├── pyshellext.vcxproj.filters
│   ├── python.props
│   ├── python.vcxproj
│   ├── python.vcxproj.filters
│   ├── python3dll.vcxproj
│   ├── python3dll.vcxproj.filters
│   ├── python_uwp.vcxproj
│   ├── python_uwp.vcxproj.filters
│   ├── pythoncore.vcxproj
│   ├── pythoncore.vcxproj.filters
│   ├── pythonw.vcxproj
│   ├── pythonw.vcxproj.filters
│   ├── pythonw_uwp.vcxproj
│   ├── pythonw_uwp.vcxproj.filters
│   ├── pywlauncher.vcxproj
│   ├── pywlauncher.vcxproj.filters
│   ├── readme.txt
│   ├── regen.targets
│   ├── rmpyc.py
│   ├── rt.bat
│   ├── select.vcxproj
│   ├── select.vcxproj.filters
│   ├── sqlite3.vcxproj
│   ├── sqlite3.vcxproj.filters
│   ├── tcl.vcxproj
│   ├── tcltk.props
│   ├── tix.vcxproj
│   ├── tk.vcxproj
│   ├── unicodedata.vcxproj
│   ├── unicodedata.vcxproj.filters
│   ├── urlretrieve.py
│   ├── venvlauncher.vcxproj
│   ├── venvlauncher.vcxproj.filters
│   ├── venvwlauncher.vcxproj
│   ├── venvwlauncher.vcxproj.filters
│   ├── winsound.vcxproj
│   ├── winsound.vcxproj.filters
│   ├── xxlimited.vcxproj
│   ├── xxlimited.vcxproj.filters
│   ├── xxlimited_35.vcxproj
│   └── xxlimited_35.vcxproj.filters
├── Parser/
│   ├── Python.asdl
│   ├── asdl.py
│   ├── asdl_c.py
│   ├── myreadline.c
│   ├── parser.c
│   ├── peg_api.c
│   ├── pegen.c
│   ├── pegen.h
│   ├── pegen_errors.c
│   ├── string_parser.c
│   ├── string_parser.h
│   ├── token.c
│   ├── tokenizer.c
│   └── tokenizer.h
├── Programs/
│   ├── README
│   ├── _freeze_importlib.c
│   ├── _testembed.c
│   └── python.c
├── Python/
│   ├── Python-ast.c
│   ├── README
│   ├── _warnings.c
│   ├── asdl.c
│   ├── ast.c
│   ├── ast_opt.c
│   ├── ast_unparse.c
│   ├── bltinmodule.c
│   ├── bootstrap_hash.c
│   ├── ceval.c
│   ├── ceval_gil.h
│   ├── clinic/
│   │   ├── _warnings.c.h
│   │   ├── bltinmodule.c.h
│   │   ├── context.c.h
│   │   ├── import.c.h
│   │   ├── marshal.c.h
│   │   ├── sysmodule.c.h
│   │   └── traceback.c.h
│   ├── codecs.c
│   ├── compile.c
│   ├── condvar.h
│   ├── context.c
│   ├── dtoa.c
│   ├── dup2.c
│   ├── dynamic_annotations.c
│   ├── dynload_hpux.c
│   ├── dynload_shlib.c
│   ├── dynload_stub.c
│   ├── dynload_win.c
│   ├── errors.c
│   ├── fileutils.c
│   ├── formatter_unicode.c
│   ├── frozen.c
│   ├── frozen_hello.h
│   ├── frozenmain.c
│   ├── future.c
│   ├── getargs.c
│   ├── getcompiler.c
│   ├── getcopyright.c
│   ├── getopt.c
│   ├── getplatform.c
│   ├── getversion.c
│   ├── hamt.c
│   ├── hashtable.c
│   ├── import.c
│   ├── importdl.c
│   ├── importdl.h
│   ├── importlib.h
│   ├── importlib_external.h
│   ├── importlib_zipimport.h
│   ├── initconfig.c
│   ├── makeopcodetargets.py
│   ├── marshal.c
│   ├── modsupport.c
│   ├── mysnprintf.c
│   ├── mystrtoul.c
│   ├── opcode_targets.h
│   ├── pathconfig.c
│   ├── preconfig.c
│   ├── pyarena.c
│   ├── pyctype.c
│   ├── pyfpe.c
│   ├── pyhash.c
│   ├── pylifecycle.c
│   ├── pymath.c
│   ├── pystate.c
│   ├── pystrcmp.c
│   ├── pystrhex.c
│   ├── pystrtod.c
│   ├── pythonrun.c
│   ├── pytime.c
│   ├── stdlib_module_names.h
│   ├── structmember.c
│   ├── suggestions.c
│   ├── symtable.c
│   ├── sysmodule.c
│   ├── thread.c
│   ├── thread_nt.h
│   ├── thread_pthread.h
│   ├── traceback.c
│   └── wordcode_helpers.h
├── README.rst
├── Tools/
│   ├── README
│   ├── buildbot/
│   │   ├── build.bat
│   │   ├── buildmsi.bat
│   │   ├── clean.bat
│   │   ├── remoteDeploy.bat
│   │   ├── remotePythonInfo.bat
│   │   └── test.bat
│   ├── c-analyzer/
│   │   ├── README
│   │   ├── TODO
│   │   ├── c-analyzer.py
│   │   ├── c_analyzer/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── analyze.py
│   │   │   ├── datafiles.py
│   │   │   ├── info.py
│   │   │   └── match.py
│   │   ├── c_common/
│   │   │   ├── __init__.py
│   │   │   ├── clsutil.py
│   │   │   ├── fsutil.py
│   │   │   ├── info.py
│   │   │   ├── iterutil.py
│   │   │   ├── logging.py
│   │   │   ├── misc.py
│   │   │   ├── scriptutil.py
│   │   │   ├── show.py
│   │   │   ├── strutil.py
│   │   │   └── tables.py
│   │   ├── c_parser/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _state_machine.py
│   │   │   ├── datafiles.py
│   │   │   ├── info.py
│   │   │   ├── match.py
│   │   │   ├── parser/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── _alt.py
│   │   │   │   ├── _common.py
│   │   │   │   ├── _compound_decl_body.py
│   │   │   │   ├── _delim.py
│   │   │   │   ├── _func_body.py
│   │   │   │   ├── _global.py
│   │   │   │   ├── _info.py
│   │   │   │   └── _regexes.py
│   │   │   ├── preprocessor/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── common.py
│   │   │   │   ├── errors.py
│   │   │   │   ├── gcc.py
│   │   │   │   └── pure.py
│   │   │   └── source.py
│   │   ├── check-c-globals.py
│   │   ├── cpython/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── _analyzer.py
│   │   │   ├── _capi.py
│   │   │   ├── _files.py
│   │   │   ├── _parser.py
│   │   │   ├── ignored.tsv
│   │   │   └── known.tsv
│   │   └── must-resolve.sh
│   ├── ccbench/
│   │   └── ccbench.py
│   ├── clinic/
│   │   ├── clinic.py
│   │   └── cpp.py
│   ├── demo/
│   │   ├── README
│   │   ├── beer.py
│   │   ├── eiffel.py
│   │   ├── hanoi.py
│   │   ├── life.py
│   │   ├── markov.py
│   │   ├── mcast.py
│   │   ├── queens.py
│   │   ├── redemo.py
│   │   ├── rpython.py
│   │   ├── rpythond.py
│   │   ├── sortvisu.py
│   │   ├── spreadsheet.py
│   │   └── vector.py
│   ├── freeze/
│   │   ├── README
│   │   ├── bkfile.py
│   │   ├── checkextensions.py
│   │   ├── checkextensions_win32.py
│   │   ├── extensions_win32.ini
│   │   ├── flag.py
│   │   ├── freeze.py
│   │   ├── hello.py
│   │   ├── makeconfig.py
│   │   ├── makefreeze.py
│   │   ├── makemakefile.py
│   │   ├── parsesetup.py
│   │   ├── regen_frozen.py
│   │   ├── test/
│   │   │   ├── Makefile
│   │   │   └── ok.py
│   │   ├── win32.html
│   │   └── winmakemakefile.py
│   ├── gdb/
│   │   └── libpython.py
│   ├── i18n/
│   │   ├── makelocalealias.py
│   │   ├── msgfmt.py
│   │   └── pygettext.py
│   ├── importbench/
│   │   ├── README
│   │   └── importbench.py
│   ├── iobench/
│   │   └── iobench.py
│   ├── msi/
│   │   ├── README.txt
│   │   ├── build.bat
│   │   ├── buildrelease.bat
│   │   ├── bundle/
│   │   │   ├── Default.thm
│   │   │   ├── Default.wxl
│   │   │   ├── bootstrap/
│   │   │   │   ├── LICENSE.txt
│   │   │   │   ├── PythonBootstrapperApplication.cpp
│   │   │   │   ├── pch.cpp
│   │   │   │   ├── pch.h
│   │   │   │   ├── pythonba.cpp
│   │   │   │   ├── pythonba.def
│   │   │   │   ├── pythonba.sln
│   │   │   │   ├── pythonba.vcxproj
│   │   │   │   └── resource.h
│   │   │   ├── bundle.targets
│   │   │   ├── bundle.wxl
│   │   │   ├── bundle.wxs
│   │   │   ├── full.wixproj
│   │   │   ├── packagegroups/
│   │   │   │   ├── core.wxs
│   │   │   │   ├── crt.wxs
│   │   │   │   ├── dev.wxs
│   │   │   │   ├── doc.wxs
│   │   │   │   ├── exe.wxs
│   │   │   │   ├── launcher.wxs
│   │   │   │   ├── lib.wxs
│   │   │   │   ├── packageinstall.wxs
│   │   │   │   ├── pip.wxs
│   │   │   │   ├── postinstall.wxs
│   │   │   │   ├── tcltk.wxs
│   │   │   │   ├── test.wxs
│   │   │   │   └── tools.wxs
│   │   │   ├── releaselocal.wixproj
│   │   │   ├── releaseweb.wixproj
│   │   │   └── snapshot.wixproj
│   │   ├── common.wxs
│   │   ├── common_en-US.wxl_template
│   │   ├── csv_to_wxs.py
│   │   ├── dev/
│   │   │   ├── dev.wixproj
│   │   │   ├── dev.wxs
│   │   │   ├── dev_d.wixproj
│   │   │   ├── dev_d.wxs
│   │   │   ├── dev_en-US.wxl
│   │   │   └── dev_files.wxs
│   │   ├── doc/
│   │   │   ├── doc.wixproj
│   │   │   ├── doc.wxs
│   │   │   ├── doc_en-US.wxl_template
│   │   │   ├── doc_files.wxs
│   │   │   └── doc_no_files.wxs
│   │   ├── exe/
│   │   │   ├── exe.wixproj
│   │   │   ├── exe.wxs
│   │   │   ├── exe_d.wixproj
│   │   │   ├── exe_d.wxs
│   │   │   ├── exe_en-US.wxl_template
│   │   │   ├── exe_files.wxs
│   │   │   ├── exe_pdb.wixproj
│   │   │   ├── exe_pdb.wxs
│   │   │   └── exe_reg.wxs
│   │   ├── generate_md5.py
│   │   ├── get_externals.bat
│   │   ├── launcher/
│   │   │   ├── launcher.wixproj
│   │   │   ├── launcher.wxs
│   │   │   ├── launcher_en-US.wxl
│   │   │   ├── launcher_files.wxs
│   │   │   └── launcher_reg.wxs
│   │   ├── lib/
│   │   │   ├── lib.wixproj
│   │   │   ├── lib.wxs
│   │   │   ├── lib_d.wixproj
│   │   │   ├── lib_d.wxs
│   │   │   ├── lib_en-US.wxl
│   │   │   ├── lib_files.wxs
│   │   │   ├── lib_pdb.wixproj
│   │   │   └── lib_pdb.wxs
│   │   ├── make_appx.ps1
│   │   ├── make_cat.ps1
│   │   ├── make_zip.proj
│   │   ├── msi.props
│   │   ├── msi.targets
│   │   ├── path/
│   │   │   ├── path.wixproj
│   │   │   ├── path.wxs
│   │   │   └── path_en-US.wxl
│   │   ├── pip/
│   │   │   ├── pip.wixproj
│   │   │   ├── pip.wxs
│   │   │   └── pip_en-US.wxl
│   │   ├── purge.py
│   │   ├── sdktools.psm1
│   │   ├── sign_build.ps1
│   │   ├── tcltk/
│   │   │   ├── tcltk.wixproj
│   │   │   ├── tcltk.wxs
│   │   │   ├── tcltk_d.wixproj
│   │   │   ├── tcltk_d.wxs
│   │   │   ├── tcltk_en-US.wxl_template
│   │   │   ├── tcltk_files.wxs
│   │   │   ├── tcltk_pdb.wixproj
│   │   │   ├── tcltk_pdb.wxs
│   │   │   └── tcltk_reg.wxs
│   │   ├── test/
│   │   │   ├── test.wixproj
│   │   │   ├── test.wxs
│   │   │   ├── test_d.wixproj
│   │   │   ├── test_d.wxs
│   │   │   ├── test_en-US.wxl
│   │   │   ├── test_files.wxs
│   │   │   ├── test_pdb.wixproj
│   │   │   └── test_pdb.wxs
│   │   ├── testrelease.bat
│   │   ├── tools/
│   │   │   ├── tools.wixproj
│   │   │   ├── tools.wxs
│   │   │   ├── tools_en-US.wxl
│   │   │   └── tools_files.wxs
│   │   ├── ucrt/
│   │   │   ├── ucrt.wixproj
│   │   │   ├── ucrt.wxs
│   │   │   └── ucrt_en-US.wxl
│   │   ├── uploadrelease.bat
│   │   ├── uploadrelease.proj
│   │   ├── uploadrelease.ps1
│   │   └── wix.props
│   ├── nuget/
│   │   ├── build.bat
│   │   ├── make_pkg.proj
│   │   ├── python.nuspec
│   │   ├── pythonarm32.nuspec
│   │   ├── pythondaily.nuspec
│   │   ├── pythondaily.symbols.nuspec
│   │   └── pythonx86.nuspec
│   ├── peg_generator/
│   │   ├── .clang-format
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── data/
│   │   │   ├── cprog.py
│   │   │   └── top-pypi-packages-365-days.json
│   │   ├── mypy.ini
│   │   ├── peg_extension/
│   │   │   ├── __init__.py
│   │   │   └── peg_extension.c
│   │   ├── pegen/
│   │   │   ├── __init__.py
│   │   │   ├── __main__.py
│   │   │   ├── ast_dump.py
│   │   │   ├── build.py
│   │   │   ├── c_generator.py
│   │   │   ├── first_sets.py
│   │   │   ├── grammar.py
│   │   │   ├── grammar_parser.py
│   │   │   ├── grammar_visualizer.py
│   │   │   ├── keywordgen.py
│   │   │   ├── metagrammar.gram
│   │   │   ├── parser.py
│   │   │   ├── parser_generator.py
│   │   │   ├── python_generator.py
│   │   │   ├── sccutils.py
│   │   │   ├── testutil.py
│   │   │   ├── tokenizer.py
│   │   │   └── validator.py
│   │   ├── pyproject.toml
│   │   ├── requirements.pip
│   │   └── scripts/
│   │       ├── __init__.py
│   │       ├── ast_timings.py
│   │       ├── benchmark.py
│   │       ├── download_pypi_packages.py
│   │       ├── find_max_nesting.py
│   │       ├── grammar_grapher.py
│   │       ├── joinstats.py
│   │       ├── test_parse_directory.py
│   │       └── test_pypi_packages.py
│   ├── pynche/
│   │   ├── ChipViewer.py
│   │   ├── ColorDB.py
│   │   ├── DetailsViewer.py
│   │   ├── ListViewer.py
│   │   ├── Main.py
│   │   ├── PyncheWidget.py
│   │   ├── README
│   │   ├── StripViewer.py
│   │   ├── Switchboard.py
│   │   ├── TextViewer.py
│   │   ├── TypeinViewer.py
│   │   ├── X/
│   │   │   ├── rgb.txt
│   │   │   └── xlicense.txt
│   │   ├── __init__.py
│   │   ├── html40colors.txt
│   │   ├── namedcolors.txt
│   │   ├── pyColorChooser.py
│   │   ├── pynche
│   │   ├── pynche.pyw
│   │   ├── webcolors.txt
│   │   └── websafe.txt
│   ├── scripts/
│   │   ├── 2to3
│   │   ├── README
│   │   ├── abitype.py
│   │   ├── analyze_dxp.py
│   │   ├── byext.py
│   │   ├── byteyears.py
│   │   ├── checkpip.py
│   │   ├── cleanfuture.py
│   │   ├── combinerefs.py
│   │   ├── copytime.py
│   │   ├── crlf.py
│   │   ├── db2pickle.py
│   │   ├── diff.py
│   │   ├── dutree.doc
│   │   ├── dutree.py
│   │   ├── eptags.py
│   │   ├── find-uname.py
│   │   ├── find_recursionlimit.py
│   │   ├── finddiv.py
│   │   ├── findlinksto.py
│   │   ├── findnocoding.py
│   │   ├── fixcid.py
│   │   ├── fixdiv.py
│   │   ├── fixheader.py
│   │   ├── fixnotice.py
│   │   ├── fixps.py
│   │   ├── generate_opcode_h.py
│   │   ├── generate_stdlib_module_names.py
│   │   ├── generate_token.py
│   │   ├── get-remote-certificate.py
│   │   ├── google.py
│   │   ├── gprof2html.py
│   │   ├── highlight.py
│   │   ├── idle3
│   │   ├── ifdef.py
│   │   ├── import_diagnostics.py
│   │   ├── lfcr.py
│   │   ├── linktree.py
│   │   ├── lll.py
│   │   ├── mailerdaemon.py
│   │   ├── make_ctype.py
│   │   ├── md5sum.py
│   │   ├── mkreal.py
│   │   ├── ndiff.py
│   │   ├── nm2def.py
│   │   ├── objgraph.py
│   │   ├── parse_html5_entities.py
│   │   ├── parseentities.py
│   │   ├── patchcheck.py
│   │   ├── pathfix.py
│   │   ├── pdeps.py
│   │   ├── pep384_macrocheck.py
│   │   ├── pickle2db.py
│   │   ├── pindent.py
│   │   ├── ptags.py
│   │   ├── pydoc3
│   │   ├── pysource.py
│   │   ├── reindent-rst.py
│   │   ├── reindent.py
│   │   ├── rgrep.py
│   │   ├── run_tests.py
│   │   ├── serve.py
│   │   ├── smelly.py
│   │   ├── stable_abi.py
│   │   ├── suff.py
│   │   ├── texi2html.py
│   │   ├── untabify.py
│   │   ├── update_file.py
│   │   ├── var_access_benchmark.py
│   │   ├── which.py
│   │   └── win_add2path.py
│   ├── ssl/
│   │   ├── make_ssl_data.py
│   │   └── multissltests.py
│   ├── stringbench/
│   │   ├── README
│   │   └── stringbench.py
│   ├── test2to3/
│   │   ├── README
│   │   ├── maintest.py
│   │   ├── setup.py
│   │   ├── test/
│   │   │   ├── runtests.py
│   │   │   └── test_foo.py
│   │   └── test2to3/
│   │       ├── __init__.py
│   │       └── hello.py
│   ├── tz/
│   │   └── zdump.py
│   ├── unicode/
│   │   ├── Makefile
│   │   ├── comparecodecs.py
│   │   ├── gencjkcodecs.py
│   │   ├── gencodec.py
│   │   ├── genmap_japanese.py
│   │   ├── genmap_korean.py
│   │   ├── genmap_schinese.py
│   │   ├── genmap_support.py
│   │   ├── genwincodec.py
│   │   ├── genwincodecs.bat
│   │   ├── listcodecs.py
│   │   ├── makeunicodedata.py
│   │   ├── mkstringprep.py
│   │   └── python-mappings/
│   │       ├── CP1140.TXT
│   │       ├── CP273.TXT
│   │       ├── GB2312.TXT
│   │       ├── KOI8-U.TXT
│   │       ├── TIS-620.TXT
│   │       ├── diff/
│   │       │   ├── jisx0213-2000-std.txt.diff
│   │       │   └── jisx0213-2004-std.txt.diff
│   │       ├── gb-18030-2000.xml
│   │       └── jisx0213-2004-std.txt
│   └── unittestgui/
│       ├── README.txt
│       └── unittestgui.py
├── Win7.rst
├── aclocal.m4
├── config.guess
├── config.sub
├── configure
├── configure.ac
├── install-sh
├── netlify.toml
├── pyconfig.h.in
└── setup.py
Copy disabled (too large) Download .json
Condensed preview — 4350 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (88,880K chars).
[
  {
    "path": ".azure-pipelines/ci.yml",
    "chars": 2677,
    "preview": "variables:\n  coverage: false\n\ntrigger: ['main', '3.10', '3.9', '3.8', '3.7']\n\njobs:\n- job: Prebuild\n  displayName: Pre-b"
  },
  {
    "path": ".azure-pipelines/docs-steps.yml",
    "chars": 1371,
    "preview": "parameters:\n  latex: false\n  upload: false\n\nsteps:\n- checkout: self\n  clean: true\n  fetchDepth: 5\n\n- task: UsePythonVers"
  },
  {
    "path": ".azure-pipelines/macos-steps.yml",
    "chars": 768,
    "preview": "steps:\n- checkout: self\n  clean: true\n  fetchDepth: 5\n\n- script: ./configure --with-pydebug --with-openssl=/usr/local/op"
  },
  {
    "path": ".azure-pipelines/posix-deps-apt.sh",
    "chars": 590,
    "preview": "#!/bin/sh\napt-get update\n\napt-get -yq install \\\n    build-essential \\\n    zlib1g-dev \\\n    libbz2-dev \\\n    liblzma-dev "
  },
  {
    "path": ".azure-pipelines/posix-steps.yml",
    "chars": 2626,
    "preview": "parameters:\n  coverage: false\n  sudo_dependencies: sudo\n  dependencies: apt\n  patchcheck: true\n  xvfb: true\n\nsteps:\n- ch"
  },
  {
    "path": ".azure-pipelines/pr.yml",
    "chars": 2634,
    "preview": "variables:\n  coverage: false\n\npr: ['main', '3.10', '3.9', '3.8', '3.7']\n\njobs:\n- job: Prebuild\n  displayName: Pre-build "
  },
  {
    "path": ".azure-pipelines/prebuild-checks.yml",
    "chars": 1218,
    "preview": "steps:\n- checkout: self\n  fetchDepth: 5\n\n- script: echo \"##vso[task.setvariable variable=diffTarget]HEAD~1\"\n  displayNam"
  },
  {
    "path": ".azure-pipelines/windows-layout-steps.yml",
    "chars": 1492,
    "preview": "parameters:\n  kind: nuget\n  extraOpts: --precompile\n  fulltest: false\n\nsteps:\n- script: .\\python.bat PC\\layout -vv -s \"$"
  },
  {
    "path": ".azure-pipelines/windows-release/build-steps.yml",
    "chars": 3128,
    "preview": "parameters:\n  ShouldPGO: false\n\nsteps:\n- template: ./checkout.yml\n\n- powershell: |\n    $d = (.\\PCbuild\\build.bat -V) | %"
  },
  {
    "path": ".azure-pipelines/windows-release/checkout.yml",
    "chars": 1176,
    "preview": "parameters:\n  depth: 3\n\nsteps:\n- checkout: none\n\n- script: git clone --progress -v --depth ${{ parameters.depth }} --bra"
  },
  {
    "path": ".azure-pipelines/windows-release/find-sdk.yml",
    "chars": 619,
    "preview": "# Locate the Windows SDK and add its binaries directory to PATH\n#\n# `toolname` can be overridden to use a different mark"
  },
  {
    "path": ".azure-pipelines/windows-release/gpg-sign.yml",
    "chars": 850,
    "preview": "parameters:\n  GPGKeyFile: $(GPGKey)\n  GPGPassphrase: $(GPGPassphrase)\n  Files: '*'\n  WorkingDirectory: $(Build.BinariesD"
  },
  {
    "path": ".azure-pipelines/windows-release/layout-command.yml",
    "chars": 638,
    "preview": "steps:\n- task: DownloadPipelineArtifact@1\n  displayName: 'Download artifact: bin_$(HostArch)'\n  condition: and(succeeded"
  },
  {
    "path": ".azure-pipelines/windows-release/mingw-lib.yml",
    "chars": 591,
    "preview": "parameters:\n  DllToolOpt: -m i386:x86-64\n  #DllToolOpt: -m i386 --as-flags=--32\n\nsteps:\n- powershell: |\n    git clone ht"
  },
  {
    "path": ".azure-pipelines/windows-release/msi-steps.yml",
    "chars": 4475,
    "preview": "steps:\n  - template: ./checkout.yml\n\n  - powershell: |\n      $d = (.\\PCbuild\\build.bat -V) | %{ if($_ -match '\\s+(\\w+):\\"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-build.yml",
    "chars": 3999,
    "preview": "jobs:\n- job: Build_Docs\n  displayName: Docs build\n  pool:\n    name: 'Windows Release'\n    #vmImage: windows-2019\n\n  work"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-layout-embed.yml",
    "chars": 1821,
    "preview": "jobs:\n- job: Make_Embed_Layout\n  displayName: Make embeddable layout\n  condition: and(succeeded(), eq(variables['DoEmbed"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-layout-full.yml",
    "chars": 2264,
    "preview": "jobs:\n- job: Make_Layouts\n  displayName: Make layouts\n  condition: and(succeeded(), eq(variables['DoLayout'], 'true'))\n\n"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-layout-msix.yml",
    "chars": 3393,
    "preview": "jobs:\n- job: Make_MSIX_Layout\n  displayName: Make MSIX layout\n\n  pool:\n    vmImage: windows-2019\n\n  workspace:\n    clean"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-layout-nuget.yml",
    "chars": 1498,
    "preview": "jobs:\n- job: Make_Nuget_Layout\n  displayName: Make Nuget layout\n  condition: and(succeeded(), eq(variables['DoNuget'], '"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-msi.yml",
    "chars": 814,
    "preview": "jobs:\n- job: Make_MSI\n  displayName: Make MSI\n  condition: and(succeeded(), not(variables['SigningCertificate']))\n\n  poo"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-pack-msix.yml",
    "chars": 4653,
    "preview": "jobs:\n- job: Pack_MSIX\n  displayName: Pack MSIX bundles\n\n  pool:\n    vmImage: windows-2019\n\n  workspace:\n    clean: all\n"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-pack-nuget.yml",
    "chars": 1368,
    "preview": "jobs:\n- job: Pack_Nuget\n  displayName: Pack Nuget bundles\n  condition: and(succeeded(), eq(variables['DoNuget'], 'true')"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-publish-nugetorg.yml",
    "chars": 1456,
    "preview": "jobs:\n- job: Publish_Nuget\n  displayName: Publish Nuget packages\n  condition: and(succeeded(), eq(variables['DoNuget'], "
  },
  {
    "path": ".azure-pipelines/windows-release/stage-publish-pythonorg.yml",
    "chars": 5372,
    "preview": "jobs:\n- job: Publish_Python\n  displayName: Publish python.org packages\n  condition: and(succeeded(), and(eq(variables['D"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-publish-store.yml",
    "chars": 983,
    "preview": "jobs:\n- job: Publish_Store\n  displayName: Publish Store packages\n  condition: and(succeeded(), eq(variables['DoMSIX'], '"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-sign.yml",
    "chars": 3819,
    "preview": "parameters:\n  Include: '*.exe, *.dll, *.pyd, *.cat, *.ps1'\n  Exclude: 'vcruntime*, libffi*, libcrypto*, libssl*'\n\njobs:\n"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-test-embed.yml",
    "chars": 991,
    "preview": "jobs:\n- job: Test_Embed\n  displayName: Test Embed\n  condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))\n\n  poo"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-test-msi.yml",
    "chars": 3267,
    "preview": "jobs:\n- job: Test_MSI\n  displayName: Test MSI\n\n  pool:\n    vmImage: windows-2019\n\n  workspace:\n    clean: all\n\n  strateg"
  },
  {
    "path": ".azure-pipelines/windows-release/stage-test-nuget.yml",
    "chars": 1346,
    "preview": "jobs:\n- job: Test_Nuget\n  displayName: Test Nuget\n  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))\n\n  poo"
  },
  {
    "path": ".azure-pipelines/windows-release.yml",
    "chars": 3957,
    "preview": "name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr)\n\nvariables:\n    __RealSigningCertificate"
  },
  {
    "path": ".azure-pipelines/windows-steps.yml",
    "chars": 1490,
    "preview": "steps:\n- checkout: self\n  clean: false\n  fetchDepth: 5\n\n- powershell: |\n    # Relocate build outputs outside of source d"
  },
  {
    "path": ".editorconfig",
    "chars": 181,
    "preview": "root = true\n\n[*.{py,c,cpp,h,rst,md,yml}]\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nindent_style = spac"
  },
  {
    "path": ".gitattributes",
    "chars": 2000,
    "preview": "# Binary data types\n*.aif binary\n*.aifc binary\n*.aiff binary\n*.au binary\n*.bmp binary\n*.exe binary\n*.icns binary\n*.gif b"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 4588,
    "preview": "# See https://help.github.com/articles/about-codeowners/\n# for more info about CODEOWNERS file\n\n# It uses the same patte"
  },
  {
    "path": ".github/CONTRIBUTING.rst",
    "chars": 2412,
    "preview": "Contributing to Python\n======================\n\nBuild Status\n------------\n\n- master\n\n  + `Stable buildbots <http://buildb"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 74,
    "preview": "custom: https://www.python.org/psf/donations/python-dev/\ngithub: [python]\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 700,
    "preview": "<!--\nThanks for your contribution!\nPlease read this comment in its entirety. It's quite important.\n\n# Pull Request title"
  },
  {
    "path": ".github/SECURITY.md",
    "chars": 491,
    "preview": "# Security Policy\n\n## Supported Versions\n\nThe Python team applies security fixes according to the table\nin [the devguide"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 172,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n "
  },
  {
    "path": ".github/problem-matchers/gcc.json",
    "chars": 513,
    "preview": "{\n    \"__comment\": \"Taken from vscode-cpptools's Extension/package.json gcc rule\",\n    \"problemMatcher\": [\n        {\n   "
  },
  {
    "path": ".github/problem-matchers/msvc.json",
    "chars": 550,
    "preview": "{\n    \"__comment\": \"Taken from vscode's vs/workbench/contrib/tasks/common/problemMatcher.ts msCompile rule\",\n    \"proble"
  },
  {
    "path": ".github/problem-matchers/sphinx.json",
    "chars": 1292,
    "preview": "{\n    \"problemMatcher\": [\n        {\n            \"owner\": \"sphinx-problem-matcher\",\n            \"pattern\": [\n            "
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 9969,
    "preview": "name: Tests\n\n# bpo-40548: \"paths-ignore\" is not used to skip documentation-only PRs, because\n# it prevents to mark a job"
  },
  {
    "path": ".github/workflows/build_msi.yml",
    "chars": 648,
    "preview": "name: TestsMSI\n\non:\n  push:\n    branches:\n    - master\n    - 3.10\n    - 3.9\n    - 3.8\n    - 3.7\n    paths:\n    - 'Tools/"
  },
  {
    "path": ".github/workflows/doc.yml",
    "chars": 1062,
    "preview": "name: Docs\n\non:\n  #push:\n  #  branches:\n  #  - master\n  #  - 3.9\n  #  - 3.8\n  #  - 3.7\n  #  paths:\n  #  - 'Doc/**'\n  pul"
  },
  {
    "path": ".github/workflows/posix-deps-apt.sh",
    "chars": 362,
    "preview": "#!/bin/sh\napt-get update\n\napt-get -yq install \\\n    build-essential \\\n    ccache \\\n    gdb \\\n    lcov \\\n    libbz2-dev \\"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 444,
    "preview": "name: Mark stale pull requests\n\non:\n  schedule:\n  - cron: \"0 0 * * *\"\n\npermissions:\n  pull-requests: write\n\njobs:\n  stal"
  },
  {
    "path": ".gitignore",
    "chars": 2324,
    "preview": "#####\n# First, rules intended to apply in all subdirectories.\n# These contain no slash, or only a trailing slash.\n\n*.cov"
  },
  {
    "path": ".travis.yml",
    "chars": 6647,
    "preview": "language: c\ndist: bionic\n\n# To cache doc-building dependencies and C compiler output.\ncache:\n  - pip\n  - ccache\n  - dire"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 630,
    "preview": "# Code of Conduct\n\nPlease note that all interactions on\n[Python Software Foundation](https://www.python.org/psf-landing/"
  },
  {
    "path": "Doc/Makefile",
    "chars": 8915,
    "preview": "#\n# Makefile for Python documentation\n# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#\n\n# You can set these variables from the comm"
  },
  {
    "path": "Doc/README.rst",
    "chars": 4869,
    "preview": "Python Documentation README\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis directory contains the reStructuredText (reST) sources to "
  },
  {
    "path": "Doc/about.rst",
    "chars": 1522,
    "preview": "=====================\nAbout these documents\n=====================\n\n\nThese documents are generated from `reStructuredText"
  },
  {
    "path": "Doc/bugs.rst",
    "chars": 4745,
    "preview": ".. _reporting-bugs:\n\n*****************\nDealing with Bugs\n*****************\n\nPython is a mature programming language whic"
  },
  {
    "path": "Doc/c-api/abstract.rst",
    "chars": 723,
    "preview": ".. highlight:: c\n\n.. _abstract:\n\n**********************\nAbstract Objects Layer\n**********************\n\nThe functions in "
  },
  {
    "path": "Doc/c-api/allocation.rst",
    "chars": 2645,
    "preview": ".. highlight:: c\n\n.. _allocating-objects:\n\nAllocating Objects on the Heap\n==============================\n\n\n.. c:function"
  },
  {
    "path": "Doc/c-api/apiabiversion.rst",
    "chars": 2369,
    "preview": ".. highlight:: c\n\n.. _apiabiversion:\n\n***********************\nAPI and ABI Versioning\n***********************\n\nCPython ex"
  },
  {
    "path": "Doc/c-api/arg.rst",
    "chars": 30788,
    "preview": ".. highlight:: c\n\n.. _arg-parsing:\n\nParsing arguments and building values\n=====================================\n\nThese f"
  },
  {
    "path": "Doc/c-api/bool.rst",
    "chars": 1231,
    "preview": ".. highlight:: c\n\n.. _boolobjects:\n\nBoolean Objects\n---------------\n\nBooleans in Python are implemented as a subclass of"
  },
  {
    "path": "Doc/c-api/buffer.rst",
    "chars": 22890,
    "preview": ".. highlight:: c\n\n.. index::\n   single: buffer protocol\n   single: buffer interface; (see buffer protocol)\n   single: bu"
  },
  {
    "path": "Doc/c-api/bytearray.rst",
    "chars": 2316,
    "preview": ".. highlight:: c\n\n.. _bytearrayobjects:\n\nByte Array Objects\n------------------\n\n.. index:: object: bytearray\n\n\n.. c:type"
  },
  {
    "path": "Doc/c-api/bytes.rst",
    "chars": 9422,
    "preview": ".. highlight:: c\n\n.. _bytesobjects:\n\nBytes Objects\n-------------\n\nThese functions raise :exc:`TypeError` when expecting "
  },
  {
    "path": "Doc/c-api/call.rst",
    "chars": 17545,
    "preview": ".. highlight:: c\n\n.. _call:\n\nCall Protocol\n=============\n\nCPython supports two different calling protocols:\n*tp_call* an"
  },
  {
    "path": "Doc/c-api/capsule.rst",
    "chars": 5817,
    "preview": ".. highlight:: c\n\n.. _capsules:\n\nCapsules\n--------\n\n.. index:: object: Capsule\n\nRefer to :ref:`using-capsules` for more "
  },
  {
    "path": "Doc/c-api/cell.rst",
    "chars": 1983,
    "preview": ".. highlight:: c\n\n.. _cell-objects:\n\nCell Objects\n------------\n\n\"Cell\" objects are used to implement variables reference"
  },
  {
    "path": "Doc/c-api/code.rst",
    "chars": 2625,
    "preview": ".. highlight:: c\n\n.. _codeobjects:\n\n.. index:: object; code, code object\n\nCode Objects\n------------\n\n.. sectionauthor:: "
  },
  {
    "path": "Doc/c-api/codec.rst",
    "chars": 5128,
    "preview": ".. _codec-registry:\n\nCodec registry and support functions\n====================================\n\n.. c:function:: int PyCo"
  },
  {
    "path": "Doc/c-api/complex.rst",
    "chars": 4232,
    "preview": ".. highlight:: c\n\n.. _complexobjects:\n\nComplex Number Objects\n----------------------\n\n.. index:: object: complex number\n"
  },
  {
    "path": "Doc/c-api/concrete.rst",
    "chars": 2081,
    "preview": ".. highlight:: c\n\n\n.. _concrete:\n\n**********************\nConcrete Objects Layer\n**********************\n\nThe functions in"
  },
  {
    "path": "Doc/c-api/contextvars.rst",
    "chars": 4205,
    "preview": ".. highlight:: c\n\n.. _contextvarsobjects:\n\nContext Variables Objects\n-------------------------\n\n.. _contextvarsobjects_p"
  },
  {
    "path": "Doc/c-api/conversion.rst",
    "chars": 5389,
    "preview": ".. highlight:: c\n\n.. _string-conversion:\n\nString conversion and formatting\n================================\n\nFunctions f"
  },
  {
    "path": "Doc/c-api/coro.rst",
    "chars": 862,
    "preview": ".. highlight:: c\n\n.. _coro-objects:\n\nCoroutine Objects\n-----------------\n\n.. versionadded:: 3.5\n\nCoroutine objects are w"
  },
  {
    "path": "Doc/c-api/datetime.rst",
    "chars": 8367,
    "preview": ".. highlight:: c\n\n.. _datetimeobjects:\n\nDateTime Objects\n----------------\n\nVarious date and time objects are supplied by"
  },
  {
    "path": "Doc/c-api/descriptor.rst",
    "chars": 1111,
    "preview": ".. highlight:: c\n\n.. _descriptor-objects:\n\nDescriptor Objects\n------------------\n\n\"Descriptors\" are objects that describ"
  },
  {
    "path": "Doc/c-api/dict.rst",
    "chars": 8710,
    "preview": ".. highlight:: c\n\n.. _dictobjects:\n\nDictionary Objects\n------------------\n\n.. index:: object: dictionary\n\n\n.. c:type:: P"
  },
  {
    "path": "Doc/c-api/exceptions.rst",
    "chars": 50423,
    "preview": ".. highlight:: c\n\n\n.. _exceptionhandling:\n\n******************\nException Handling\n******************\n\nThe functions descr"
  },
  {
    "path": "Doc/c-api/file.rst",
    "chars": 4357,
    "preview": ".. highlight:: c\n\n.. _fileobjects:\n\nFile Objects\n------------\n\n.. index:: object: file\n\nThese APIs are a minimal emulati"
  },
  {
    "path": "Doc/c-api/float.rst",
    "chars": 2324,
    "preview": ".. highlight:: c\n\n.. _floatobjects:\n\nFloating Point Objects\n----------------------\n\n.. index:: object: floating point\n\n\n"
  },
  {
    "path": "Doc/c-api/function.rst",
    "chars": 3454,
    "preview": ".. highlight:: c\n\n.. _function-objects:\n\nFunction Objects\n----------------\n\n.. index:: object: function\n\nThere are a few"
  },
  {
    "path": "Doc/c-api/gcsupport.rst",
    "chars": 8726,
    "preview": ".. highlight:: c\n\n.. _supporting-cycle-detection:\n\nSupporting Cyclic Garbage Collection\n================================"
  },
  {
    "path": "Doc/c-api/gen.rst",
    "chars": 1383,
    "preview": ".. highlight:: c\n\n.. _gen-objects:\n\nGenerator Objects\n-----------------\n\nGenerator objects are what Python uses to imple"
  },
  {
    "path": "Doc/c-api/import.rst",
    "chars": 12931,
    "preview": ".. highlight:: c\n\n.. _importing:\n\nImporting Modules\n=================\n\n\n.. c:function:: PyObject* PyImport_ImportModule("
  },
  {
    "path": "Doc/c-api/index.rst",
    "chars": 632,
    "preview": ".. _c-api-index:\n\n##################################\n  Python/C API Reference Manual\n##################################\n"
  },
  {
    "path": "Doc/c-api/init.rst",
    "chars": 71168,
    "preview": ".. highlight:: c\n\n\n.. _initialization:\n\n*****************************************\nInitialization, Finalization, and Thre"
  },
  {
    "path": "Doc/c-api/init_config.rst",
    "chars": 49373,
    "preview": ".. highlight:: c\n\n.. _init-config:\n\n***********************************\nPython Initialization Configuration\n************"
  },
  {
    "path": "Doc/c-api/intro.rst",
    "chars": 32455,
    "preview": ".. highlight:: c\n\n\n.. _api-intro:\n\n************\nIntroduction\n************\n\nThe Application Programmer's Interface to Pyt"
  },
  {
    "path": "Doc/c-api/iter.rst",
    "chars": 2027,
    "preview": ".. highlight:: c\n\n.. _iterator:\n\nIterator Protocol\n=================\n\nThere are two functions specifically for working w"
  },
  {
    "path": "Doc/c-api/iterator.rst",
    "chars": 1706,
    "preview": ".. highlight:: c\n\n.. _iterator-objects:\n\nIterator Objects\n----------------\n\nPython provides two general-purpose iterator"
  },
  {
    "path": "Doc/c-api/list.rst",
    "chars": 4725,
    "preview": ".. highlight:: c\n\n.. _listobjects:\n\nList Objects\n------------\n\n.. index:: object: list\n\n\n.. c:type:: PyListObject\n\n   Th"
  },
  {
    "path": "Doc/c-api/long.rst",
    "chars": 10746,
    "preview": ".. highlight:: c\n\n.. _longobjects:\n\nInteger Objects\n---------------\n\n.. index:: object: long integer\n           object: "
  },
  {
    "path": "Doc/c-api/mapping.rst",
    "chars": 3550,
    "preview": ".. highlight:: c\n\n.. _mapping:\n\nMapping Protocol\n================\n\nSee also :c:func:`PyObject_GetItem`, :c:func:`PyObjec"
  },
  {
    "path": "Doc/c-api/marshal.rst",
    "chars": 3561,
    "preview": ".. highlight:: c\n\n.. _marshalling-utils:\n\nData marshalling support\n========================\n\nThese routines allow C code"
  },
  {
    "path": "Doc/c-api/memory.rst",
    "chars": 29760,
    "preview": ".. highlight:: c\n\n\n.. _memory:\n\n*****************\nMemory Management\n*****************\n\n.. sectionauthor:: Vladimir Maran"
  },
  {
    "path": "Doc/c-api/memoryview.rst",
    "chars": 2381,
    "preview": ".. highlight:: c\n\n.. _memoryview-objects:\n\n.. index::\n   object: memoryview\n\nMemoryView objects\n------------------\n\nA :c"
  },
  {
    "path": "Doc/c-api/method.rst",
    "chars": 2773,
    "preview": ".. highlight:: c\n\n.. _instancemethod-objects:\n\nInstance Method Objects\n-----------------------\n\n.. index:: object: insta"
  },
  {
    "path": "Doc/c-api/module.rst",
    "chars": 23370,
    "preview": ".. highlight:: c\n\n.. _moduleobjects:\n\nModule Objects\n--------------\n\n.. index:: object: module\n\n\n.. c:var:: PyTypeObject"
  },
  {
    "path": "Doc/c-api/none.rst",
    "chars": 736,
    "preview": ".. highlight:: c\n\n.. _noneobject:\n\nThe ``None`` Object\n-------------------\n\n.. index:: object: None\n\nNote that the :c:ty"
  },
  {
    "path": "Doc/c-api/number.rst",
    "chars": 10933,
    "preview": ".. highlight:: c\n\n.. _number:\n\nNumber Protocol\n===============\n\n\n.. c:function:: int PyNumber_Check(PyObject *o)\n\n   Ret"
  },
  {
    "path": "Doc/c-api/objbuffer.rst",
    "chars": 2448,
    "preview": ".. highlight:: c\n\nOld Buffer Protocol\n-------------------\n\n.. deprecated:: 3.0\n\nThese functions were part of the \"old bu"
  },
  {
    "path": "Doc/c-api/object.rst",
    "chars": 15099,
    "preview": ".. highlight:: c\n\n.. _object:\n\nObject Protocol\n===============\n\n\n.. c:var:: PyObject* Py_NotImplemented\n\n   The ``NotImp"
  },
  {
    "path": "Doc/c-api/objimpl.rst",
    "chars": 300,
    "preview": ".. highlight:: c\n\n.. _newtypes:\n\n*****************************\nObject Implementation Support\n***************************"
  },
  {
    "path": "Doc/c-api/refcounting.rst",
    "chars": 4113,
    "preview": ".. highlight:: c\n\n\n.. _countingrefs:\n\n******************\nReference Counting\n******************\n\nThe macros in this secti"
  },
  {
    "path": "Doc/c-api/reflection.rst",
    "chars": 1985,
    "preview": ".. highlight:: c\n\n.. _reflection:\n\nReflection\n==========\n\n.. c:function:: PyObject* PyEval_GetBuiltins(void)\n\n   Return "
  },
  {
    "path": "Doc/c-api/sequence.rst",
    "chars": 6775,
    "preview": ".. highlight:: c\n\n.. _sequence:\n\nSequence Protocol\n=================\n\n\n.. c:function:: int PySequence_Check(PyObject *o)"
  },
  {
    "path": "Doc/c-api/set.rst",
    "chars": 6371,
    "preview": ".. highlight:: c\n\n.. _setobjects:\n\nSet Objects\n-----------\n\n.. sectionauthor:: Raymond D. Hettinger <python@rcn.com>\n\n\n."
  },
  {
    "path": "Doc/c-api/slice.rst",
    "chars": 4578,
    "preview": ".. highlight:: c\n\n.. _slice-objects:\n\nSlice Objects\n-------------\n\n\n.. c:var:: PyTypeObject PySlice_Type\n\n   The type ob"
  },
  {
    "path": "Doc/c-api/stable.rst",
    "chars": 6576,
    "preview": ".. highlight:: c\n\n.. _stable:\n\n***************\nC API Stability\n***************\n\nPython's C API is covered by the Backwar"
  },
  {
    "path": "Doc/c-api/structures.rst",
    "chars": 19789,
    "preview": ".. highlight:: c\n\n.. _common-structs:\n\nCommon Object Structures\n========================\n\nThere are a large number of st"
  },
  {
    "path": "Doc/c-api/sys.rst",
    "chars": 16854,
    "preview": ".. highlight:: c\n\n.. _os:\n\nOperating System Utilities\n==========================\n\n.. c:function:: PyObject* PyOS_FSPath("
  },
  {
    "path": "Doc/c-api/tuple.rst",
    "chars": 8649,
    "preview": ".. highlight:: c\n\n.. _tupleobjects:\n\nTuple Objects\n-------------\n\n.. index:: object: tuple\n\n\n.. c:type:: PyTupleObject\n\n"
  },
  {
    "path": "Doc/c-api/type.rst",
    "chars": 10101,
    "preview": ".. highlight:: c\n\n.. _typeobjects:\n\nType Objects\n------------\n\n.. index:: object: type\n\n\n.. c:type:: PyTypeObject\n\n   Th"
  },
  {
    "path": "Doc/c-api/typehints.rst",
    "chars": 1710,
    "preview": ".. highlight:: c\n\n.. _typehintobjects:\n\nObjects for Type Hinting\n------------------------\n\nVarious built-in types for ty"
  },
  {
    "path": "Doc/c-api/typeobj.rst",
    "chars": 128844,
    "preview": ".. highlight:: c\n\n.. _type-structs:\n\nType Objects\n============\n\nPerhaps one of the most important structures of the Pyth"
  },
  {
    "path": "Doc/c-api/unicode.rst",
    "chars": 69488,
    "preview": ".. highlight:: c\n\n.. _unicodeobjects:\n\nUnicode Objects and Codecs\n--------------------------\n\n.. sectionauthor:: Marc-An"
  },
  {
    "path": "Doc/c-api/utilities.rst",
    "chars": 410,
    "preview": ".. highlight:: c\n\n.. _utilities:\n\n*********\nUtilities\n*********\n\nThe functions in this chapter perform various utility t"
  },
  {
    "path": "Doc/c-api/veryhigh.rst",
    "chars": 15853,
    "preview": ".. highlight:: c\n\n\n.. _veryhigh:\n\n*************************\nThe Very High Level Layer\n*************************\n\nThe fun"
  },
  {
    "path": "Doc/c-api/weakref.rst",
    "chars": 2753,
    "preview": ".. highlight:: c\n\n.. _weakrefobjects:\n\nWeak Reference Objects\n----------------------\n\nPython supports *weak references* "
  },
  {
    "path": "Doc/conf.py",
    "chars": 7362,
    "preview": "#\n# Python documentation build configuration file\n#\n# This file is execfile()d with the current directory set to its con"
  },
  {
    "path": "Doc/contents.rst",
    "chars": 538,
    "preview": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n Python Documentation contents\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n.. toctree::\n\n   whats"
  },
  {
    "path": "Doc/copyright.rst",
    "chars": 447,
    "preview": "*********\nCopyright\n*********\n\nPython and this documentation is:\n\nCopyright © 2001-2021 Python Software Foundation. All "
  },
  {
    "path": "Doc/data/python3.10.abi",
    "chars": 1910062,
    "preview": "<abi-corpus path='libpython3.10.so' soname='libpython3.10.so.1.0'>\n  <elf-needed>\n    <dependency name='libpthread.so.0'"
  },
  {
    "path": "Doc/distributing/index.rst",
    "chars": 7354,
    "preview": ".. _distributing-index:\n\n###############################\n  Distributing Python Modules\n###############################\n\n"
  },
  {
    "path": "Doc/distutils/_setuptools_disclaimer.rst",
    "chars": 239,
    "preview": ".. note::\n\n   This document is being retained solely until the ``setuptools`` documentation\n   at https://setuptools.rea"
  },
  {
    "path": "Doc/distutils/apiref.rst",
    "chars": 96895,
    "preview": ".. _api-reference:\n\n*************\nAPI Reference\n*************\n\n.. seealso::\n\n   `New and changed setup.py arguments in s"
  },
  {
    "path": "Doc/distutils/builtdist.rst",
    "chars": 19683,
    "preview": ".. _built-dist:\n\n****************************\nCreating Built Distributions\n****************************\n\n.. include:: ./"
  },
  {
    "path": "Doc/distutils/commandref.rst",
    "chars": 4586,
    "preview": ".. _reference:\n\n*****************\nCommand Reference\n*****************\n\n.. include:: ./_setuptools_disclaimer.rst\n\n.. % \\"
  },
  {
    "path": "Doc/distutils/configfile.rst",
    "chars": 6061,
    "preview": ".. _setup-config:\n\n************************************\nWriting the Setup Configuration File\n***************************"
  },
  {
    "path": "Doc/distutils/examples.rst",
    "chars": 10390,
    "preview": ".. _distutils_examples:\n\n******************\nDistutils Examples\n******************\n\n.. include:: ./_setuptools_disclaimer"
  },
  {
    "path": "Doc/distutils/extending.rst",
    "chars": 4563,
    "preview": ".. _extending-distutils:\n\n*******************\nExtending Distutils\n*******************\n\n.. include:: ./_setuptools_discla"
  },
  {
    "path": "Doc/distutils/index.rst",
    "chars": 1539,
    "preview": ".. _distutils-index:\n\n##############################################\n  Distributing Python Modules (Legacy version)\n####"
  },
  {
    "path": "Doc/distutils/introduction.rst",
    "chars": 8060,
    "preview": ".. _distutils-intro:\n\n****************************\nAn Introduction to Distutils\n****************************\n\n.. include"
  },
  {
    "path": "Doc/distutils/packageindex.rst",
    "chars": 448,
    "preview": ":orphan:\n\n.. _package-index:\n\n*******************************\nThe Python Package Index (PyPI)\n**************************"
  },
  {
    "path": "Doc/distutils/setupscript.rst",
    "chars": 31205,
    "preview": ".. _setup-script:\n\n************************\nWriting the Setup Script\n************************\n\n.. include:: ./_setuptool"
  },
  {
    "path": "Doc/distutils/sourcedist.rst",
    "chars": 9741,
    "preview": ".. _source-dist:\n\n******************************\nCreating a Source Distribution\n******************************\n\n.. inclu"
  },
  {
    "path": "Doc/distutils/uploading.rst",
    "chars": 226,
    "preview": ":orphan:\n\n***************************************\nUploading Packages to the Package Index\n******************************"
  },
  {
    "path": "Doc/extending/building.rst",
    "chars": 6584,
    "preview": ".. highlight:: c\n\n.. _building:\n\n*****************************\nBuilding C and C++ Extensions\n***************************"
  },
  {
    "path": "Doc/extending/embedding.rst",
    "chars": 12620,
    "preview": ".. highlight:: c\n\n\n.. _embedding:\n\n***************************************\nEmbedding Python in Another Application\n*****"
  },
  {
    "path": "Doc/extending/extending.rst",
    "chars": 58179,
    "preview": ".. highlight:: c\n\n\n.. _extending-intro:\n\n******************************\nExtending Python with C or C++\n*****************"
  },
  {
    "path": "Doc/extending/index.rst",
    "chars": 2876,
    "preview": ".. _extending-index:\n\n##################################################\n  Extending and Embedding the Python Interprete"
  },
  {
    "path": "Doc/extending/newtypes.rst",
    "chars": 25897,
    "preview": ".. highlight:: c\n\n.. _new-types-topics:\n\n*****************************************\nDefining Extension Types: Assorted To"
  },
  {
    "path": "Doc/extending/newtypes_tutorial.rst",
    "chars": 34199,
    "preview": ".. highlight:: c\n\n.. _defining-new-types:\n\n**********************************\nDefining Extension Types: Tutorial\n*******"
  },
  {
    "path": "Doc/extending/windows.rst",
    "chars": 6428,
    "preview": ".. highlight:: c\n\n\n.. _building-on-windows:\n\n****************************************\nBuilding C and C++ Extensions on W"
  },
  {
    "path": "Doc/faq/design.rst",
    "chars": 33452,
    "preview": "======================\nDesign and History FAQ\n======================\n\n.. only:: html\n\n   .. contents::\n\n\nWhy does Python"
  },
  {
    "path": "Doc/faq/extending.rst",
    "chars": 14953,
    "preview": "=======================\nExtending/Embedding FAQ\n=======================\n\n.. only:: html\n\n   .. contents::\n\n.. highlight:"
  },
  {
    "path": "Doc/faq/general.rst",
    "chars": 20422,
    "preview": ":tocdepth: 2\n\n==================\nGeneral Python FAQ\n==================\n\n.. only:: html\n\n   .. contents::\n\n\nGeneral Infor"
  },
  {
    "path": "Doc/faq/gui.rst",
    "chars": 3025,
    "preview": ":tocdepth: 2\n\n==========================\nGraphic User Interface FAQ\n==========================\n\n.. only:: html\n\n   .. co"
  },
  {
    "path": "Doc/faq/index.rst",
    "chars": 278,
    "preview": ".. _faq-index:\n\n###################################\n  Python Frequently Asked Questions\n################################"
  },
  {
    "path": "Doc/faq/installed.rst",
    "chars": 2332,
    "preview": "=============================================\n\"Why is Python Installed on my Computer?\" FAQ\n============================"
  },
  {
    "path": "Doc/faq/library.rst",
    "chars": 31307,
    "preview": ":tocdepth: 2\n\n=========================\nLibrary and Extension FAQ\n=========================\n\n.. only:: html\n\n   .. conte"
  },
  {
    "path": "Doc/faq/programming.rst",
    "chars": 76264,
    "preview": ":tocdepth: 2\n\n===============\nProgramming FAQ\n===============\n\n.. only:: html\n\n   .. contents::\n\nGeneral Questions\n====="
  },
  {
    "path": "Doc/faq/windows.rst",
    "chars": 12015,
    "preview": ":tocdepth: 2\n\n.. highlight:: none\n\n.. _windows-faq:\n\n=====================\nPython on Windows FAQ\n=====================\n\n"
  },
  {
    "path": "Doc/glossary.rst",
    "chars": 57690,
    "preview": ".. _glossary:\n\n********\nGlossary\n********\n\n.. if you add new entries, keep the alphabetical sorting!\n\n.. glossary::\n\n   "
  },
  {
    "path": "Doc/howto/annotations.rst",
    "chars": 9318,
    "preview": ".. _annotations-howto:\n\n**************************\nAnnotations Best Practices\n**************************\n\n:author: Larry"
  },
  {
    "path": "Doc/howto/argparse.rst",
    "chars": 23546,
    "preview": "*****************\nArgparse Tutorial\n*****************\n\n:author: Tshepang Lekhonkhobe\n\n.. _argparse-tutorial:\n\nThis tutor"
  },
  {
    "path": "Doc/howto/clinic.rst",
    "chars": 68303,
    "preview": ".. highlight:: c\n\n**********************\nArgument Clinic How-To\n**********************\n\n:author: Larry Hastings\n\n\n.. top"
  },
  {
    "path": "Doc/howto/cporting.rst",
    "chars": 1005,
    "preview": ".. highlight:: c\n\n.. _cporting-howto:\n\n*************************************\nPorting Extension Modules to Python 3\n*****"
  },
  {
    "path": "Doc/howto/curses.rst",
    "chars": 25474,
    "preview": ".. _curses-howto:\n\n**********************************\n  Curses Programming with Python\n*********************************"
  },
  {
    "path": "Doc/howto/descriptor.rst",
    "chars": 51271,
    "preview": ".. _descriptorhowto:\n\n======================\nDescriptor HowTo Guide\n======================\n\n:Author: Raymond Hettinger\n:"
  },
  {
    "path": "Doc/howto/functional.rst",
    "chars": 49296,
    "preview": "********************************\n  Functional Programming HOWTO\n********************************\n\n:Author: A. M. Kuchlin"
  },
  {
    "path": "Doc/howto/index.rst",
    "chars": 673,
    "preview": "***************\n Python HOWTOs\n***************\n\nPython HOWTOs are documents that cover a single, specific topic,\nand att"
  },
  {
    "path": "Doc/howto/instrumentation.rst",
    "chars": 14980,
    "preview": ".. highlight:: shell-session\n\n.. _instrumentation:\n\n===============================================\nInstrumenting CPytho"
  },
  {
    "path": "Doc/howto/ipaddress.rst",
    "chars": 11731,
    "preview": ".. testsetup::\n\n   import ipaddress\n\n.. _ipaddress-howto:\n\n***************************************\nAn introduction to th"
  },
  {
    "path": "Doc/howto/logging-cookbook.rst",
    "chars": 122627,
    "preview": ".. _logging-cookbook:\n\n================\nLogging Cookbook\n================\n\n:Author: Vinay Sajip <vinay_sajip at red-dove"
  },
  {
    "path": "Doc/howto/logging.rst",
    "chars": 48703,
    "preview": "=============\nLogging HOWTO\n=============\n\n:Author: Vinay Sajip <vinay_sajip at red-dove dot com>\n\n.. _logging-basic-tut"
  },
  {
    "path": "Doc/howto/pyporting.rst",
    "chars": 22653,
    "preview": ".. _pyporting-howto:\n\n*********************************\nPorting Python 2 Code to Python 3\n******************************"
  },
  {
    "path": "Doc/howto/regex.rst",
    "chars": 62879,
    "preview": ".. _regex-howto:\n\n****************************\n  Regular Expression HOWTO\n****************************\n\n:Author: A.M. Ku"
  },
  {
    "path": "Doc/howto/sockets.rst",
    "chars": 18572,
    "preview": ".. _socket-howto:\n\n****************************\n  Socket Programming HOWTO\n****************************\n\n:Author: Gordon"
  },
  {
    "path": "Doc/howto/sorting.rst",
    "chars": 12051,
    "preview": ".. _sortinghowto:\n\nSorting HOW TO\n**************\n\n:Author: Andrew Dalke and Raymond Hettinger\n:Release: 0.1\n\n\nPython lis"
  },
  {
    "path": "Doc/howto/unicode.rst",
    "chars": 31828,
    "preview": ".. _unicode-howto:\n\n*****************\n  Unicode HOWTO\n*****************\n\n:Release: 1.12\n\nThis HOWTO discusses Python's s"
  },
  {
    "path": "Doc/howto/urllib2.rst",
    "chars": 24647,
    "preview": ".. _urllib-howto:\n\n***********************************************************\n  HOWTO Fetch Internet Resources Using Th"
  },
  {
    "path": "Doc/includes/custom.c",
    "chars": 976,
    "preview": "#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n\ntypedef struct {\n    PyObject_HEAD\n    /* Type-specific fields go here. */"
  },
  {
    "path": "Doc/includes/custom2.c",
    "chars": 3450,
    "preview": "#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n#include \"structmember.h\"\n\ntypedef struct {\n    PyObject_HEAD\n    PyObject "
  },
  {
    "path": "Doc/includes/custom3.c",
    "chars": 4613,
    "preview": "#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n#include \"structmember.h\"\n\ntypedef struct {\n    PyObject_HEAD\n    PyObject "
  },
  {
    "path": "Doc/includes/custom4.c",
    "chars": 4916,
    "preview": "#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n#include \"structmember.h\"\n\ntypedef struct {\n    PyObject_HEAD\n    PyObject "
  },
  {
    "path": "Doc/includes/dbpickle.py",
    "chars": 2863,
    "preview": "# Simple example presenting how persistent ID can be used to pickle\n# external objects by reference.\n\nimport pickle\nimpo"
  },
  {
    "path": "Doc/includes/email-alternative.py",
    "chars": 1716,
    "preview": "#!/usr/bin/env python3\n\nimport smtplib\n\nfrom email.message import EmailMessage\nfrom email.headerregistry import Address\n"
  },
  {
    "path": "Doc/includes/email-dir.py",
    "chars": 3068,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"Send the contents of a directory as a MIME message.\"\"\"\n\nimport os\nimport smtplib\n# For guessi"
  },
  {
    "path": "Doc/includes/email-headers.py",
    "chars": 950,
    "preview": "# Import the email modules we'll need\nfrom email.parser import BytesParser, Parser\nfrom email.policy import default\n\n# I"
  },
  {
    "path": "Doc/includes/email-mime.py",
    "chars": 930,
    "preview": "# Import smtplib for the actual sending function\nimport smtplib\n\n# And imghdr to find the types of our images\nimport img"
  },
  {
    "path": "Doc/includes/email-read-alternative.py",
    "chars": 2906,
    "preview": "import os\nimport sys\nimport tempfile\nimport mimetypes\nimport webbrowser\n\n# Import the email modules we'll need\nfrom emai"
  },
  {
    "path": "Doc/includes/email-simple.py",
    "chars": 585,
    "preview": "# Import smtplib for the actual sending function\nimport smtplib\n\n# Import the email modules we'll need\nfrom email.messag"
  },
  {
    "path": "Doc/includes/email-unpack.py",
    "chars": 1586,
    "preview": "#!/usr/bin/env python3\n\n\"\"\"Unpack a MIME message into a directory of files.\"\"\"\n\nimport os\nimport email\nimport mimetypes\n"
  },
  {
    "path": "Doc/includes/minidom-example.py",
    "chars": 1582,
    "preview": "import xml.dom.minidom\n\ndocument = \"\"\"\\\n<slideshow>\n<title>Demo slideshow</title>\n<slide><title>Slide title</title>\n<poi"
  },
  {
    "path": "Doc/includes/mp_newtype.py",
    "chars": 1940,
    "preview": "from multiprocessing import freeze_support\nfrom multiprocessing.managers import BaseManager, BaseProxy\nimport operator\n\n"
  },
  {
    "path": "Doc/includes/mp_pool.py",
    "chars": 3892,
    "preview": "import multiprocessing\nimport time\nimport random\nimport sys\n\n#\n# Functions used by test code\n#\n\ndef calculate(func, args"
  },
  {
    "path": "Doc/includes/mp_workers.py",
    "chars": 1586,
    "preview": "import time\nimport random\n\nfrom multiprocessing import Process, Queue, current_process, freeze_support\n\n#\n# Function run"
  },
  {
    "path": "Doc/includes/run-func.c",
    "chars": 1985,
    "preview": "#define PY_SSIZE_T_CLEAN\n#include <Python.h>\n\nint\nmain(int argc, char *argv[])\n{\n    PyObject *pName, *pModule, *pFunc;\n"
  },
  {
    "path": "Doc/includes/setup.py",
    "chars": 329,
    "preview": "from distutils.core import setup, Extension\nsetup(name=\"noddy\", version=\"1.0\",\n      ext_modules=[\n         Extension(\"n"
  },
  {
    "path": "Doc/includes/sqlite3/adapter_datetime.py",
    "chars": 323,
    "preview": "import sqlite3\nimport datetime\nimport time\n\ndef adapt_datetime(ts):\n    return time.mktime(ts.timetuple())\n\nsqlite3.regi"
  },
  {
    "path": "Doc/includes/sqlite3/adapter_point_1.py",
    "chars": 365,
    "preview": "import sqlite3\n\nclass Point:\n    def __init__(self, x, y):\n        self.x, self.y = x, y\n\n    def __conform__(self, prot"
  },
  {
    "path": "Doc/includes/sqlite3/adapter_point_2.py",
    "chars": 344,
    "preview": "import sqlite3\n\nclass Point:\n    def __init__(self, x, y):\n        self.x, self.y = x, y\n\ndef adapt_point(point):\n    re"
  },
  {
    "path": "Doc/includes/sqlite3/collation_reverse.py",
    "chars": 484,
    "preview": "import sqlite3\n\ndef collate_reverse(string1, string2):\n    if string1 == string2:\n        return 0\n    elif string1 < st"
  },
  {
    "path": "Doc/includes/sqlite3/complete_statement.py",
    "chars": 672,
    "preview": "# A minimal SQLite shell for experiments\n\nimport sqlite3\n\ncon = sqlite3.connect(\":memory:\")\ncon.isolation_level = None\nc"
  },
  {
    "path": "Doc/includes/sqlite3/converter_point.py",
    "chars": 1192,
    "preview": "import sqlite3\n\nclass Point:\n    def __init__(self, x, y):\n        self.x, self.y = x, y\n\n    def __repr__(self):\n      "
  },
  {
    "path": "Doc/includes/sqlite3/ctx_manager.py",
    "chars": 705,
    "preview": "import sqlite3\n\ncon = sqlite3.connect(\":memory:\")\ncon.execute(\"create table lang (id integer primary key, name varchar u"
  },
  {
    "path": "Doc/includes/sqlite3/execute_1.py",
    "chars": 540,
    "preview": "import sqlite3\n\ncon = sqlite3.connect(\":memory:\")\ncur = con.cursor()\ncur.execute(\"create table lang (name, first_appeare"
  },
  {
    "path": "Doc/includes/sqlite3/executemany_1.py",
    "chars": 565,
    "preview": "import sqlite3\n\nclass IterChars:\n    def __init__(self):\n        self.count = ord('a')\n\n    def __iter__(self):\n        "
  },
  {
    "path": "Doc/includes/sqlite3/executemany_2.py",
    "chars": 355,
    "preview": "import sqlite3\nimport string\n\ndef char_generator():\n    for c in string.ascii_lowercase:\n        yield (c,)\n\ncon = sqlit"
  },
  {
    "path": "Doc/includes/sqlite3/executescript.py",
    "chars": 431,
    "preview": "import sqlite3\n\ncon = sqlite3.connect(\":memory:\")\ncur = con.cursor()\ncur.executescript(\"\"\"\n    create table person(\n    "
  }
]

// ... and 4150 more files (download for full content)

About this extraction

This page contains the full source code of the NulAsh/cpython GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4350 files (81.5 MB), approximately 21.6M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!